您的位置:首页 > 运维架构 > Docker

docker详细的基础用法

2016-02-15 17:40 537 查看
Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container)。(我个人还是喜欢称虚拟机) Docker应用容
Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application
Container)。(我个人还是喜欢称虚拟机)

Docker应用容器相对于 VM 有以下几个优点:

启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久

资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试

性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源

因为VM的Hypervisor需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。

个人体会较深的两处优点:

快速部署,传统的部署模式是:安装(包管理工具或者源码包编译)->配置->运行;Docker的部署模式是:复制->运行。
可以保证线上与测试环境一致,计划以后上线就直接复制测试使用的docker容器

什么是docker?

http://oilbeater.com/docker/2014/06/29/what-is-docker.html

为什么你应该关注docker?

http://oilbeater.com/docker/2014/06/13/why-you-should-care-about-docker.html

1、docker安装

debian7安装docker

参考地址:http://www.webmaster.me/server/installing-docker-on-debian-wheezy-in-60-seconds.html

<span class="pln">echo deb http</span><span class="pun">:</span><span class="com">//get.docker.io/ubuntu docker main | sudo tee/etc/apt/sources.list.d/docker.list </span><span class="pln">
sudo apt</span><span class="pun">-</span><span class="pln">key adv </span><span class="pun">--</span><span class="pln">keyserver keyserver</span><span class="pun">.</span><span class="pln">ubuntu</span><span class="pun">.</span><span class="pln">com </span><span class="pun">--</span><span class="pln">recv</span><span class="pun">-</span><span class="pln">keys </span><span class="lit">36A1D7869245C8950F966E92D8576A8BA88D21E9</span><span class="pln">
sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> update
sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install </span><span class="pun">-</span><span class="pln">y lxc</span><span class="pun">-</span><span class="pln">docker </span>
#四行命令,Docker就安装好了。下面创建一个ubuntu虚拟系统:
<span class="pln">docker pull ubuntu </span><span class="com">#此处是从官网拉取名为ubuntu的image,也可手动在https://index.docker.io上搜索想要的镜像。  </span><span class="pln">
docker run </span><span class="pun">-</span><span class="pln">i </span><span class="pun">-</span><span class="pln">t ubuntu </span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">bash </span><span class="com">#创建一个容器,-t是临时终端。 </span>


ubuntu12.04、windows、macOS安装docker

参考docker中文文档http://www.widuu.com/docker/

2、docker使用过程实践

2.1 在测试机启动容器,安装ssh

<span class="pln">docker run </span><span class="pun">-</span><span class="pln">i </span><span class="pun">-</span><span class="pln">t ubuntu </span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">bash </span><span class="com">#此方式运行的容器,退出后容器就会关闭。  </span><span class="pln">
apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install openssh</span><span class="pun">-</span><span class="pln">server </span><span class="com">#安装ssh  </span><span class="pln">
</span><span class="com">#需要修改/etc/sshd/sshd_config文件中内容  </span><span class="pln">
</span><span class="typ">PermitRootLogin</span><span class="pln"> yes
</span><span class="typ">UsePAM</span><span class="pln"> </span><span class="kwd">no</span><span class="pln"> </span>
2.2 启动ssh,容器以后台方式运行

<span class="pln">docker run </span><span class="pun">-</span><span class="pln">d </span><span class="pun">-</span><span class="pln">p </span><span class="lit">50001</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> </span><span class="pun"><容器</span><span class="pln">id</span><span class="pun">></span><span class="pln"> </span><span class="str">/usr/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">sshd</span><span class="pun">-</span><span class="pln">D
</span><span class="com">#容器id可通过 docker ps-a查看,最上面的为最新的。</span>
2.3 通过ssh连接到容器安装软件

<span class="pln">ssh </span><span class="pln">root@127</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">1</span><span class="pun">-</span><span class="pln">p</span><span class="pln"> </span><span class="lit">50001</span><span class="pln">
</span><span class="com">#连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。</span>
2.4 服务安装完成后,停止容器。

<span class="pln">docker s</span><a target=_blank target="_blank" href="http://www.linuxeye.com/command/top.html" style="color: rgb(106, 57, 6); text-decoration: none;"><u><span class="pln">top</span></u></a><span class="pln"> </span><span class="pun"><容器</span><span class="pln">id</span><span class="pun">></span><span class="pln"> </span><span class="com">#停止运行的容器</span>
2.5 把容器提交生成最新的镜像

