使用Docker已有一段時間了,今天正好有空梳理下自己平時操作Docker時的一些指令和注意細節:
Docker 指令幫助
<code>$ </code><code>sudo</code> <code>docker </code>
<code>Commands:</code>
<code> </code><code>attach Attach to a running container </code>
<code> </code><code>--将終端依附到容器上</code>
<code> </code><code>1> 運作一個互動型容器</code>
<code> </code><code>[root@localhost ~]</code><code># docker run -i -t centos /bin/bash</code>
<code> </code><code>[root@f0a02b473067 /]</code><code># </code>
<code> </code><code>2> 在另一個視窗上檢視該容器的狀态</code>
<code> </code><code>[root@localhost ~]</code><code># docker ps -a</code>
<code> </code><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code> </code><code>d4a75f165ce6 centos </code><code>"/bin/bash"</code> <code>5 seconds ago Up 5 seconds cranky_mahavira</code>
<code> </code><code>3> 退出第一步中運作的容器</code>
<code> </code><code>[root@d4a75f165ce6 /]</code><code># exit</code>
<code> </code><code>exit</code>
<code> </code><code>4> 檢視該容器的狀态</code>
<code> </code><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code> </code><code>d4a75f165ce6 centos </code><code>"/bin/bash"</code> <code>2 minutes ago Exited (0) 23 seconds ago cranky_mahavira</code>
<code> </code><code>可見此時容器的狀态是Exited,那麼,如何再次運作這個容器呢?可以使用docker start指令</code>
<code> </code><code>5> 再次運作該容器</code>
<code> </code><code>[root@localhost ~]</code><code># docker start cranky_mahavira</code>
<code> </code><code>cranky_mahavira</code>
<code> </code><code>6> 再次檢視該容器的狀态</code>
<code> </code><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code> </code><code>d4a75f165ce6 centos </code><code>"/bin/bash"</code> <code>6 minutes ago Up 29 seconds cranky_mahavira</code>
<code> </code><code>因為該容器是互動型的,但此刻我們發現沒有具體的終端可以與之互動,這時可使用attach指令。</code>
<code> </code><code>7> 通過attach指令進行互動</code>
<code> </code><code>[root@localhost ~]</code><code># docker attach cranky_mahavira</code>
<code> </code><code>[root@d4a75f165ce6 /]</code><code># </code>
<code> </code><code>build Build an image from a Dockerfile</code>
<code> </code><code>--通過Dockerfile建立鏡像</code>
<code> </code><code>commit Create a new image from a container's changes</code>
<code> </code><code>--通過容器建立本地鏡像</code>
<code> </code><code>注意:如果是要push到docker hub中,注意生成鏡像的命名</code>
<code> </code><code>[root@localhost ~]</code><code># docker commit centos_v1 centos:v1</code>
<code> </code><code>68ad49c999496cff25fdda58f0521530a143d3884e61bce7ada09bdc22337638</code>
<code> </code><code>[root@localhost ~]</code><code># docker push centos:v1</code>
<code> </code><code>You cannot push a </code><code>"root"</code> <code>repository. Please rename your repository to <user>/<repo> (ex: <user></code><code>/centos</code><code>)</code>
<code> </code><code>用centos:v1就不行,因為它push到docker hub中時,是推送到相應使用者下,必須指定使用者名。譬如我的使用者名是ivictor,則新生成的本地鏡像命名為:</code>
<code> </code><code>docker push victor</code><code>/centos</code><code>:v1,其中v1是tag,可不寫,預設是latest </code>
<code> </code>
<code> </code><code>cp</code> <code>Copy files</code><code>/folders</code> <code>from a container to a HOSTDIR or to STDOUT</code>
<code> </code><code>--在主控端和容器之間互相COPY檔案</code>
<code> </code><code>cp</code><code>的用法如下:</code>
<code> </code><code>Usage: docker </code><code>cp</code> <code>[OPTIONS] CONTAINER:PATH LOCALPATH|-</code>
<code> </code><code>docker </code><code>cp</code> <code>[OPTIONS] LOCALPATH|- CONTAINER:PATH</code>
<code> </code><code>如:容器mysql中</code><code>/usr/local/bin/</code><code>存在docker-entrypoint.sh檔案,可如下方式copy到主控端</code>
<code> </code><code># docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root</code>
<code> </code><code>修改完畢後,将該檔案重新copy回容器</code>
<code> </code><code># docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/ </code>
<code> </code><code>create Create a new container </code>
<code> </code><code>--建立一個新的容器,注意,此時,容器的status隻是Created</code>
<code> </code><code>diff</code> <code>Inspect changes on a container's filesystem</code>
<code> </code><code>--檢視容器内發生改變的檔案,以我的mysql容器為例</code>
<code> </code><code>[root@localhost ~]</code><code># docker diff mysqldb</code>
<code> </code><code>C </code><code>/root</code>
<code> </code><code>A </code><code>/root/</code><code>.bash_history</code>
<code> </code><code>A </code><code>/test1</code><code>.txt</code>
<code> </code><code>A </code><code>/test</code><code>.</code><code>tar</code>
<code> </code><code>A </code><code>/test</code><code>.txt</code>
<code> </code><code>C </code><code>/run</code>
<code> </code><code>C </code><code>/run/mysqld</code>
<code> </code><code>A </code><code>/run/mysqld/mysqld</code><code>.pid</code>
<code> </code><code>A </code><code>/run/mysqld/mysqld</code><code>.sock</code>
<code> </code><code>不難看出,C對應的均是目錄,A對應的均是檔案</code>
<code> </code><code>events Get real </code><code>time</code> <code>events from the server</code>
<code> </code><code>--實時輸出Docker伺服器端的事件,包括容器的建立,啟動,關閉等。</code>
<code> </code><code>譬如:</code>
<code> </code><code>[root@localhost ~]</code><code># docker events</code>
<code> </code><code>2015-09-08T17:40:13.000000000+08:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79: (from wordpress) create</code>
<code> </code><code>2015-09-08T17:40:14.000000000+08:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79: (from wordpress) die</code>
<code> </code><code>2015-09-08T17:42:10.000000000+08:00 839866a338db6dd626fa8eabeef53a839e4d2e2eb16ebd89679aa722c4caa5f7: (from mysql) start</code>
<code> </code><code>exec</code> <code>Run a </code><code>command</code> <code>in</code> <code>a running container</code>
<code> </code><code>--用于容器啟動之後,執行其它的任務</code>
<code> </code><code>通過</code><code>exec</code><code>指令可以建立兩種任務:背景型任務和互動型任務</code>
<code> </code><code>背景型任務:docker </code><code>exec</code> <code>-d cc </code><code>touch</code> <code>123 其中cc是容器名</code>
<code> </code><code>互動型任務:</code>
<code> </code><code>[root@localhost ~]</code><code># docker exec -i -t cc /bin/bash</code>
<code> </code><code>root@1e5bb46d801b:/</code><code># ls</code>
<code> </code><code>123 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var</code>
<code> </code><code>export</code> <code>Export a container's filesystem as a </code><code>tar</code> <code>archive</code>
<code> </code><code>--将容器的檔案系統打包成</code><code>tar</code><code>檔案</code>
<code> </code><code>有兩種方式(mysqldb為容器名):</code>
<code> </code><code>docker </code><code>export</code> <code>-o mysqldb1.</code><code>tar</code> <code>mysqldb</code>
<code> </code><code>docker </code><code>export</code> <code>mysqldb > mysqldb.</code><code>tar</code>
<code> </code><code>history</code> <code>Show the </code><code>history</code> <code>of an image</code>
<code> </code><code>--顯示鏡像制作的過程,相當于dockfile</code>
<code> </code><code>images List images </code>
<code> </code><code>--列出本機的所有鏡像</code>
<code> </code><code>import</code> <code>Import the contents from a tarball to create a filesystem image</code>
<code> </code><code>--根據</code><code>tar</code><code>檔案的内容建立一個鏡像,與之前的</code><code>export</code><code>指令相對應</code>
<code> </code><code>[root@localhost ~]</code><code># docker import mysqldb.tar mysql:v1</code>
<code> </code><code>eb81de183cd94fd6f0231de4ff29969db822afd3a25841d2dc9cf3562d135a10</code>
<code> </code><code>[root@localhost ~]</code><code># docker images</code>
<code> </code><code>REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE</code>
<code> </code><code>mysql v1 eb81de183cd9 21 seconds ago 281.9 MB</code>
<code> </code><code>譬如下面一例:</code>
<code> </code><code>[root@localhost volume2]</code><code># docker ps</code>
<code> </code><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code> </code><code>9cb07559cc17 docker.io</code><code>/ubuntu</code> <code>"/bin/bash"</code> <code>22 hours ago Up 22 hours naughty_bartik</code>
<code> </code><code>[root@localhost volume2]</code><code># docker export gigantic_goldwasser > wanghui.tar</code>
<code> </code><code>[root@localhost volume2]</code><code># docker import wanghui.tar wanghui:v1</code>
<code> </code><code>sha256:b6cbbaf69a58149f337dcc439a21ed185dcdf96fd7f72ddf45e102d27f47c4ae</code>
<code> </code><code>[root@localhost volume2]</code><code># docker images</code>
<code> </code><code>REPOSITORY TAG IMAGE ID CREATED SIZE</code>
<code> </code><code>wanghui v1 b6cbbaf69a58 5 seconds ago 450.9 MB</code>
<code> </code><code>[root@localhost volume2]</code><code># docker run -i -t wanghui:v1 /bin/bash</code>
<code> </code><code>[root@78f4ac39972d /]</code><code># ps -ef</code>
<code> </code><code>info Display system-wide information</code>
<code> </code><code>--檢視docker的系統資訊</code>
<code> </code><code>[root@localhost ~]</code><code># docker info</code>
<code> </code><code>Containers: 3 --目前有3個容器</code>
<code> </code><code>Images: 298 </code>
<code> </code><code>Storage Driver: devicemapper</code>
<code> </code><code>Pool Name: docker-253:0-34402623-pool</code>
<code> </code><code>Pool Blocksize: 65.54 kB</code>
<code> </code><code>Backing Filesystem: xfs</code>
<code> </code><code>Data </code><code>file</code><code>: </code><code>/dev/loop0</code>
<code> </code><code>Metadata </code><code>file</code><code>: </code><code>/dev/loop1</code>
<code> </code><code>Data Space Used: 8.677 GB --對應的是下面Data loop </code><code>file</code><code>大小</code>
<code> </code><code>Data Space Total: 107.4 GB</code>
<code> </code><code>Data Space Available: 5.737 GB</code>
<code> </code><code>Metadata Space Used: 13.4 MB --對應的是下面Metadata loop </code><code>file</code><code>大小</code>
<code> </code><code>Metadata Space Total: 2.147 GB</code>
<code> </code><code>Metadata Space Available: 2.134 GB</code>
<code> </code><code>Udev Sync Supported: </code><code>true</code>
<code> </code><code>Deferred Removal Enabled: </code><code>false</code>
<code> </code><code>Data loop </code><code>file</code><code>: </code><code>/var/lib/docker/devicemapper/devicemapper/data</code>
<code> </code><code>Metadata loop </code><code>file</code><code>: </code><code>/var/lib/docker/devicemapper/devicemapper/metadata</code>
<code> </code><code>Library Version: 1.02.93-RHEL7 (2015-01-28)</code>
<code> </code><code>Execution Driver: native-0.2</code>
<code> </code><code>Logging Driver: json-</code><code>file</code>
<code> </code><code>Kernel Version: 3.10.0-229.el7.x86_64</code>
<code> </code><code>Operating System: CentOS Linux 7 (Core)</code>
<code> </code><code>CPUs: 2</code>
<code> </code><code>Total Memory: 979.7 MiB</code>
<code> </code><code>Name: localhost.localdomain</code>
<code> </code><code>ID: TFVB:BXGQ:VVOC:K2DJ:LECE:2HNK:23B2:LEVF:P3IQ:L7D5:NG2V:UKNL</code>
<code> </code><code>WARNING: bridge-nf-call-iptables is disabled</code>
<code> </code><code>WARNING: bridge-nf-call-ip6tables is disabled</code>
<code> </code><code>inspect Return low-level information on a container or image</code>
<code> </code><code>--用于檢視容器的配置資訊,包含容器名、環境變量、運作指令、主機配置、網絡配置和資料卷配置等。</code>
<code> </code><code>kill</code> <code>Kill a running container </code>
<code> </code><code>--強制終止容器</code>
<code> </code><code>關于stop和</code><code>kill</code><code>的差別,docker stop指令給容器中的程序發送SIGTERM信号,預設行為是會導緻容器退出,當然,</code>
<code> </code><code>容器内程式可以捕獲該信号并自行處理,例如可以選擇忽略。而docker </code><code>kill</code><code>則是給容器的程序發送SIGKILL信号,該信号将會使容器必然退出。</code>
<code> </code><code>load Load an image from a </code><code>tar</code> <code>archive or STDIN</code>
<code> </code><code>--與下面的save指令相對應,将下面sava指令打包的鏡像通過load指令導入</code>
<code> </code><code>login Register or log </code><code>in</code> <code>to a Docker registry</code>
<code> </code><code>--登入到自己的Docker register,需有Docker Hub的新增賬號</code>
<code> </code><code>[root@localhost ~]</code><code># docker login</code>
<code> </code><code>Username: ivictor</code>
<code> </code><code>Password: </code>
<code> </code><code>Email: [email protected]</code>
<code> </code><code>WARNING: login credentials saved </code><code>in</code> <code>/root/</code><code>.docker</code><code>/config</code><code>.json</code>
<code> </code><code>Login Succeeded</code>
<code> </code><code>logout</code> <code>Log out from a Docker registry</code>
<code> </code><code>--登出</code>
<code> </code><code>[root@localhost ~]</code><code># docker logout</code>
<code> </code><code>Remove login credentials </code><code>for</code> <code>https:</code><code>//index</code><code>.docker.io</code><code>/v1/</code>
<code> </code><code>logs Fetch the logs of a container</code>
<code> </code><code>--用于檢視容器的日志,它将輸出到标準輸出的資料作為日志輸出到docker logs指令的終端上。常用于背景型容器</code>
<code> </code><code>pause Pause all processes within a container</code>
<code> </code><code>--暫停容器内的所有程序,</code>
<code> </code><code>此時,通過docker stats可以觀察到此時的資源使用情況是固定不變的,</code>
<code> </code><code>通過docker logs -f也觀察不到日志的進一步輸出。</code>
<code> </code><code>port List port mappings or a specific mapping </code><code>for</code> <code>the CONTAINER</code>
<code> </code><code>--輸出容器端口與主控端端口的映射情況</code>
<code> </code><code>[root@localhost ~]</code><code># docker port blog</code>
<code> </code><code>80</code><code>/tcp</code> <code>-> 0.0.0.0:80</code>
<code> </code><code>容器blog的内部端口80映射到主控端的80端口,這樣可通過主控端的80端口檢視容器blog提供的服務</code>
<code> </code><code>ps</code> <code>List containers </code>
<code> </code><code>--列出所有容器,其中docker </code><code>ps</code><code>用于檢視正在運作的容器,</code><code>ps</code> <code>-a則用于檢視所有容器。</code>
<code> </code><code>pull Pull an image or a repository from a registry</code>
<code> </code><code>--從docker hub中下載下傳鏡像</code>
<code> </code><code>push Push an image or a repository to a registry</code>
<code> </code><code>--将本地的鏡像上傳到docker hub中</code>
<code> </code><code>前提是你要先用docker login登入上,不然會報以下錯誤</code>
<code> </code><code>[root@localhost ~]</code><code># docker push ivictor/centos:v1</code>
<code> </code><code>The push refers to a repository [docker.io</code><code>/ivictor/centos</code><code>] (len: 1)</code>
<code> </code><code>unauthorized: access to the requested resource is not authorized</code>
<code> </code><code>rename Rename a container</code>
<code> </code><code>--更改容器的名字</code>
<code> </code><code>restart Restart a running container </code>
<code> </code><code>--重新開機容器</code>
<code> </code><code>rm</code> <code>Remove one or </code><code>more</code> <code>containers </code>
<code> </code><code>--删除容器,注意,不可以删除一個運作中的容器,必須先用docker stop或docker </code><code>kill</code><code>使其停止。</code>
<code> </code><code>當然可以強制删除,必須加-f參數</code>
<code> </code><code>如果要一次性删除所有容器,可使用 docker </code><code>rm</code> <code>-f `docker </code><code>ps</code> <code>-a -q`,其中,-q指的是隻列出容器的ID</code>
<code> </code><code>rmi Remove one or </code><code>more</code> <code>images </code>
<code> </code><code>--删除鏡像</code>
<code> </code><code>run Run a </code><code>command</code> <code>in</code> <code>a new container </code>
<code> </code><code>--讓建立的容器立刻進入運作狀态,該指令等同于docker create建立容器後再使用docker start啟動容器</code>
<code> </code><code>save Save an image(s) to a </code><code>tar</code> <code>archive</code>
<code> </code><code>--将鏡像打包,與上面的load指令相對應</code>
<code> </code><code>docker save -o nginx.</code><code>tar</code> <code>nginx</code>
<code> </code><code>search Search the Docker Hub </code><code>for</code> <code>images </code>
<code> </code><code>--從Docker Hub中搜尋鏡像</code>
<code> </code><code>start Start one or </code><code>more</code> <code>stopped containers</code>
<code> </code><code>--啟動容器</code>
<code> </code><code>stats Display a live stream of container(s) resource usage statistics</code>
<code> </code><code>--動态顯示容器的資源消耗情況,包括:CPU、記憶體、網絡I</code><code>/O</code>
<code> </code><code>stop Stop a running container </code>
<code> </code><code>--停止一個運作的容器</code>
<code> </code><code>tag Tag an image into a repository</code>
<code> </code><code>--對鏡像進行重命名</code>
<code> </code><code>top</code> <code>Display the running processes of a container</code>
<code> </code><code>--檢視容器中正在運作的程序</code>
<code> </code><code>unpause Unpause all processes within a container</code>
<code> </code><code>--恢複容器内暫停的程序,與pause參數相對應</code>
<code> </code><code>version Show the Docker version information </code>
<code> </code><code>--檢視docker的版本</code>
<code> </code><code>wait Block </code><code>until</code> <code>a container stops, </code><code>then</code> <code>print its </code><code>exit</code> <code>code</code>
<code> </code><code>--捕捉容器停止時的退出碼</code>
<code> </code><code>執行此指令後,該指令會“hang”在目前終端,直到容器停止,此時,會列印出容器的退出碼。</code>
本文轉自 dengaosky 51CTO部落格,原文連結:http://blog.51cto.com/dengaosky/2067197,如需轉載請自行聯系原作者