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
ubuntu12.04、windows、macOS安装docker
参考docker中文文档http://www.widuu.com/docker/
2、docker使用过程实践
2.1 在测试机启动容器,安装ssh
3、关于docker容器的端口映射
由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:
stop,start来控制容器进程。
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使用:
关于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参数详解
7、docker run命令详解
8、docker常用命令总结
8.5运行一个新容器
转载请保留链接:http://www.linuxeye.com/Linux/2019.html
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
相关文章推荐
- docker v1.10.0 重大变化
- 总结云计算/OpenStack/Docker的概念理解
- Docker 容器镜像下载已超20亿次
- Docker命令相关
- Hello Docker (Docker 入门分享)
- Hello Docker (Docker 入门分享)
- Docker实践2:安装Docker及weblogic镜像
- 搭建docker hadoop环境
- Docker实践1:Virtualbox安装Oracle Enterprise Linux R6 U5
- 用Docker运行Percona Server
- 关于weblogic server对docker的支持
- Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
- Docker问题
- 在docker上centos7 编译安装php7
- Docker多主机网络通信详解
- OpenStack和Docker不能,Kubernetes和Mesos也不能,ServerLess能决定云计算胜负吗?
- Docker 官方镜像将会使用 Alpine Linux 替换 Ubuntu
- mesos+marathon管理docker集群
- 基于Docker的Golang开发
- CentOS6.5 Docker操作记录