docker学习

一.1. docker

一.1.1. docker安装

一.1.1.1. 安装过程

下载:linux

https://docs.docker.com/installation/windowsnginx

而后安装git

我下载了Install Docker Desktop for Windows,可是因为个人OSwindows10home版的,不支持,听说只支持windows prowindows serverweb

因而,只能下载DockerToolbox,下载之后安装。docker

 

安装成功之后能够经过如下方式登录:ubuntu

1. 打开gitbashcddocker目录,执行start.shvim

2. 执行Docker Quickstart Terminalwindows

3. 能够在secureCRT中配置ssh2链接,用户名密码是:docker/tcuserbash

一.1.1.2. 踩过的坑

执行Docker Quickstart Terminal网络

报错:

找不到bash.sh

分析:

这个是因为个人git安装目录和默认安装路径不同所致,

解决:

只要修改快捷键Docker Quickstart Termina”的启动属性中的目标,把bash.sh的路径按照我本身的安装路径写正确便可。修改之后为:"H:\Program Files\Git\bin\bash.exe" --login -i "H:\Program Files\Docker Toolbox\start.sh"

 

报错:

处理步骤:

关闭电脑,再重启,进入BIOS,找到CPU Configuration> Intel Virtualization Technology,设置为Enabled

这个时候,会显示虚拟化启动成功:

再次执行Docker Quickstart Terminal,就能够成功了,中间须要等待一段时间。

下次打开docker,能够在gitbash中进入到docker.exe,再执行docker.exe

H:\Program Files\Docker Toolbox\docker.exe

若是出现报错,能够执行:gitbash中进入到start.sh,再执行start.sh:

$cd /h/’Program Files’/’Docker Toolbox’

$start.sh

一.1.2. docker操做命令

一.1.2.1. 基本概念

镜像:相似于虚拟机镜像,能够理解为一个面向docker引擎的只读模板,包含了文件系统。

容器:是从镜像建立的应用运行实例,能够将其启动、开始、中止、删除,这些容器都是相互隔离、互不可见的。

仓库:是docker集中存放镜像文件的场所。

一.1.2.2. 基本操做

1.镜像

国内镜像地址:网易镜像中心:https://c.163.com/hub#/m/home/ 
daocloud镜像市场:https://hub.daocloud.io/

从网易获取镜像过程:登录网址https://c.163.com/hub#/m/home/,用户名密码:282660642@qq.com/ypb0228,搜索相应镜像,而后复制下载地址,到docker中执行即可,好比:docker pull hub.c.163.com/library/registry:latest

获取镜像:docker pull ubuntu:14.4

                                       ^       ^

                                  镜像名称  tag

          带仓库地址的命令:docker  pull dl.dockerpool.com:5000/ubuntu

查看镜像信息:docker images

为本地镜像添加新标签:docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest

查看镜像详细信息:docker inspect yourImageID

搜索镜像:docker search yourImageName

删除镜像:docker rmi yourImageIDOrTag

2.容器

建立容器:docker create -it ubuntu:latest

建立具名容器:docker create -it --name myName ubuntu

(相关容器操做中除了可使用容器id,就还可使用方便记忆的容器名称了)

查看已建立容器:docker  -a

查看已建立未启动容器:docker -a -q

运行一个容器,然后自动中止:docker run ubuntu /bin/echo ‘Hello’

运行一个容器,保持伪终端打开:docker run -t -i ubuntu /bin/bash

守护态启动容器:docker run -d ubuntu /bin/sh -c ‘while true;do echo ‘1’;sleep 1;done;’

启动一个容器:docker start yourDockerID

中止一个容器:docker  stop yourDockerID

重启一个容器:docker restart yourDockerID

进入容器:docker attach yourDockerID

导出容器:docker export yourDockerId >yourFileName.tar

导入容器:docker import yourFileName.tar demo:v1.0

(导入进去的容器,就能够用docker images看到了,能够用来建立新的容器)

 

3.仓库

docker本地新建仓库:

$docker run --name docker-registry -d -p 5001:5001 registry

                                                                     ^     ^

                                                          宿主机port  容器port

仓库建好之后的测试:docker@default:/$ curl -X GET http://127.0.0.1:5001/           

curl: (52) Empty reply from server

 

4.数据卷操做