<span class="pln">docker commit </span><span class="pun"><容器</span><span class="pln">id</span><span class="pun">></span><span class="pln"> debian02 </span><span class="com">#把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)</span>
2.6 打包镜像

<span class="pln">docker save debian02 </span><span class="pun">></span><span class="str">/root/</span><span class="pln">debian02</span><span class="pun">.</span><span class="pln">tar </span><span class="com">#debian02镜像打包</span>
2.7 在另外的机器上导入镜像

<span class="pln">docker load </span><span class="pun"><</span><span class="pln"> debian02</span><span class="pun">.</span><span class="pln">tar </span><span class="com">#导入镜像  </span><span class="pln">
docker images </span><span class="com">#查看存在的镜像</span>
2.8 启动容器

<span class="pln">docker run </span><span class="pun">-</span><span class="pln">h</span><span class="pun">=</span><span class="str">"redis-test"</span><span class="pln"> </span><span class="pun">--</span><span class="pln">name redis</span><span class="pun">-</span><span class="pln">test </span><span class="pun">-</span><span class="pln">d </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51000</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p51001</span><span class="pun">:</span><span class="lit">3306</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51003</span><span class="pun">:</span><span class="lit">6379</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51004</span><span class="pun">:</span><span class="lit">6381</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51005</span><span class="pun">:</span><span class="lit">80</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51006</span><span class="pun">:</span><span class="lit">8000</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51007</span><span class="pun">:</span><span class="lit">8888</span><span class="pln"> debian02 </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">rc</span><span class="pun">.</span><span class="kwd">local</span><span class="pln">
</span><span class="com">#此处是我测试机器启动命令,指定主机名与端口映射。  </span><span class="pln">
</span><span class="com">#启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。  </span><span class="pln">
docker</span><span class="pun">容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了,一堆依赖装的想死有木有。</span>


3、关于docker容器的端口映射

由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:
<span class="pln">docker run </span><span class="pun">-</span><span class="pln">h</span><span class="pun">=</span><span class="str">"activemq"</span><span class="pln"> </span><span class="pun">--</span><span class="pln">name activemq </span><span class="pun">-</span><span class="pln">d </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51000</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51001</span><span class="pun">:</span><span class="lit">3306</span><span class="pun">-</span><span class="pln">p </span><span class="lit">51003</span><span class="pun">:</span><span class="lit">6379</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51004</span><span class="pun">:</span><span class="lit">6381</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51005</span><span class="pun">:</span><span class="lit">80</span><span class="pun">-</span><span class="pln">p </span><span class="lit">51006</span><span class="pun">:</span><span class="lit">8000</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51007</span><span class="pun">:</span><span class="lit">8888</span><span class="pln"> debian</span><span class="pun">/</span><span class="kwd">base</span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">rc</span><span class="pun">.</span><span class="kwd">local</span><span class="pln">
</span><span class="com">#此处我把mysql,redis,nginx,ssh都进行了映射。 </span>
后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker
stop,start来控制容器进程。
<span class="pln">docker stop activemq
docker start activemq </span>
当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:

docker网络配置:http://www.open-open.com/lib/view/open1404896485747.html

4、关于docker容器的多程序开机自动运行

docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会运行,对于要跑多个程序的容器特别纠结。

多程序开机自动运行方法:

可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。

后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start <容器ID>即可。

5、关于docker容器和镜像的关系

无论容器里做什么操作,写文件,删文件。该容器的基本镜像都不会有任何改变。

这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果你有一个300MB的父镜像,如果你在容器中安装了50MB的额外应用或服务,你的容器只有50MB,父镜像还是300MB。

但是可以使用Dockfile或commit命令来,把增量镜像和父镜像一起生成一个新的镜像。

commit使用:

<span class="pln">docker commit </span><span class="pun"><容器</span><span class="pln">id</span><span class="pun">></span><span class="pln"> </span><span class="pun"><新镜像名称></span>
Dockfile使用:

<span class="pln">root@yangrong</span><span class="pun">:/</span><span class="pln">data</span><span class="com"># cat Dockerfile  </span><span class="pln">
</span><span class="typ">FROMubuntu</span><span class="pun">/</span><span class="pln">testa </span><span class="com">#这是基础镜像  </span><span class="pln">
CMD</span><span class="pun">[</span><span class="str">"/root/start.sh"</span><span class="pun">]</span><span class="pln"> </span><span class="com">#这是启动命令  </span><span class="pln">
root@yangrong</span><span class="pun">:</span><span class="str">/data# docker build -t <新镜像名> ./</span>


