文章目錄
- 幫助命令
- 鏡像命令
- 鏡像檢索
- 鏡像下載
- 鏡像串列
- 鏡像洗掉
- 容器命令
- 搜索鏡像
- 下載鏡像
- 運行容器
- 埠映射
- 啟動做埠映射的容器
- 埠映射格式
- 查看埠映射
- 小結
- 查看容器
- 停止容器
- 啟動容器
- 重啟容器
- 洗掉容器
- 其他重要命令
- 查看容器日志
- 連接到正在運行容器
- 在運行的容器中執行命令
- 查看容器中正在運行行程
- 查看容器內部細節
- 容器和宿主機互相拷貝檔案
- 更多操作命令
- 常用命令小結
幫助命令
# 查看docker版本
docker version
# 查看docker基本資訊
docker info
# 查看具體docker命令的解釋
docker --help
鏡像命令
鏡像檢索
通常情況下,Docker 的鏡像都放在 Docker 的官網 Docker Hub 上,點此前往官網
docker search 鏡像名稱:查找鏡像,會把相似的結果也查詢出來
除了可以在 Docker Hub 上搜索鏡像外,還可以通過命令 docker search xxx 進行搜索,下面以hello-world為例:
docker search hello-world
輸出結果

NAME:鏡像名稱DESCRIPTION:鏡像描述STARS:星數(點贊)OFFICAL:是否是官方鏡像AUTOMATED:是否是自動構建的
另外,docker search -引數 含義:
-f, --filter filter:根據提供的條件過濾輸出,比如:docker search -f stars=30 hello-world列出星數不小于30的hello-world鏡像;--no-trunc:顯示鏡像完整描述資訊;--limit int:最大搜索結果數(默認 25)
鏡像下載
鏡像下載命令為:docker pull [IMAGE_NAME]:[TAG]
其中,IMAGE_NAME:鏡像名,TAG :標簽,鏡像版本,可選的,默認為 latest;
在生產環境中,推薦指定 TAG,選擇穩定版本的鏡像,具體有哪些版本可以上Docker Hub去查找,
docker pull hello-world
鏡像串列
獲取已下載鏡像串列命令:docker images

其中,
RESPOSITORY:鏡像名;TAG:鏡像版本,latest代表最新版;IMAGE_ID:鏡像唯一 ID;CREATED:鏡像的創建時間;SIZE:鏡像的大小,
docker images -引數 含義:
-a:all 的簡寫,列出本地所有鏡像(包含中間映像層);-q:只顯示鏡像 ID;--digests:顯示鏡像摘要資訊;--no-trunc:顯示完整的鏡像資訊,
鏡像洗掉
洗掉指定鏡像:
docker rmi image-id
洗掉多個鏡像:
docker rmi mysql tomcat
洗掉所有鏡像:
docker rmi $(docker images -q)
強制洗掉鏡像:
強制洗掉(當前鏡像啟動的容器正在運行中,是無法正常洗掉的,可以通過 -f 強制洗掉)
如果洗掉時不指定 TAG,默認為最新版 Least,
docker rmi -f image-id
容器命令
鏡像運行起來后,稱為容器, 下面以 Tomcat 為例
搜索鏡像
docker search tomcat
下載鏡像
docker pull tomcat
運行容器
運行tomcat
docker run --name tomcat -d -p 8080:8080 tomcat
如果docker運行Tomcat后訪問首頁報404,詳細解決方案可參考:https://cloud.tencent.com/developer/article/1704573
最簡單的根據鏡像新建并啟動容器的命令如下:
docker run --name container-name -d image-name
運行一個容器,使用 docker run 命令即可, 另,docker run -引數 含義:
-- name:為容器起一個名稱;-d:detached,執行完這句命令后,控制臺將不會阻塞,可以繼續輸入命令操作,不會阻塞,也就是啟動守護式容器,如果執行docker run --name tomcat -it tomcat會進入啟動容器的命令控制臺,也就是啟動互動式容器;-i:以互動方式運行容器,通常與-t搭配使用;-t:為容器重新分配一個偽輸入終端,通常與-i搭配使用;-P:隨機埠映射;-p:指定埠映射;image-name:要運行的鏡像名稱;
埠映射
啟動做埠映射的容器
容器中可以運行一些網路應用,要讓外部也可以訪問這些應用,可以通過 -P(大寫) 或 -p (小寫) 引數來指定埠映射,啟動容器的時候如果不指定對應引數,在容器外部是無法通過網路來訪問容器內的網路應用和服務的,
Docker 的埠映射通過 -p 或 -P 引數實作,命令如下:
docker run --name tomcat1 -d tomcat
docker run --name tomcat2 -d -p 8888:8080 tomcat
如上,就把主機埠 8888 請求映射到 Docker 容器內部埠 8080 了,
-p 和 -P 區別為:
-P : 隨機映射一個49000~49900的埠到內部容器開放的網路埠
-p : 可以指定要映射的IP和埠,但是在一個指定埠上只可以系結一個容器
執行完這兩條命令后,通過 docker ps 查看:

通過 PORTS 可以看出,tomcat2 是做了埠映射的,tomcat1 是沒進行映射過的,
分別通過瀏覽器訪問:
http://*.*.*.*:8080/ // tomcat1默認埠;
http://*.*.*.*:8888/ // 做過埠映射的 Tomcat2,8888 會轉發請求到 tomcat2 的 8080,
結果如下:
第一個請求是無法請求到的,原因開篇處說過了,
第二個請求是可以正常進行請求的,會由 tomcat2 容器進行處理
埠映射格式
#指定ip、指定主機port、指定容器port
#ip:hostport:containerport
docker run --name tomcat -d -p 127.0.0.1:8080:8080 tomcat
#指定映射使用一個特定地址,比如 localhost地址 127.0.0.1
#指定ip、未指定主機port、指定容器port
#ip::containerport
docker run --name tomcat -d -p 127.0.0.1::8080 tomcat
#系結 localhost 的任意埠到容器的 8080 埠,本地主機會自動分配一個埠,還可以使用 udp 標記來指定 udp 埠
docker run --name tomcat -d -p 127.0.0.1:8080:8080/udp tomcat
#未指定ip port、指定主機port、指定容器port
#hostport:containerport
docker run --name tomcat -d -p 8080:8080 tomcat
#將本地的 8080 埠映射到容器的 8080 埠,默認會系結本地所有介面上的所有地址
查看埠映射
可以通過如下命令查看容器映射了哪些埠及協議:
docker port container-id
示例:
[root@iZwz9inovbad1hkjy16akvZ tmp]#docker port 1596abf8d8a3
8080/tcp -> 0.0.0.0:8888
8080/tcp -> :::8888
[root@iZwz9inovbad1hkjy16akvZ tmp]#docker port 67751753d5da
如果回傳空,則代表沒進行埠映射,
小結
- 容器有自己的內部網路和 ip 地址,可以使用
docker inspect container-id可以獲取所有的變數 - Docker 還可以有一個可變的網路配置
- -p 標記可以多次使用來系結多個埠 eg.
docker run --name tomcat -d -p 8080:8080 -p 3000:80 tomcat
查看容器
可通過如下命令,查看運行中的容器串列:
docker ps

CONTAINER ID:啟動時生成的容器 ID;IMAGE:該容器使用的鏡像;COMMAND:容器啟動時執行的命令;CREATED:容器創建時間;STATUS:當前容器狀態;PORTS:當前容器所使用的埠號;NAMES:啟動時給容器設定的名稱,
另,docker ps -引數含義:
-a:查看所有容器,包括已停止運行的;
-q:靜默模式,只顯示容器編號;
-l:顯示最近創建的容器;
-n 3:顯示最近創建的 num(此處為 3)個容器;
--no-trunc:不截斷輸出,顯示完整資訊,
停止容器
通過以下命令來停止運行中的容器:
docker stop container-name/container-id
強制停止容器(類似強制關機):
docker kill container-name/container-id
啟動容器
通過以下命令啟動容器:
docker start container-name/container-id
docker run和docker start的區別:

1.docker run
docker run只有在第一次運行時使用,將鏡像放到容器中,以后再次啟動這個容器的時候,只需要使用命令docker start就可以,
docker run相當于執行了兩步操作:將鏡像(Image)放到容器(Container)中,這一步程序叫做docker create,然后將容器啟動,使之變成運行時容器(docker start),
2.docker start
docker start的作用是:重新啟動已經存在的容器,也就是說,如果使用這個命令,我們必須先要知道這個容器的ID、或者這個容器的名字,我們可以使用docker ps命令找到這個容器的資訊,
重啟容器
通過以下命令啟動容器:
docker restart container-name/container-id
洗掉容器
洗掉單個容器:
docker rm container-id
洗掉多個容器:
docker rm container-id container-id
洗掉所有容器:
docker rm $(docker ps -a -q )
另,docker rm -引數含義:
-f:強制洗掉,如果在運行中,先停止,再洗掉
其他重要命令
查看容器日志
查看當前容器日志,可通過如下命令:
docker logs container-id/container-name
另,docker logs -引數含義:
-t:加入時間戳;-f:跟隨最新的日志列印;-n:顯示最后多少條,
連接到正在運行容器
docker attach container-id:連接到正在運行的容器;
要attach上去的容器必須正在運行,可以同時連接上同一個container來共享螢屏(與screen命令的attach類似),
官方檔案中說 attach 后可以通過 CTRL-C 來 detach,但實際上經過我的測驗,如果 container 當前在運行 bash,CTRL-C 自然是當前行的輸入,沒有退出;如果 container 當前正在前臺運行行程,如輸出 nginx 的 access.log 日志,CTRL-C 不僅會導致退出容器,而且還 stop 了,
這不是我們想要的,detach 的意思按理應該是脫離容器終端,但容器依然運行,好在 attach 是可以帶上 --sig-proxy=false 來確保 CTRL-D 或 CTRL-C 不會關閉容器,
docker attach --sig-proxy=false 7f237caad43b
在運行的容器中執行命令
運行中的容器其實是一個功能完備的簡易版 Linux 作業系統,所以我們可以像常規系統一樣進行登陸及退出操作,
命令為:
docker exec -it container-id/container-name bash
退出命令為:
exit
exec 和 attach 區別:
attach:直接進入容器啟動命令的終端,不會啟動新的行程;exec:在容器中打開新的終端,并且可以啟動新的行程,可在宿主機中直接執行操作容器的命令,eg.docker exec -it 7f237caad43b ls /tmp,
查看容器中正在運行行程
可用通過如下命令查看容器中正在運行行程:
docker top container-id/container-top
查看容器內部細節
可用通過如下命令查看容器內部細節,回傳為 json:
docker inspect container-id
容器和宿主機互相拷貝檔案
宿主機拷貝檔案到容器:
docker cp 檔案 container-id:目標檔案/檔案夾
# 將宿主機tmp檔案夾下test.txt檔案拷貝到容器7f237caad43b中tmp目錄中
docker cp /tmp/test.txt 7f237caad43b:/tmp
從容器拷貝檔案到宿主機:
docker cp container-id:目標檔案/檔案夾 宿主機目標檔案/檔案夾
# 將容器7f237caad43b中tmp目錄下yum.log拷貝到宿主機/tmp目錄下
docker cp 7f237caad43b:/tmp/yum.log /tmp
更多操作命令
更多命令可以參考:https://docs.docker.com/engine/reference/commandline/docker/
常用命令小結
以下是 Docker 的一些常用命令,通過 docker --help 就可以查看,只是將其翻譯成中文而已:
| 命令 | 英文 | 中文 |
|---|---|---|
| attach | Attach to a running container | 當前 shell 下 attach 連接指定運行鏡像 |
| build | Build an image from a Dockerfile | 通過 Dockerfile 定制鏡像 |
| commit | Create a new image from a container changes | 提交當前容器為新的鏡像 |
| cp | Copy files/folders from the containers filesystem to the host path | 從容器中拷貝指定檔案或者目錄到宿主機中 |
| create | Create a new container | 創建一個新的容器,同 run,但不啟動容器 |
| diff | Inspect changes on a container’s filesystem | 查看 docker 容器變化 |
| events | Get real time events from the server | 從 docker 服務獲取容器實時事件 |
| exec | Run a command in an existing container | 在已存在的容器上運行命令 |
| export | Stream the contents of a container as a tar archive | 匯出容器的內容流作為一個 tar 歸檔檔案[對應 import] |
| history | Show the history of an image | 展示一個鏡像形成歷史 |
| images | List images | 列出系統當前鏡像 |
| import | Create a new filesystem image from the contents of a tarball | 從 tar 包中的內容創建一個新的檔案系統映像[對應 export] |
| info | Display system-wide information | 顯示系統相關資訊 |
| inspect | Return low-level information on a container | 查看容器詳細資訊 |
| kill | Kill a running container | kill 指定 docker 容器 |
| load | Load an image from a tar archive | 從一個 tar 包中加載一個鏡像[對應 save] |
| login | Register or Login to the docker registry server | 注冊或者登陸一個 docker 源服務器 |
| logout | Log out from a Docker registry server | 從當前 Docker registry 退出 |
| logs | Fetch the logs of a container | 輸出當前容器日志資訊 |
| port | Lookup the public-facing port which is NAT-ed to PRIVATE_PORT | 查看映射埠對應的容器內部源埠 |
| pause | Pause all processes within a container | 暫停容器 |
| ps | List containers | 列出容器串列 |
| pull | Pull an image or a repository from the docker registry server | 從 docker 鏡像源服務器拉取指定鏡像或者庫鏡像 |
| push | Push an image or a repository to the docker registry server | 推送指定鏡像或者庫鏡像至 docker 源服務器 |
| restart | Restart a running container | 重啟運行的容器 |
| rm | Remove one or more containers | 移除一個或者多個容器 |
| rmi | Remove one or more images | 移除一個或多個鏡像[無容器使用該鏡像才可洗掉,否則需洗掉相關容器才可繼續或 -f 強制洗掉] |
| run | Run a command in a new container | 創建一個新的容器并運行一個命令 |
| save | Save an image to a tar archive | 保存一個鏡像為一個 tar 包[對應 load] |
| search | Search for an image on the Docker Hub | 在 docker hub 中搜索鏡像 |
| start | Start a stopped containers | 啟動容器 |
| stop | Stop a running containers | 停止容器 |
| tag | Tag an image into a repository | 給源中鏡像打標簽 |
| top | Lookup the running processes of a container | 查看容器中運行的行程資訊 |
| unpause | Unpause a paused container | 取消暫停容器 |
| version | Show the docker version information | 查看 docker 版本號 |
| wait | Block until a container stops, then print its exit code | 截取容器停止時的退出狀態值 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286253.html
標籤:其他