建立一个数据主机,利用本机的空间:

docekr create -ti --name dataServer -v /h/tmpData:/datatmp ubuntu

                                                                      ^           ^

                                                              本地空间   主机挂载点

建立一个共享dataServer/datatmp下面的数据卷到/data下面

docker create -ti --name datangix mynginx --volumes-from dataServer /data:/datatmp

建立成功了,可是仍是启动不了,启动的时候报错:

docker@default:/$ docker start datangix2

Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"--volumes-from\": executable file not found in $PATH": unknown

Error: failed to start containers: datangix2

解决方法:

docker create -ti --name datangix mynginx /bin/bash --volumes-from dataServer /data:/datatmp

 

5.网络操做

docker create -ti --name mynginx -p 192.168.99.100:8089:80 mynginx /bin/bash

#-p 说明,192.168.99.100dockerip808980,是把mynginx中的端口80映射到8089

 

6.踩过的坑:

问题:

$ docker attach b16cc744c3ed

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

解决:将winpty放到最前面

$ winpty docker attach b16cc744c3ed

 

问题:

导出的ubuntu镜像重命名之后再次导入,create container的时候报错:

$ docker create -it somename:v1.0

Error response from daemon: No command specified

解决:

再最后加参数:

docker create -it --name mydemo somename:v1.0 /bin/bash

 

问题:

启动docker容器之后,就是没法attach

$ winpty docker attach mydemo2

You cannot attach to a stopped container, start it first

解决:

建立的时候少了 -ti参数致使。

建立的时候加上 -ti参数便可:

docker create -ti --name mydemo2 mydemo:v1.0

 

问题:

建立一个共享dataServer/datatmp下面的数据卷到/data下面

docker create -ti --name datangix mynginx --volumes-from dataServer /data:/datatmp

建立成功了,可是仍是启动不了,启动的时候报错:

docker@default:/$ docker start datangix2

Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"--volumes-from\": executable file not found in $PATH": unknown

Error: failed to start containers: datangix2

解决方法:

docker create -ti --name datangix mynginx /bin/bash --volumes-from dataServer /data:/datatmp

 

 

一.1.3. docker实战

一.1.3.1. 建立容器,并在宿主机访问

docker中新建一个nginx容器,而后在宿主机进行访问

 

先从网易docker镜像库下载nginx

在本地执行docker pull命令,若是网络有问题,可是ping 8.8.8.8没有问题,就重启一下虚拟机docker再试试。

下好之后,打个tag方便使用:

$docker tag hub.c.163.com/library/nginx mynginx

再建立nginx容器,并启动:

$docker run --detach --publish 8009:80 --name webserver mynginx:latest

docker中可使用curl进行测试:

dockerifconfig找到相应ip

docker中使用curl进行测试,测试结果:

在宿主机进行测试,宿主机测试结果以下:

若是想建容器之后,在容器内部启动nginx

先建立容器:

docker run --detach --publish 8089:80 -ti --name mynginx3 mynginx /bin/bash

进入容器

docker attach mynginx3

$cd sbin;nginx

而后进入到docker中,用curl进行测试,ok,是通的。

一.1.3.2. 安装vim

因为官方镜像多无vim,操做起来很不方便,须要安装vim,而国外镜像下载速度慢多以失败了结,所以须要先修改到国内镜像地址。

$cd etc/apt

mv sources.list sources.list_bak

而后用>>sources.list 中添加内容:

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse'>>sources.list

然后,再使用apt-get update

apt-get install vim进行安装

一.1.3.3. 容器能够经过ssh进行访问

安装ssh

$apt-get install openssh-server

$mkdir /var/run/sshd

启动ssh服务:

$/usr/sbin/sshd -D &

使用netstat查看一下,发现netstat未安装,$apt-get install net-tools

而后使用netstat确实能够看到已经在22端口进行监听。

而后,使用docker commit 保存镜像,

再次按照保存好的镜像建立一个容器,启动sshd服务,把docker10022端口映射到容器的22端口中。

 

问题:

可是使用sshdocker中登录的时候,提示密码错误。不晓得如何解决。

docker$ssh 192.168.99.100 #tcuser为密码能够登录,可是$ssh 192.168.99.100 -p 10022 #tcuser 为密码提示密码错误

缘由分析:

 

相关文章
相关标签/搜索