<code>===</code>
<code>参考资料:</code>
<code>Docker 和一个正常的虚拟机有何区别?http:</code><code>//developer</code><code>.51cto.com</code><code>/art/201312/421964</code><code>.htm</code>
<code>全球首部Docker书籍:让你迈出使用Docker的第一步(1) http:</code><code>//cloud</code><code>.51cto.com</code><code>/art/201412/461998</code><code>.htm</code>
<code>docker镜像与容器存储结构分析 http:</code><code>//www</code><code>.csdn123.com</code><code>/html/topnews201408/94/7494</code><code>.htm</code>
<code>[root@test01 download]</code><code># yum update </code>
<code>【】安装</code>
<code>[root@test01 download]</code><code># yum install docker-io</code>
<code>[root@test01 download]</code><code># docker -v </code>
<code>Docker version 1.3.2, build 39fa2fa</code><code>/1</code><code>.3.2</code>
<code>【】启动服务</code>
<code>[root@test01 download]</code><code># service docker start</code>
<code>【】查看状态</code>
<code>[root@test01 download]</code><code># docker info </code>
<code>Containers: 0</code>
<code>Images: 0</code>
<code>Storage Driver: devicemapper</code>
<code> </code><code>Pool Name: docker-253:0-2228227-pool</code>
<code> </code><code>Pool Blocksize: 65.54 kB</code>
<code> </code><code>Data </code><code>file</code><code>: </code><code>/var/lib/docker/devicemapper/devicemapper/data</code>
<code> </code><code>Metadata </code><code>file</code><code>: </code><code>/var/lib/docker/devicemapper/devicemapper/metadata</code>
<code> </code><code>Data Space Used: 305.7 MB</code>
<code> </code><code>Data Space Total: 107.4 GB</code>
<code> </code><code>Metadata Space Used: 733.2 kB</code>
<code> </code><code>Metadata Space Total: 2.147 GB</code>
<code> </code><code>Library Version: 1.02.89-RHEL6 (2014-09-01)</code>
<code>Execution Driver: native-0.2</code>
<code>Kernel Version: 2.6.32-431.el6.x86_64</code>
<code>Operating System: <unknown></code>
<code>【】将某个用户加入到docker组,以便已非root用户来运行docker命令。</code>
<code>[root@test01 download]</code><code># useradd Jack </code>
<code>[root@test01 download]</code><code># usermod -a -G docker Jack</code>
<code>[root@test01 download]</code><code># id Jack</code>
<code>uid=500(Jack) gid=500(Jack) </code><code>groups</code><code>=500(Jack),490(docker)</code>
<code>[root@test01 download]</code><code># su Jack</code>
<code>【】查看images</code>
<code>[Jack@test01 download]$ docker images</code>
<code>REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE</code>
<code>从国内的仓库docker.cn上pull一个</code>
<code>[Jack@test01 download]$ docker pull docker.cn</code><code>/docker/centos</code>
<code>Pulling repository docker.cn</code><code>/docker/centos</code>
<code>34943839435d: Download complete </code>
<code>511136ea3c5a: Download complete </code>
<code>5b12ef8fd570: Download complete </code>
<code>Status: Downloaded newer image </code><code>for</code> <code>docker.cn</code><code>/docker/centos</code><code>:latest</code>
<code>再次查看</code>
<code>REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE</code>
<code>docker.cn</code><code>/docker/centos</code> <code>centos7 34943839435d 5 weeks ago 224 MB</code>
<code>docker.cn</code><code>/docker/centos</code> <code>latest 34943839435d 5 weeks ago 224 MB</code>
<code>[root@test01 download]</code><code># cd /var/lib/docker/</code>
<code>[root@test01 docker]</code><code># ls</code>
<code>containers devicemapper execdriver graph init linkgraph.db repositories-devicemapper tmp trust volumes</code>
<code>【】查看docker使用的镜像层次存储的driver是devicemapper</code>
<code>查看内容:</code>
<code>[root@test01 download]</code><code># cat /var/lib/docker/repositories-devicemapper |python -mjson.tool</code>
<code>{</code>
<code> </code><code>"Repositories"</code><code>: {</code>
<code> </code><code>"docker.cn/docker/centos"</code><code>: {</code>
<code> </code><code>"centos7"</code><code>: </code><code>"34943839435dfb2ee646b692eebb06af13823a680ace00c0adc232c437c4f90c"</code><code>, </code>
<code> </code><code>"latest"</code><code>: </code><code>"34943839435dfb2ee646b692eebb06af13823a680ace00c0adc232c437c4f90c"</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code>}</code>
<code>Device mapper driver 会创建一个100G的简单文件包含你的镜像和容器。每一个容器被限制在10G大小的卷内。</code>
<code>磁盘占用:100G不是实际占用,556M才是。</code>
<code>[root@test01 devicemapper]</code><code># cd devicemapper/devicemapper</code>
<code>[root@test01 devicemapper]</code><code># ll -h</code>
<code>total 556M</code>
<code>-rw------- 1 root root 100G Jan 7 14:52 data</code>
<code>-rw------- 1 root root 2.0G Jan 7 19:13 metadata</code>
<code>【】启动一个容器:</code>
<code>语法:</code>
<code>docker run -it -d --name Container_Name REPOSITORY:TAG CMD</code>
<code>-i:开启容器中STDIN</code>
<code>-t:分配一个</code><code>tty</code><code>来提供一个交互式shell</code>
<code>-d:后台模式</code>
<code>--name: 容器名</code>
<code>[Jack@test01 download]$ docker run -it docker.cn</code><code>/docker/centos</code> <code>/bin/bash</code>
<code> </code>
<code>[root@896725223c75 /]</code><code># ip a</code>
<code>13: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN </code>
<code> </code><code>link</code><code>/loopback</code> <code>00:00:00:00:00:00 brd 00:00:00:00:00:00</code>
<code> </code><code>inet 127.0.0.1</code><code>/8</code> <code>scope host lo</code>
<code> </code><code>inet6 ::1</code><code>/128</code> <code>scope host </code>
<code> </code><code>valid_lft forever preferred_lft forever</code>
<code>14: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>
<code> </code><code>link</code><code>/ether</code> <code>02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff</code>
<code> </code><code>inet 172.17.0.4</code><code>/16</code> <code>scope global eth0</code>
<code> </code><code>inet6 fe80::42:acff:fe11:4</code><code>/64</code> <code>scope link </code>
<code> </code>
<code>[root@896725223c75 /]</code><code># cat /etc/hosts</code>
<code>172.17.0.4 896725223c75</code>
<code>ff02::2 ip6-allrouters</code>
<code>127.0.0.1 localhost</code>
<code>::1 localhost ip6-localhost ip6-loopback</code>
<code>fe00::0 ip6-localnet</code>
<code>ff00::0 ip6-mcastprefix</code>
<code>ff02::1 ip6-allnodes</code>
<code>该选项指定容器名</code>
<code>[Jack@test01 download]$ docker run --name </code><code>test</code><code>-docker-01 </code>
<code>【】如何用TAG</code>
<code>可以这样:</code>
<code>也可以这样:</code>
<code>[Jack@test01 download]$ docker run -it docker.cn</code><code>/docker/centos</code><code>:centos7 </code><code>/bin/bash</code>
<code>[Jack@test01 download]$ docker run -it docker.cn</code><code>/docker/centos</code><code>:7 </code><code>/bin/bash</code>
<code>不能这样:</code>
<code>[Jack@server200-21 ~]$ docker run -it docker.cn</code><code>/docker/centos</code><code>:centos </code><code>/bin/bash</code>
<code>Unable to </code><code>find</code> <code>image </code><code>'docker.cn/docker/centos:centos'</code> <code>locally</code>
<code>FATA[0000] Tag centos not found </code><code>in</code> <code>repository docker.cn</code><code>/docker/centos</code>
<code>【】查看docker进程</code>
<code>docker </code><code>ps</code> <code>-l 该选项会列出最后一次运行的容器,包括正在运行和已经停止的。</code>
<code>docker </code><code>ps</code> <code>-a 显示全部容器</code>
<code>docker </code><code>ps</code> <code>-n 2 显示最近2个容器</code>
<code>[Jack@test01 download]$ docker </code><code>ps</code> <code>-a</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>896725223c75 docker.cn</code><code>/docker/centos</code><code>:centos7 </code><code>"/bin/bash"</code> <code>3 minutes ago Exited (127) 2 seconds ago condescending_morse </code>
<code>3eb4e1567db2 docker.cn</code><code>/docker/centos</code><code>:centos7 </code><code>"/bin/bash"</code> <code>9 minutes ago Exited (0) 8 minutes ago jolly_archimedes </code>
<code>8a4f4b9e5984 docker.cn</code><code>/docker/centos</code><code>:centos7 </code><code>"/bin/bash"</code> <code>11 minutes ago Exited (0) 10 minutes ago </code><code>test</code><code>-docker-01</code>
<code>【】重新启动已经停止的容器</code>
<code>[Jack@test01 download]$ docker start </code><code>test</code><code>-docker-01</code>
<code>test</code><code>-docker-01</code>
<code>[Jack@test01 download]$ docker </code><code>ps</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>8a4f4b9e5984 docker.cn</code><code>/docker/centos</code><code>:centos7 </code><code>"/bin/bash"</code> <code>14 minutes ago Up 22 seconds </code><code>test</code><code>-docker-01</code>
<code>Docker容器重新启动的时候,会沿用docker run命令时指定的参数来运行,因此我们容器重新启动后会运行一个交互式会话shell。此外,我们也可以用docker attach命令,重新附着到该容器的会话上</code>
<code>[Jack@test01 download]$ docker attach </code><code>test</code><code>-docker-01</code>
<code>[root@8a4f4b9e5984 /]</code><code># exit</code>
<code>【】守护式容器</code>
<code>除了这些交互式运行的容器(interactive container),我们也可以创建长期运行的容器。</code>
<code>守护式容器 (daemonized container) 没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器。</code>
<code>[Jack@test01 docker]$ docker run --name </code><code>test</code><code>-docker02-daemon -d docker.cn</code><code>/docker/centos</code> <code>/bin/bash</code> <code>-c </code><code>"while true; do echo hello world; sleep 1; done"</code>
<code>589a71825c044120a5729dca24154dd32c257bfa529d83966a931ea67e2d058f</code>
<code>【】使用logs来查看容器的日志</code>
<code>[Jack@test01 docker]$ docker logs </code><code>test</code><code>-docker02-daemon</code>
<code>hello world</code>
<code>类似</code><code>tail</code> <code>-n</code>
<code>[Jack@test01 docker]$ docker logs --</code><code>tail</code> <code>10 </code><code>test</code><code>-docker02-daemon</code>
<code>类似</code><code>tail</code> <code>-f</code>
<code>[Jack@test01 docker]$ docker logs -f </code><code>test</code><code>-docker02-daemon </code>
<code>查看容器内的进程,类似</code><code>top</code>
<code>[Jack@test01 docker]$ docker </code><code>top</code> <code>test</code><code>-docker02-daemon</code>
<code>UID PID PPID C STIME TTY TIME CMD</code>
<code>root 28600 26577 0 19:41 ? 00:00:00 </code><code>/bin/bash</code> <code>-c </code><code>while</code> <code>true</code><code>; </code><code>do</code> <code>echo</code> <code>hello world; </code><code>sleep</code> <code>1; </code><code>done</code>
<code>root 28898 28600 0 19:44 ? 00:00:00 </code><code>sleep</code> <code>1</code>
<code>【】在容器内部运行进程</code>
<code>[Jack@test01 docker]$ docker </code><code>exec</code> <code>-d </code><code>test</code><code>-docker02-daemon </code><code>touch</code> <code>/etc/new_file</code>
<code>【】启动一个诸如打开shell的交互式任务</code>
<code>[Jack@test01 docker]$ docker </code><code>exec</code> <code>-t -i </code><code>test</code><code>-docker02-daemon </code><code>/bin/bash</code>
<code>[root@589a71825c04 /]</code><code># ls /etc/new*</code>
<code>/etc/new_file</code>
<code>【】停止守护式容器</code>
<code>docker stop命令会向Docker容器进程发送SIGTERM信号。</code>
<code>docker </code><code>kill</code><code>命令来向容器进程发送SIGKILL信号。如果你想快速停止某个容器。</code>
<code>[Jack@test01 docker]$ docker stop </code><code>test</code><code>-docker02-daemon</code>
<code>test</code><code>-docker02-daemon</code>
<code>【】自动重启容器</code>
<code>docker run --restart=always --name </code><code>test</code><code>-docker03 -d docker.cn</code><code>/docker/centos</code> <code>bin</code><code>/bash</code> <code>-c </code><code>"while true; do echo hello world; sleep 1; done"</code>
<code>--restart标志被设置为always。无论容器的退出代码是什么,Docker都会自动重启该容器,除了always。</code>
<code>我们还可以将这个标志设为on-failure,这样,只有当容器的退出代码为非0值的时候,才会自动重启。另外,on-failure``还接受``一个可选的重启次数参数,例如:</code>
<code>--restart=on-failure:5 </code>
<code>【】使用inspect得到更多信息</code>
<code>[Jack@test01 docker]$ docker inspect </code><code>test</code><code>-docker02-daemon </code>
<code>[Jack@test01 docker]$ docker inspect --help</code>
<code>Usage: docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]</code>
<code>Return low-level information on a container or image</code>
<code> </code><code>-f, --</code><code>format</code><code>=</code><code>""</code> <code>Format the output using the given go template.</code>
<code> </code><code>--help=</code><code>false</code> <code>Print usage</code>
<code> </code>
<code>docker inspect 某个容器名,会返回一堆json格式的数据;</code>
<code>可以指定-f or --</code><code>format</code> <code>后边跟着key的名称,这样可以精确匹配到value</code>
<code>例如:得到容器app1所在的docker host的IP地址:</code>
<code>[Jack@test01 docker]</code><code># docker inspect -f '{{ .NetworkSettings.IPAddress }}' app1</code>
<code>172.17.0.12</code>
<code>【】删除容器</code>
<code>需要注意的是,运行中的Docker容器是无法删除的!你必须先通过docker stop或docker </code><code>kill</code><code>命令停止容器,才能将其删除。</code>
<code>[Jack@test01 docker]$ docker </code><code>rm</code> <code>test</code><code>-docker02-daemon</code>
<code>删除所有容器</code>
<code>-a:列出所有容器</code>
<code>-q:只返回容器的ID</code>
<code>[Jack@test01 docker]$ docker </code><code>rm</code> <code>`docker </code><code>ps</code> <code>-aq`</code>
<code>896725223c75</code>
<code>3eb4e1567db2</code>
<code>8a4f4b9e5984</code>
<code>[Jack@test01 docker]$ docker </code><code>ps</code> <code>-a</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1611825,如需转载请自行联系原作者