docker学习
2019-02-22 15:05 雄风狂飙 阅读(535) 评论(0) 编辑 收藏 举报一.1. docker
一.1.1. docker安装
一.1.1.1. 安装过程
下载:
https://docs.docker.com/installation/windows
然后安装
我下载了Install Docker Desktop for Windows,但是由于我的OS是windows10home版的,不支持,据说只支持windows pro和windows server。
于是,只能下载DockerToolbox,下载以后安装。
安装成功以后可以通过以下方式登陆:
1. 打开gitbash,cd到docker目录,执行start.sh
2. 执行Docker Quickstart Terminal
3. 可以在secureCRT中配置ssh2连接,用户名密码是:docker/tcuser
一.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.100是docker的ip,8089:80,是把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进行测试:
在docker中ifconfig找到相应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服务,把docker的10022端口映射到容器的22端口中。
问题:
但是使用ssh从docker中登陆的时候,提示密码错误。不晓得如何解决。
在docker中$ssh 192.168.99.100 #tcuser为密码可以登陆,但是$ssh 192.168.99.100 -p 10022 #tcuser 为密码提示密码错误
原因分析: