关于docker使用的几个小问题(一)
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃
由于刚接触docker踩了几个坑,希望本文对网瘾少年有所帮助。
Docker分CE版(社区版)和EE版(商用版),具体安装流程参考文档介绍,在此不再赘述。下面分Windows和Linux分别踩坑:
一、Windows下的使用
Win10可以直接安装Docker ToolBox,网上很多配置教程,但是当你百度Win7安装,常见的几个都是安装Boot2Docker。其实Docker ToolBox也是支持Win7的,所以这里就别踩坑了,因为Docker ToolBox里面已经集成了Boot2Docker。这里我不会详细讲解安装步骤,只谈自己碰到的问题,如果你有和我相同的疑惑,相信可以在我这里可以找到答案。
Boot2Docker其实是Win环境下的一个Linux虚拟机,必须配合virtualBox使用,如果你安装了Docker ToolBox,打开virtualBox可以看到这个虚拟机:
直接官网下载Docker ToolBox,安装完成运行DockerQuickStartTerminal,执行命令:
docker-machine ls ##我已经把boot需要的Linux镜像下载了,下载过程比较慢,建议科学上网。
docker-machine env default ##查看dockertools环境变量:
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env default) ###根据提示运行命令:写入环境变量
此时我们是在docker环境下的,可以尝试run一个镜像试试(这里试了ubuntu:16.04,本地没有的镜像会自动下载)
docker run -it ubuntu:16.04 ##执行run命令,出现错误提示:
说明我们运行的方式不太好,按照建议修改run方式:
winpty docker run -it ubuntu:16.04 ##重新执行,成功进入系统
或者,可以通过ssh的方式进入docker环境,在任意的bash环境下输入命令:
docker-machine ssh default #在任意bash下执行进入VMbash
docker run -it ubuntu:16.04 ##执行run命令成功进入系统,不会提示使用winpty方式运行。
Linux下的安装配置没啥坑,yum、apt直接装就好了。
二、使用国内镜像加速器
docker默认使用的镜像服务器都在国外,速度比较感人,所以需要镜像加速。我使用的是阿里云镜像加速,建议自己去注册一个阿里云账号,进入个人的容器镜像服务->docker hub镜像站点,就可以看到自己的镜像加速地址,阿里云的手册中有各个环境下的配置方法。这里给比较懒的同学推荐中科大的镜像加速地址:
1. Windows下配置镜像加速
#通过docker-machine进入docker环境 docker-machine ssh default #修改boot2docker配置文件 sudo vi /var/lib/boot2docker/profile #在--label provider=virtualbox的下一行添加 --registry-mirror https://docker.mirrors.ustc.edu.cn
#重启docker服务 sudo /etc/init.d/docker restart
#或者重启VM:exit退出VM bash,在windows bash中执行 docker-machine restart
2. Linux下配置镜像加速器(Ubuntu16.04)
参照阿里云配置docker的daemon.json文件:
vim /etc/docker/daemon.json ###
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
systemctl restart docker.service ##重启服务
有的同学应该会在重启服务的时候报错:
Job for docker.service failed because the control process exited with error code.See "systemctl status docker.service" and "journalctl -xe" for details.
查看一下systemctl status docker.service
这个错误的原因是:docker的socket配置出现了冲突,docker在运行时有一个启动入口文件:/lib/systemd/system/docker.service,而我们在修改镜像加速器的时候又给它生成了一个配置文件:/etc/docker/daemon.json,两个文件对host进行了配置,所以发生冲突。
解决的办法:将docker启动入口文件中的-H fd://删除再重启服务,或者在启动入口配置监听的端口和本地socket信息:
vim /lib/systemd/system/docker.service #原:ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
ExecStart=/usr/bin/dockerd
#或者改成:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
三、镜像在哪里
1. 在Linux下
我们很容易就可以找到镜像目录,镜像是以层次结构存储的。 每当创建一个pull一个新的image或者容器时会在/var/lib/docker/graph/*生成对应ID的目录存储元数据,/var/lib/docker/aufs/diff/*目录生成对应ID的目录存储数据。 当容器被删除或者image被移除时,对应的目录也会被移除。
2. 在Mac下
官方提供的DockerToolBox,不得不吐槽,Windows差距怎么就这么大呢。Mac下通过Open in Finder可以很轻松找到文件目录,Mac硬盘小,玩docker压力还是比较大的,只能拿来测试练练手,土豪随意。
3. 在Windows下
也是用的官方的ToolBox,正如前文所述,它需要在VirtualBox下运行一个虚拟机,所以我们就在这个虚拟机中找我们的docker就行了。废话不多说,直接看图。
综上所述,不推荐使用Windows玩docker,建议阿里云申请个免费ECS,玩起来随便折腾,而且现在京东、华为、腾讯都在折腾云计算,很多免费资源,不用白不用,改天不忙了写个小白科普文。