关于Dockfile更多参数参考地址:
http://www.tuicool.com/articles/FRvAbe http://www.colorscode.net/2014/01/04/howto-build-image-with-automatic-startup-ssh-service-from-dockerfile/
6、docker参数详解

<span class="pln">docker
useage of docker
</span><span class="pun">-</span><span class="pln">D </span><span class="pun">默认</span><span class="kwd">false</span><span class="pln"> </span><span class="pun">允许调试模式(</span><span class="pln">debugmode</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">H </span><span class="pun">默认是</span><span class="pln">unix</span><span class="pun">:</span><span class="com">///var/run/docker.sock tcp://[host[:port]]来绑定 或者unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做为默认值来使用  </span><span class="pln">
</span><span class="pun">-</span><span class="pln">api</span><span class="pun">-</span><span class="pln">enable</span><span class="pun">-</span><span class="pln">cors </span><span class="pun">默认</span><span class="pln">flase </span><span class="pun">允许</span><span class="pln">CORS header</span><span class="pun">远程</span><span class="pln">api
</span><span class="pun">-</span><span class="pln">b </span><span class="pun">默认是空,附加在已存在的网桥上,如果是用</span><span class="str">'none'</span><span class="pun">参数,就禁用了容器的网络</span><span class="pln">
</span><span class="pun">-</span><span class="pln">bip </span><span class="pun">默认是空,使用提供的</span><span class="pln">CIDR</span><span class="pun">(</span><span class="typ">ClasslessInter</span><span class="pun">-</span><span class="typ">Domain</span><span class="pln"> </span><span class="typ">Routing</span><span class="pun">-无类型域间选路)标记地址动态创建网桥(</span><span class="pln">dcoker0</span><span class="pun">),和-</span><span class="pln">b</span><span class="pun">参数冲突</span><span class="pln">
</span><span class="pun">-</span><span class="pln">d </span><span class="pun">默认</span><span class="kwd">false</span><span class="pln"> </span><span class="pun">允许进程模式(</span><span class="pln">daemonmode</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">dns </span><span class="pun">默认是空,使</span><span class="pln">docker</span><span class="pun">使用指定的</span><span class="pln">DNS</span><span class="pun">服务器</span><span class="pln">
</span><span class="pun">-</span><span class="pln">g </span><span class="pun">默认是</span><span class="str">"/var/lib/docker"</span><span class="pun">:作为</span><span class="pln">docker</span><span class="pun">使用的根路径</span><span class="pln">
</span><span class="pun">-</span><span class="pln">icc </span><span class="pun">默认</span><span class="kwd">true</span><span class="pun">,允许</span><span class="pln">inter</span><span class="pun">-</span><span class="pln">container</span><span class="pun">来通信</span><span class="pln">
</span><span class="pun">-</span><span class="pln">ip </span><span class="pun">默认</span><span class="str">"0.0.0.0"</span><span class="pun">:绑定容器端口的默认</span><span class="typ">Ip</span><span class="pun">地址</span><span class="pln">
</span><span class="pun">-</span><span class="pln">iptables </span><span class="pun">默认</span><span class="kwd">true</span><span class="pln"> </span><span class="pun">禁用</span><span class="pln">docker</span><span class="pun">添加</span><span class="pln">iptables</span><span class="pun">规则</span><span class="pln">
</span><span class="pun">-</span><span class="pln">mtu </span><span class="pun">默认</span><span class="lit">1500</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="pun">设置容器网络传输的最大单元(</span><span class="pln">mtu</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">p </span><span class="pun">默认是/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">run</span><span class="pun">/</span><span class="pln">docker</span><span class="pun">.</span><span class="pln">pid</span><span class="pun">进程</span><span class="pln">pid</span><span class="pun">使用的文件路径</span><span class="pln">
</span><span class="pun">-</span><span class="pln">r </span><span class="pun">默认是</span><span class="kwd">true</span><span class="pln"> </span><span class="pun">重启之前运行的容器</span><span class="pln">
</span><span class="pun">-</span><span class="pln">s </span><span class="pun">默认是空</span><span class="pln"> </span><span class="pun">,这个是</span><span class="pln">docker</span><span class="pun">运行是使用一个指定的存储驱动器</span><span class="pln">
</span><span class="pun">-</span><span class="pln">v </span><span class="pun">默认</span><span class="kwd">false</span><span class="pln"> </span><span class="pun">打印版本信息和退出</span><span class="pln"> </span>


7、docker run命令详解

<span class="typ">Usage</span><span class="pun">:</span><span class="pln"> docker run </span><span class="pun">[</span><span class="pln">OPTIONS</span><span class="pun">]</span><span class="pln"> IMAGE</span><span class="pun">[:</span><span class="pln">TAG</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="pln">COMMAND</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="pln">ARG</span><span class="pun">...]</span><span class="pln">
</span><span class="typ">Run</span><span class="pln"> a command </span><span class="kwd">in</span><span class="pln"> a </span><span class="kwd">new</span><span class="pln"> container
</span><span class="pun">-</span><span class="pln">a</span><span class="pun">=</span><span class="pln">map</span><span class="pun">[]:</span><span class="pln"> </span><span class="pun">附加标准输入、输出或者错误输出</span><span class="pln">
</span><span class="pun">-</span><span class="pln">c</span><span class="pun">=</span><span class="lit">0</span><span class="pun">:</span><span class="pln"> </span><span class="pun">共享</span><span class="pln">CPU</span><span class="pun">格式(相对重要)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">cidfile</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">将容器的</span><span class="pln">ID</span><span class="pun">标识写入文件</span><span class="pln">
</span><span class="pun">-</span><span class="pln">d</span><span class="pun">=</span><span class="kwd">false</span><span class="pun">:</span><span class="pln"> </span><span class="pun">分离模式,在后台运行容器,并且打印出容器</span><span class="pln">ID
</span><span class="pun">-</span><span class="pln">e</span><span class="pun">=[]:设置环境变量</span><span class="pln">
</span><span class="pun">-</span><span class="pln">h</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">容器的主机名称</span><span class="pln">
</span><span class="pun">-</span><span class="pln">i</span><span class="pun">=</span><span class="kwd">false</span><span class="pun">:</span><span class="pln"> </span><span class="pun">保持输入流开放即使没有附加输入流</span><span class="pln">
</span><span class="pun">-</span><span class="pln">privileged</span><span class="pun">=</span><span class="kwd">false</span><span class="pun">:</span><span class="pln"> </span><span class="pun">给容器扩展的权限</span><span class="pln">
</span><span class="pun">-</span><span class="pln">m</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">内存限制</span><span class="pln"> </span><span class="pun">(格式:<</span><span class="pln">number</span><span class="pun">><</span><span class="pln">optional unit</span><span class="pun">>,</span><span class="pln"> unit</span><span class="pun">单位</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> b</span><span class="pun">,</span><span class="pln"> k</span><span class="pun">,</span><span class="pln"> m </span><span class="kwd">or</span><span class="pln"> g</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">n</span><span class="pun">=</span><span class="kwd">true</span><span class="pun">:</span><span class="pln"> </span><span class="pun">允许镜像使用网络</span><span class="pln">
</span><span class="pun">-</span><span class="pln">p</span><span class="pun">=[]:</span><span class="pln"> </span><span class="pun">匹配镜像内的网络端口号</span><span class="pln">
</span><span class="pun">-</span><span class="pln">rm</span><span class="pun">=</span><span class="kwd">false</span><span class="pun">:当容器退出时自动删除容器</span><span class="pln"> </span><span class="pun">(不能跟</span><span class="pln"> </span><span class="pun">-</span><span class="pln">d</span><span class="pun">一起使用)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">t</span><span class="pun">=</span><span class="kwd">false</span><span class="pun">:</span><span class="pln"> </span><span class="pun">分配一个伪造的终端输入</span><span class="pln">
</span><span class="pun">-</span><span class="pln">u</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">用户名或者</span><span class="pln">ID
</span><span class="pun">-</span><span class="pln">dns</span><span class="pun">=[]:</span><span class="pln"> </span><span class="pun">自定义容器的</span><span class="pln">DNS</span><span class="pun">服务器</span><span class="pln">
</span><span class="pun">-</span><span class="pln">v</span><span class="pun">=[]:</span><span class="pln"> </span><span class="pun">创建一个挂载绑定:[</span><span class="pln">host</span><span class="pun">-</span><span class="pln">dir</span><span class="pun">]:[</span><span class="pln">container</span><span class="pun">-</span><span class="pln">dir</span><span class="pun">]:[</span><span class="pln">rw</span><span class="pun">|</span><span class="pln">ro</span><span class="pun">].如果容器目录丢失,</span><span class="pln">docker</span><span class="pun">会创建一个新的卷</span><span class="pln">
</span><span class="pun">-</span><span class="pln">volumes</span><span class="pun">-</span><span class="kwd">from</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">挂载容器所有的卷</span><span class="pln">
</span><span class="pun">-</span><span class="pln">entrypoint</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">覆盖镜像设置默认的入口点</span><span class="pln">
</span><span class="pun">-</span><span class="pln">w</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">工作目录内的容器</span><span class="pln">
</span><span class="pun">-</span><span class="pln">lxc</span><span class="pun">-</span><span class="pln">conf</span><span class="pun">=[]:</span><span class="pln"> </span><span class="pun">添加自定义-</span><span class="pln">lxc</span><span class="pun">-</span><span class="pln">conf</span><span class="pun">=</span><span class="str">"lxc.cgroup.cpuset.cpus = 0,1"</span><span class="pln">
</span><span class="pun">-</span><span class="pln">sig</span><span class="pun">-</span><span class="pln">proxy</span><span class="pun">=</span><span class="kwd">true</span><span class="pun">:</span><span class="pln"> </span><span class="pun">代理接收所有进程信号(</span><span class="pln">even </span><span class="kwd">in</span><span class="pln"> non</span><span class="pun">-</span><span class="pln">tty mode</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">expose</span><span class="pun">=[]:</span><span class="pln"> </span><span class="pun">让你主机没有开放的端口</span><span class="pln">
</span><span class="pun">-</span><span class="pln">link</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">连接到另一个容器(</span><span class="pln">name</span><span class="pun">:</span><span class="kwd">alias</span><span class="pun">)</span><span class="pln">
</span><span class="pun">-</span><span class="pln">name</span><span class="pun">=</span><span class="str">""</span><span class="pun">:</span><span class="pln"> </span><span class="pun">分配容器的名称,如果没有指定就会随机生成一个</span><span class="pln">
</span><span class="pun">-</span><span class="pln">P</span><span class="pun">=</span><span class="kwd">false</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Publish</span><span class="pln"> all exposed ports to thehost interfaces </span><span class="pun">公布所有显示的端口主机接口</span>


8、docker常用命令总结

<span class="pln">docker pull </span><span class="pun"><镜像名:</span><span class="pln">tag</span><span class="pun">></span><span class="pln"> </span><span class="com">#从官网拉取镜像  </span><span class="pln">
docker search </span><span class="pun"><镜像名></span><span class="pln"> </span><span class="com">#搜索在线可用镜像名</span>
8.1查询容器、镜像、日志
<span class="pln">docker top </span><span class="str"><container></span><span class="pln"> </span><span class="com">#显示容器内运行的进程  </span><span class="pln">
docker images </span><span class="com">#查询所有的镜像,默认是最近创建的排在最上。  </span><span class="pln">
docker ps </span><span class="com">#查看正在运行的容器  </span><span class="pln">
docker ps </span><span class="pun">-</span><span class="pln">l </span><span class="com">#查看最后退出的容器的ID  </span><span class="pln">
docker ps </span><span class="pun">-</span><span class="pln">a </span><span class="com">#查看所有的容器,包括退出的。  </span><span class="pln">
docker logs </span><span class="pun">{容器</span><span class="pln">ID</span><span class="pun">|容器名称}</span><span class="pln"> </span><span class="com">#查询某个容器的所有操作记录。  </span><span class="pln">
docker logs </span><span class="pun">-</span><span class="pln">f </span><span class="pun">{容器</span><span class="pln">ID</span><span class="pun">|容器名称}</span><span class="pln"> </span><span class="com">#实时查看容易的操作记录。 </span>
8.2删除容器与镜像

<span class="pln">docker rm$</span><span class="pun">(</span><span class="pln">docker ps </span><span class="pun">-</span><span class="pln">a </span><span class="pun">-</span><span class="pln">q</span><span class="pun">)</span><span class="pln"> </span><span class="com">#删除所有容器  </span><span class="pln">
docker rm </span><span class="pun"><容器名</span><span class="kwd">or</span><span class="pln"> ID</span><span class="pun">></span><span class="pln"> </span><span class="com">#删除单个容器  </span><span class="pln">
docker rmi </span><span class="pun"><</span><span class="pln">ID</span><span class="pun">></span><span class="pln"> </span><span class="com">#删除单个镜像  </span><span class="pln">
docker rmi$</span><span class="pun">(</span><span class="pln">docker images </span><span class="pun">|</span><span class="pln"> grep none </span><span class="pun">|</span><span class="pln"> awk </span><span class="str">'{print $3}'</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> sort </span><span class="pun">-</span><span class="pln">r</span><span class="pun">)</span><span class="pln"> </span><span class="com">#删除所有镜像</span>
8.3启动停止容器

<span class="pln">docker stop </span><span class="pun"><容器名</span><span class="kwd">or</span><span class="pln"> ID</span><span class="pun">></span><span class="pln"> </span><span class="com">#停止某个容器  </span><span class="pln">
docker start </span><span class="pun"><容器名</span><span class="kwd">or</span><span class="pln"> ID</span><span class="pun">></span><span class="pln"> </span><span class="com">#启动某个容器  </span><span class="pln">
docker kill </span><span class="pun"><容器名</span><span class="kwd">or</span><span class="pln"> ID</span><span class="pun">></span><span class="pln"> </span><span class="com">#杀掉某个容器</span>
8.4容器迁器

<span class="pln">docker </span><span class="kwd">export</span><span class="pln"> </span><span class="pun"><</span><span class="pln">CONTAINER ID</span><span class="pun">></span><span class="pln"> </span><span class="pun">></span><span class="pln"> </span><span class="str">/home/</span><span class="kwd">export</span><span class="pun">.</span><span class="pln">tar </span><span class="com">#导出  </span><span class="pln">
cat </span><span class="pun">/</span><span class="pln">home</span><span class="pun">/</span><span class="kwd">export</span><span class="pun">.</span><span class="pln">tar </span><span class="pun">|</span><span class="pln"> sudo docker </span><span class="kwd">import</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> busybox</span><span class="pun">-</span><span class="lit">1</span><span class="pun">-</span><span class="kwd">export</span><span class="pun">:</span><span class="pln">latest </span><span class="com"># 导入export.tar文件  </span><span class="pln">
docker save debian</span><span class="pun">></span><span class="pln"> </span><span class="str">/home/</span><span class="pln">save</span><span class="pun">.</span><span class="pln">tar </span><span class="com">#将debian容器打包  </span><span class="pln">
docker load</span><span class="pun"><</span><span class="pln"> </span><span class="str">/home/</span><span class="pln">save</span><span class="pun">.</span><span class="pln">tar </span><span class="com">#在另一台服务器上加载打包文件</span>
save和export的对比参考地址:http://www.fanli7.net/a/bianchengyuyan/C__/20140423/452256.html

8.5运行一个新容器
<span class="com">#运行一个新容器,同时为它命名、端口映射。以debian02镜像为例  </span><span class="pln">
docker run </span><span class="pun">-</span><span class="pln">h</span><span class="pun">=</span><span class="str">"redis-test"</span><span class="pln"> </span><span class="pun">--</span><span class="pln">name redis</span><span class="pun">-</span><span class="pln">test </span><span class="pun">-</span><span class="pln">d </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51000</span><span class="pun">:</span><span class="lit">22</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p51001</span><span class="pun">:</span><span class="lit">3306</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51003</span><span class="pun">:</span><span class="lit">6379</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51004</span><span class="pun">:</span><span class="lit">6381</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51005</span><span class="pun">:</span><span class="lit">80</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51006</span><span class="pun">:</span><span class="lit">8000</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">51007</span><span class="pun">:</span><span class="lit">8888</span><span class="pln"> debian02 </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">rc</span><span class="pun">.</span><span class="kwd">local</span><span class="pln">

</span><span class="com">#从container中拷贝文件,当container已经关闭后,在里面的文件还可以拷贝出来。  </span><span class="pln">
sudo docker cp </span><span class="lit">7bb0e258aefe</span><span class="pun">:</span><span class="str">/etc/</span><span class="pln">debian_version </span><span class="pun">.</span><span class="pln"> </span><span class="com">#把容器中的/etc/debian_version拷贝到当前目录下。</span>
8.6 docker Dockfile镜像制作

<span class="pln">root@yangrong</span><span class="pun">:/</span><span class="pln">data</span><span class="com"># cat Dockerfile  </span><span class="pln">
FROM ubuntu</span><span class="pun">/</span><span class="pln">testa </span><span class="com">#这是基础镜像  </span><span class="pln">
CMD </span><span class="pun">[</span><span class="str">"/root/start.sh"</span><span class="pun">]</span><span class="pln"> </span><span class="com">#这是启动命令  </span><span class="pln">
root@yangrong</span><span class="pun">:</span><span class="str">/data# docker build -t <新镜像名> ./</span><span class="pln"> </span><span class="com">#生成新的镜像</span>


转载请保留链接:http://www.linuxeye.com/Linux/2019.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: