3.docker的常用命令
阿新 • • 發佈:2022-05-26
1.版本
docker verison
2.docker常用資訊
docker info
3.列出本地的映象
[root@wmd03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB
映象的操作命令
1.列出本地所有的映象(含中間映像層) [root@wmd03 ~]# docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 8 months ago 13.3kB 2.只顯示映象的id [root@wmd03 ~]# docker images -q bf756fb1ae65 3.組合使用:檢視本地所有映象的id [root@wmd03 ~]# docker images -qa bf756fb1ae65 4.去docker官網查詢tomcat的資訊 [root@wmd03 ~]# docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati… 2838 [OK] tomee Apache TomEE is an all-Apache Java EE certif… 83 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 55 [OK] bitnami/tomcat Bitnami Tomcat Docker Image 36 [OK] kubeguide/tomcat-app Tomcat image for Chapter 1 29 consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 17 [OK] cloudesire/tomcat Tomcat server, 6/7/8 15 [OK] aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 13 [OK] arm32v7/tomcat Apache Tomcat is an open source implementati… 10 5.只累出點贊數超過30的tomcat,點贊數越多,下載越多,也就越穩定 root@wmd03 ~]# docker search -s 30 tomcat Flag --stars has been deprecated, use --filter=stars=3 instead NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati… 2838 [OK] tomee Apache TomEE is an all-Apache Java EE certif… 83 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 55 [OK] bitnami/tomcat Bitnami Tomcat Docker Image 6.下載映象 不指定版本號的話,下載的是最新的tomcat 下載指定版本號的話: docker pull tomcat:版本號 [root@wmd03 ~]# docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 57df1a1f1ad8: Pull complete 71e126169501: Pull complete 1af28a55c3f3: Pull complete 03f1c9932170: Pull complete 881ad7aafb13: Pull complete 9c0ffd4062f3: Pull complete bd62e479351a: Pull complete 48ee8bc64dbc: Pull complete 07cb85cca4f0: Pull complete 6a78fac8d191: Pull complete Digest: sha256:1bab37d5d97bd8c74a474b2c1a62bbf1f1b4b62f151c8dcc472c7d577eb3479d Status: Downloaded newer image for tomcat:lates 7.刪除映象: 1. [root@wmd03 ~]# docker rmi hello-world Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container ee6aeb6d745b is using its referenced image bf756fb1ae65 2.強制刪除 [root@wmd03 ~]# docker rmi -f hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b 3.批量刪除 [root@wmd03 ~]# docker rmi -f hello-world nginx 4.刪除所有的映象 [root@wmd03 ~]# docker rmi -f ${docker images -q} 5.刪除包含關鍵字的映象 docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api為關鍵字
容器的操作命令
映象是容器的前提,有映象才能有容器:映象可以理解是類(模板),容器是例項(具體的物件例項) 測試: 1.從阿里雲上拉下一個centos系統 [root@wmd03 ~]# docker pull centos Using default tag: latest latest: Pulling from library/centos 3c72a8ed6814: Pull complete Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd Status: Downloaded newer image for centos:latest [root@wmd03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest f796d3d2c195 12 days ago 647MB centos latest 0d120b6ccaa8 6 weeks ago 215MB 發現centos系統的大小和vmware虛擬機器的系統大小相差很大,vmware的系統最少4個g, 這是因為docker上的centos映象是精簡版的,並沒有硬體的虛擬,是最精簡的linux系統 2.啟動下載的centos系統 -it的意思是啟動並建立一個偽終端,實驗如下 [root@wmd03 ~]# docker run -it 0d120b6ccaa8 發現路徑在cenos系統的根目錄下,是因為現處於docker啟動的centos系統的偽終端裡 [root@9988123a0072 /]# pwd / [root@9988123a0072 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@9988123a0072 /]# 2.2指定名稱執行docker的centos [root@wmd03 ~]# docker run -it --name wmd03 centos 這時,另建立一個連線執行:docker ps:發現names是自己建立的名稱 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 22 seconds ago Up 22 seconds wmd03 3.退出容器 3.1 exit 容器停止並退出 3.2 ctrl+p+q 容器不停止退出 4.查詢執行的容器 docker ps:查詢正在執行的容器 docker ps -a:列出當前所有正在執行的容器+歷史上執行過的容器 docker ps -l:顯示最近建立的容器 docker ps -n:顯示最近幾個建立的容器 docker ps -q:靜默模式,只顯示正在執行的容器的id號 docker ps --no-trunc:不截斷輸出 5.docker 容器的啟動和重啟 5.1查詢正在執行的docker,發現只有一個 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03 5.2查詢曾經執行的兩個容器 [root@wmd03 ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03 9988123a0072 0d120b6ccaa8 "/bin/bash" 29 minutes ago Exited (127) 15 minutes ago nostalgic_jennings 5.3 啟動已停止的docker 容器:docker start id號 [root@wmd03 ~]# docker start 9988123a0072 9988123a0072 5.4 檢視當前正在執行的docker容器,發現已經啟動 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03 9988123a0072 0d120b6ccaa8 "/bin/bash" 29 minutes ago Up 6 seconds nostalgic_jennings 5.5重啟docker容器 [root@wmd03 ~]# docker restart 9988123a0072 9988123a0072 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03 9988123a0072 0d120b6ccaa8 "/bin/bash" 29 minutes ago Up 3 seconds nostalgic_jennings 6.docker容器的停止 6.1 docker stop id號 6.2強制關閉;docker kill id號 7.刪除docker容器的執行歷史 7.1查詢當前正在執行的容器:發現沒有 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 查詢歷史執行的2個容器 [root@wmd03 ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 23 minutes ago Exited (0) 32 seconds ago wmd03 9988123a0072 0d120b6ccaa8 "/bin/bash" 38 minutes ago Exited (0) 25 seconds ago nostalgic_jennings 7.2 docker rm id號 刪除9988123a0072的docker容器執行歷史 [root@wmd03 ~]# docker rm 9988123a0072 9988123a0072 查詢歷史發現已經沒有該容器的執行歷史 [root@wmd03 ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93f13e82a6ba centos "/bin/bash" 25 minutes ago Exited (0) 2 minutes ago wmd03 ee6aeb6d745b bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago romantic_thompson 7.3強制刪除該容器的執行歷史(用於刪除沒有停止的容器歷史) docker rm -f id號 7.4強制刪除所有容器的執行歷史(不管執行與否) docker rm -f $(docker ps -q)
1.啟動docker容器 docker run --name="容器新名字":為容器指定一個名稱 -d:後臺執行容器,並返回容器ID,也即啟動守護式容器 -i:以互動模式執行容器,通常以-t同時使用 -t:為容器重新分配一個偽輸入終端,通常與-i同時使用 -P:隨機埠對映 -p:指定埠對映,有以下四種格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort 這裡需要注意的是: docker run -d centos(後臺執行)和docker run -it centos(作為互動式執行時的區別) [root@wmd03 ~]# docker run -d centos(以後臺執行程序,並返回一個序列號) e1599db736fea1ae078d6ee47360163d9cd3e101af4cc1f23971705e967459e8 [root@wmd03 ~]# docker ps-->查詢當前正在執行的容器,發現並沒有centos的執行 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@wmd03 ~]# docker ps -n 2--->查詢容器的執行歷史,發現centos有執行過,但是關閉了 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1599db736fe centos "/bin/bash" 29 seconds ago Exited (0) 27 seconds ago vigilant_ardinghelli 這是什麼原因呢: 這裡需要一個很重要的點:docker容器後臺執行,就必須有一個前臺程序 容器執行的命令,如果不是一些掛起的命令(top,tail等),就會自動退出 這是docker的機制問題,例如以web容器,我們以ngix為例,正常情況下,我們啟動響應的service即可,例如:service nginx start 但是這樣做,nigix為後臺程序模式執行,就導致docket前臺沒有可執行的應用 這樣容器後臺啟動後,就會例即自殺,因為他覺得無事可做 所以最佳的解決方案是:將你要執行的程式以前臺程序的方式執行 2.檢視容器日誌: docker -logs -f 跟隨最新的時間列印 -t 加入時間戳 --tail 數字,顯示最後多少條 容器id 3.解決1遺留的後臺執行問題:思路是,因沒有前臺程式導致容器的自殺,所以可以寫個死迴圈,不停的輸出日誌到控制檯,這就有了一個掛起程式了,也就是有了前臺,也就不會斷了 不能使用:docker run -d centos 使用:docker run -d centos /bin/sh -c "while true;do echo hello wmd;sleep 5;done"-->後面的意思是每隔5秒列印一次:hello wmd a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a [root@wmd03 ~]# docker ps--->查詢當前正在執行的容器,發現有centos CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4ced0fdefb9 centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds hardcore_tereshkova 檢視日誌: 1.-t [root@wmd03 ~]# docker logs -t a4ced0fdefb9 2020-10-09T20:07:59.646584481Z hello wmd 2020-10-09T20:08:04.847974447Z hello wmd 2020-10-09T20:08:09.851195631Z hello wmd 2020-10-09T20:08:14.862156606Z hello wmd 發現5秒列印一次 2.-f 不停的追加 docker logs -t -f a4ced0fdefb9 2020-10-09T20:07:59.646584481Z hello wmd 2020-10-09T20:08:04.847974447Z hello wmd 2020-10-09T20:08:09.851195631Z hello wmd 2020-10-09T20:08:14.862156606Z hello wmd ...持續追加中 3.--tail 數字:檢視最後幾條日誌 [root@wmd03 ~]# docker logs -f -t --tail 4 a4ced0fdefb9 2020-10-09T20:13:00.129713239Z hello wmd 2020-10-09T20:13:05.132413634Z hello wmd 2020-10-09T20:13:10.135802553Z hello wmd 2020-10-09T20:13:15.146469641Z hello wmd 4.檢視docker 容器中的程序 docker top 容器id [root@wmd03 ~]# docker top a4ced0fdefb9 UID PID PPID C STIME TTY TIME CMD root 3330 3318 0 04:07 ? 00:00:00 /bin/sh -c while true;do echo hello wmd;sleep 5; doneroot 3577 3330 0 04:16 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=slee p /usr/bin/sleep 5 5.檢視容器內部細節: docker inspect 容器id 以json串的形式返回容器的詳細資訊 [root@wmd03 ~]# docker inspect a4ced0fdefb9 [ { "Id": "a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a", "Created": "2020-10-09T20:07:59.279476217Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo hello wmd;sleep 5;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 3330, "ExitCode": 0, "Error": "", "StartedAt": "2020-10-09T20:07:59.657832567Z", "FinishedAt": "0001-01-01T00:00:00Z" }, 。。。。 。。。。 6.如何重新進入容器 1.docker attach 容器id(進入互動式頁面) 6.1以互動式的形式執行centos [root@wmd03 ~]# docker run -it --name wmd centos [root@522e3c77fc0a /]# pwd / 處於執行的centos容器中 6.2:ctrl+p+q退出互動形式 6.3查詢當前正在執行的容器:發現此時已經退到宿主機了,這時如何返回到互動呢 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 522e3c77fc0a centos "/bin/bash" 26 seconds ago Up 25 seconds wmd 6.4 docker attach 容器id [root@wmd03 ~]# docker attach 522e3c77fc0a [root@522e3c77fc0a /]# pwd / 發現其進入了執行的centos容器中 2.docker exec -it 容器id bashShell(進入容器中執行指令碼並返回,再退出互動,最終結果是退出互動) [root@wmd03 ~]# docker exec -it 522e3c77fc0a pwd / [root@wmd03 ~]# 執行了pwd並返回給宿主機,並且最終退出宿主機 也可以進入:這是進入 [root@wmd03 ~]# docker exec -it 522e3c77fc0a /bin/bash [root@522e3c77fc0a /]# pwd / [root@522e3c77fc0a /]# 7.如何將docker容器中的檔案拷貝到宿主機上:docker cp 容器id:容器中檔案路徑 宿主機路徑 [root@wmd03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 522e3c77fc0a centos "/bin/bash" 25 minutes ago Up 25 minutes wmd [root@wmd03 ~]# docker cp 522e3c77fc0a:/tmp/yum.log /root 將centos容器中/tmp/yum.log檔案拷貝到宿主機的root目錄下