🐳 Linux Docker 基本命令參數詳解
📘 1. Docker 簡介
Docker 是一個開源的容器化平臺,它通過將應用及其依賴打包到一個輕量級、可移植的容器中,從而實現跨平臺運行。Docker 采用 C/S 架構,服務端稱為 Docker Daemon,客戶端通過 CLI 工具與其交互。
核心概念包括:
- 鏡像(Image):只讀模板,包含操作系統、應用程序及其依賴。
- 容器(Container):鏡像的運行實例,具備輕量、快速啟動等優勢。
- 倉庫(Registry):存放鏡像的遠程服務器,如 Docker Hub。
- 網絡(Network):用于容器之間或容器與主機之間的通信。
Docker 的安裝和配置詳見:
Linux 安裝與配置 Docker
🛠? 2. Docker 命令及參數
📦 2.1 容器命令
🔄 2.1.1 容器運行狀態轉換命令
用于管理容器的生命周期,包括創建、啟動、暫停、恢復、停止、強制終止和刪除等操作。
-
docker create
創建一個新容器但不啟動,適用于需要先設置參數再手動啟動的場景。
命令格式:sudo docker create [-it] \[--name 容器名] \[-p 容器端口:宿主機端口] \[-e 環境變量] \[-v 宿主機路徑:容器路徑] \<鏡像名或鏡像ID>
說明:
[-it]
: 這里的 -i 表示保持標準輸入流開放; -t 表示分配一個偽終端,適用于交互式容器運行[--name]
: 容器名:如果你在使用 Docker 容器命令的時候不想輸入一長串哈希值,那你最好在這里給容器起一個簡單好記得名字[-p 容器端口]
:宿主機端口:對于需要開放端口的容器,將容器的端口映射到宿主機的端口,這樣容器服務就可對外訪問[-e 環境變量]
:設置容器的環境變量[-v 宿主機路徑]
:容器路徑:掛載宿主機目錄到容器內部,方便保存和修改容器中的目錄<鏡像名或鏡像ID>
:創建容器所使用的鏡像的名字或ID,對應 docker images命令顯示的 IMAGE ID 和 REPOSITORY
提示:一般在專業的技術文檔中[]內部的參數為可選參數,<>內部的參數為必選參數
效果:
解釋:這里通過交互終端的方式創建了一個 tomcat 容器,容器名為 tomcat_1,將宿主機的 5555 端口映射到容器的 8080 端口,添加設置時區為上海的環境變量,將容器內
/usr/local/tomcat/webapps
目錄掛載到當前路勁下webapps
文件夾中注意:一般為了讓容器持續運行,都會加
-it
參數。因為有很多非服務性質的容器,打開后 docker 檢測到容器內沒有進程持續再跑就會自動把容器關閉。-it
參數會再容器內掛一個持續在跑的交互式終端進程,這樣容器內就至少有一個進程再跑,就不會被 docker 自動關閉了
-
docker run
創建并立即運行一個容器,相當于docker create
和docker start
的組合。
命令格式:sudo docker run [-d] \[-it] \[--name 容器名] \[-p 容器端口:主機端口] \[-e 環境變量] \[-v 主機路徑:容器路徑] \<鏡像名或鏡像ID>
說明:
- 大多數
docker create
的參數docker run
都能用。還有一些設置執行方式的參數docker create
不能用但是docker run
能用,比如-d
表示終端后臺執行
效果:
解釋:這里用
docker run
命令以后臺啟動的方式啟動了一個 tomcat 容器,容器名稱為 tomcat_3,開啟交互式終端進程,將宿主機的 5555 端口映射到容器的 8080 端口,添加設置時區為上海的環境變量,將容器內/usr/local/tomcat/webapps
目錄掛載到當前路勁下webapps
文件夾中注意:docker run 不能啟動已經由 docker create 創建的容器
- 大多數
-
docker start
啟動一個已經存在但處于停止狀態的容器,不會創建新容器。
命令格式:sudo docker start [-a] [-i] <容器名或ID>
說明:
[-a]
:將容器的標準輸出(stdout)和標準錯誤輸出(stderr)附加到當前終端。這意味著你能看到容器中程序的輸出信息,適合調試或實時查看日志。[-i]
:保持標準輸入(stdin)打開,使你可以向容器內發送輸入,通常與 -a 配合使用以實現交互式操作(如進入容器后執行命令)<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里用
docker start
命令啟動了 ubuntu_1 容器,可以看到啟動后直接進入終端交互界面。需要注意-ai
一般都是用在有交互界面的容器比如 Ubuntu 或 CentOS 上,像 tomcat 這種服務類型的容器即使加了-ai
也無法在終端輸入命令。解釋: 這里用
docker start
命令啟動了剛被創建的 tomcat_1 容器,容器狀態從 Created 轉變為 Up 。
-
docker pause
暫停容器中所有進程,常用于臨時掛起服務或調試容器狀態。
命令格式:sudo docker pause <容器名或ID>
說明:
<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里暫停了容器 ubuntu_1 ,容器狀態從 Up 轉變為 Up(Paused) 。
-
docker unpause
恢復被暫停的容器進程,使其繼續運行。
命令格式:sudo docker unpause <容器名或ID>
說明:
<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里解除暫停了容器 ubuntu_1 ,容器狀態從 Up(Paused) 轉變為 Up 。
-
docker stop
正常停止容器,先發送 SIGTERM 信號,若未在限定時間內關閉,則發送 SIGKILL。
命令格式:sudo docker stop <容器名或ID>
說明:
<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里用
docker stop
停止了 ubuntu_1 容器,容器的狀態從 Up 轉變為 Exited 。
-
docker kill
強制終止容器進程,直接發送 SIGKILL 信號,不等待容器自行關閉。
命令格式:sudo docker kill <容器名或ID>
說明:
<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋: 這里強制關閉了容器 tomcat_1,容器狀態從 Up 轉變為 Exited 。
-
docker restart
重啟容器,相當于先執行stop
再start
,適用于配置變更或服務重啟。
命令格式:sudo docker restart <容器名或ID>
說明:
<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里重新啟動了 tomcat_1 容器,容器狀態從26秒前的 Up 變成了4秒前的 Up,可見應該是重開過一回了。
-
docker rm
刪除已停止的容器,釋放系統資源,需先確保容器不在運行中。
命令格式:sudo docker rm <容器名或ID>
說明:
<容器名或ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋: 這里用
dcoker rm
移除了 ubuntu_1 容器,可以看到移除后的容器已經無法用docker ps
命令找到了
🧩 2.1.2 容器系統操控命令
本節介紹的命令用于對已啟動的容器進行交互、查看或文件操作,是日常維護和調試容器中最常用的工具。
-
docker exec
在運行中的容器中執行命令,常用于調試、進入容器內部操作或運行額外程序。
命令格式:sudo docker exec [-it] <容器名或容器ID> [啟動程序]
說明:
[-i]
:保持標準輸入流(stdin)開啟,即使未連接終端。[-t]
:分配一個偽終端(TTY),與 -i 一起使用以實現交互式操作。<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。[啟動程序]
:容器內要執行的命令或程序,例如 /bin/bash、ls、top 等。
效果:
解釋:這里用 docker exec 進入了 tomcat 容器,可以看到進入容器后能夠正常進行交互查看容器內容
-
docker attach
附加到容器的主進程終端,顯示容器當前的標準輸出,可用于查看日志或與主進程交互。
命令格式:sudo docker attach <容器名或容器ID>
說明:
<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
提示:其實 attach 也有很多可選參數,像
--no-stdin
之類的,但是開發或調試都基本上用不到。那這些參數設計出來是干什么的?我覺得是用來折磨客戶的,為什么這么說,你看我寫的第三節注意事項就知道了效果:
解釋:這里用 dockere attach 進入了 ubuntu 容器,可以看到進入容器后能夠正常進行交互查看容器內容
解釋:這里用 docker attach 進入了 tomcat 容器,可以看到進入了以后不能輸入任何信息只能看 tomcat 的日志,這是因為 tomcat 默認沒有終端交互功能。要想看 tomcat 容器中的文件需要用 docker exec 命令
-
docker cp
在宿主機與容器之間復制文件或目錄,支持雙向操作。
命令格式:sudo docker cp <源路徑> <目標路徑>
說明:
<源路徑>
:可以是宿主機路勁也可以是容器路徑,如果是容器路徑需要在路徑前添加<容器名>:
。<目標路徑>
:可以是宿主機路勁也可以是容器路徑,如果是容器路徑需要在路徑前添加<容器名>:
。
效果:
解釋:這里用了 docker cp 命令將 tomcat 容器中的 README.md 文件復制出來,可以看到當前路徑下多了 README.md 文件
🔍 2.1.3 容器信息檢查命令
本小節介紹用于檢查 Docker 容器狀態、資源使用情況和日志輸出的常用命令,適用于日常監控、調試和排查容器運行狀態。
-
docker ps
列出當前運行中的容器,顯示容器的 ID、鏡像、創建時間、狀態、端口映射及名稱等基礎信息。
命令格式:docker ps [-a] [-q]
說明:
[-a]
:列出所有容器,包括已停止的容器(不加這個參數 docker ps 僅顯示運行中的容器)。[-q]
:僅輸出容器 ID(常用于腳本中進一步處理)。
效果:
解釋:這里依次使用了 docker ps 以及帶
-a
和 帶-aq
的 docker ps ,可以看到 docker ps 顯示的信息根據參數的不同而產生的變化。這里使用 docker ps -aq 命令配合 docker stop 命令實現全部容器的停止,docker ps -aq 命令還可以和其他容器狀態轉換命令配合使用達到所有容器統一操作的效果。
-
docker top
查看指定容器內運行的進程信息,類似于 Linux 系統中的 ps 命令,展示 PID、用戶、啟動時間、CPU 使用情況等。
命令格式:docker top <容器名或容器ID>
說明:
<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里利用 docker top 命令查看了 tomcat 容器內再跑的進程狀態
-
docker stats
實時顯示一個或多個容器的資源使用情況,包括 CPU 使用率、內存使用量/限制、網絡 I/O、塊設備 I/O 等。
命令格式:docker stats [容器名或容器ID]
說明:
[容器名或容器ID]
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。如果不指定容器則默認監控所有正在運行的容器
效果:
解釋:在執行了
docker status tomcat_1
命令以后就會進入這個狀態界面,這里會詳細的顯示容器的 CPU 占用率和內存占用率,按下 Ctrl+C 可以退出這個界面
-
docker diff
顯示自容器創建以來文件系統的變化,列出被添加(A)、刪除(D)或修改(C)的文件或目錄。
命令格式:docker diff <容器名或容器ID>
說明:
<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里 docker diff 顯示內容中 C 表示修改過的目錄,A 表示新增的目錄
-
docker logs
查看容器日志輸出。
命令格式:docker logs [-f] [--tail 行數] [--since 時間] [--timestamps] <容器名或容器ID>
說明:
[-f]
:實時輸出日志內容(follow 模式,類似 tail -f)。[--tail 行數]
:僅顯示指定數量的最新日志,例如 --tail 100。[--since 時間]
:顯示自指定時間以來的日志,如 --since 10m(最近10分鐘)。[--timestamps]
:在日志行前顯示時間戳。<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里查看了10條 tomcat 的日志
-
docker port
顯示容器內部端口和宿主機端口之間的映射關系,適用于驗證服務暴露狀態和網絡通信設置。
命令格式:docker port <容器名或容器ID>
說明:
<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里用 docker port 查看了 tomcat 容器的端口映射。
-
docker inspect
以 JSON 格式輸出容器的詳細配置信息,包括掛載卷、網絡設置、環境變量、啟動命令、IP 地址等。
命令格式:docker inspect <容器名或容器ID>
說明:
<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:這里用 docker inspect 查看了 tomcat 容器的詳細信息,這條命令的輸出一般會很長,有時可能會沖掉好幾個屏幕,建議配合 grep 命令過濾掉無用的信息。
🧱 2.2 鏡像命令
🛠? 2.2.1 鏡像操作命令
本小節介紹 Docker 鏡像的常用操作命令,涵蓋從構建、打包、上傳、下載到刪除鏡像的整個生命周期,適用于本地開發與遠程部署場景。
-
docker commit
基于正在運行的容器生成新的鏡像,常用于容器內手動修改后的持久化保存。
命令格式:docker commit [-a] \ [-m] \ [--pause] \ <容器ID或容器名> \ <目標鏡像名:標簽>
說明:
[-a]
:指定鏡像的作者信息。[-m]
:添加一條提交說明,用于描述鏡像的變更內容[--pause]
:在提交時是否暫停容器(默認值為 true,推薦保持),可防止寫入過程中狀態不一致<容器名或容器ID>
:這里的容器名指的就是docker ps
中的 NAMES , ID 指的就是CONTAINER ID。<目標鏡像名:標簽>
:給鏡像起個名字,順便帶個版本號。
效果:
解析:這里利用正在運行的 ubuntu 容器,生成了一個新的鏡像 ubuntu1:1.0
-
docker pull
從遠程鏡像倉庫(如 Docker Hub)拉取指定鏡像到本地。
命令格式:docker pull <鏡像名:標簽>
說明:
<鏡像名:標簽>
:你們公司 docker 倉庫里的鏡像名,以及版本號。
效果:
解釋:這里我從公共倉庫直接拉取了 nginx 鏡像,如果是要到私有倉庫拉取鏡像需要先用 docker login 登錄。
-
docker tag
為已有鏡像打上新的標簽(tag),可用于本地重命名或準備推送到私有倉庫。
命令格式:docker tag <源鏡像名:標簽> <目標鏡像名:標簽>
說明:
<源鏡像名:標簽>
:你在進行修改操作的鏡像名稱以及對應版本號。<源鏡像名:標簽>
:你想創建的新的鏡像的名稱以及版本號。
效果:
解釋:這里可以通過 docker images 的信息看出,我將進行修改后的 tomcat 鏡像打上標簽,創建了一個新的鏡像
-
docker push
將本地鏡像上傳到遠程鏡像倉庫。
命令格式:docker push <鏡像名:標簽>
說明:
<鏡像名:標簽>
:你要上傳到公司 docker 倉庫的鏡像名,以及版本號。
效果:
解釋:要推送鏡像的前提是需要登錄 docker,我這里登錄了 docker Hub 將 huyulun/vim-net:1.0 這個鏡像推送到遠程倉庫。
解釋:推送成功后打開 docker hub 網站登錄賬號可以看到上傳的鏡像
-
docker build
根據指定路徑下的 Dockerfile 構建新的鏡像。
命令格式:docker build -t <鏡像名:標簽> <路徑>
說明:
<鏡像名:標簽>
:你要上傳到公司 docker 倉庫的鏡像名,以及版本號。<路徑>
:構建 docker 鏡像的上下文路徑(通常是含有 Dockerfile 的目錄)
** 效果:**
解釋:這里我利用當前目錄下的 Dockerfile 文件構建了鏡像,可以看到構建成功后新的鏡像會顯示在 docker images 中
-
docker save
將一個或多個鏡像保存為本地 tar 包文件,方便分發或備份。
命令格式:docker save -o <包名.tar> <鏡像名:標簽>
說明:
<包名.tar>
:給你的 tar 包起個名字。<鏡像名:標簽>
:你要打成 tar 包的鏡像名,以及版本號。
效果:
解釋:docker save 執行成功后會在當前路徑下生成一個鏡像的 tar 包
-
docker load
從本地 tar 包文件中導入鏡像,常與 docker save 搭配使用。
命令格式:docker load -i <鏡像文件.tar>
說明:
<鏡像文件.tar>
:你要導入的鏡像文件 tar 包。
效果:
解釋:這里我導入了當前目錄下的 at5.tar 鏡像包,可以看到 docker images 中多了一個 at5:1.0 的鏡像
-
docker rmi
刪除本地鏡像(remove image),支持單個或多個鏡像同時刪除。
命令格式:docker rmi <鏡像名或ID> [...]
說明:
<鏡像名或ID> [...]
:創建容器所使用的鏡像的名字或ID,對應 docker images命令顯示的 IMAGE ID 和 REPOSITORY 。可以一次性填寫多個鏡像名或ID。
提示:一般在專業的技術文檔中[…]表示前面跟的那個參數的數量可以是單數也可以是復數
效果:
解釋:對比前后的 docker images,可以看到我利用 docker rmi 刪除了 at5:1.0 和 tomcat:1.1 兩個鏡像
🔍 2.2.2 鏡像信息檢查命令
鏡像信息檢查命令用于查看鏡像的基本信息、詳細配置以及遠程倉庫中可用的鏡像資源,有助于開發者進行篩選、管理和調試。
-
docker search
用于在遠程鏡像倉庫(如 Docker Hub)中搜索公開鏡像。支持模糊匹配關鍵字,并返回鏡像名稱、描述、星級(Star 數)等信息,方便用戶選擇合適的基礎鏡像。
命令格式:docker search <關鍵字>
說明:
- <關鍵字>:你要搜索的鏡像的名字。
示例:
解釋:這里列出來的就是你能 docker pull 到的公共鏡像。該功能需要訪問外網,并且只能搜索Docker Hub上的公共倉庫。如果不擅長配置 Docker 服務的網絡代理,可以直接上 Docker Hub 官網 搜索
-
docker images
/docker image ls
用于列出本地所有已下載的鏡像,包括鏡像倉庫名(REPOSITORY)、標簽(TAG)、鏡像 ID、創建時間和占用空間等。
命令格式:docker images docker image ls
示例:
解釋:兩個命令唯一的區別就是
docker images
可以少打一個空格和一個 l 。
-
docker inspect
顯示鏡像的底層詳細信息,返回 JSON 格式的數據,包括鏡像的創建時間、分層信息、配置參數、標簽、構建指令等。該命令非常適用于調試鏡像構建問題或驗證構建元數據。
命令格式:docker inspect <鏡像名或鏡像ID>
說明:
- <鏡像名或鏡像ID>:你要查看的目標鏡像的名字或ID
示例:
解釋:這條命令會顯示一串很長的 JSON 數組,建議配合 grep 搜索命令使用,例如
sudo docker inspect tomcat | grep -A 10 "Layer"
🏢 2.3 Docker 網絡命令
🕸? 2.3.1 Docker 組網命令
Docker 支持自定義網絡管理功能,允許用戶創建、連接、斷開和刪除網絡資源,從而靈活地配置容器之間的通信方式。
-
docker network create
用于創建一個自定義的 Docker 網絡,支持指定網絡驅動類型、子網范圍、網關地址等參數。命令格式:
docker network create \--driver <網絡驅動> \--subnet <子網地址/掩碼> \--gateway <網關地址> \<網絡名稱>
說明:
- –driver <網絡驅動>:這里的網絡驅動需要在 bridge, host, none 之中三選一。
- –subnet <子網地址/掩碼>:根據你的組網策略選擇子網地址和掩碼,不懂的話就寫
192.168.0.0/16
。 - –gageway <網關地址>: 根據你的地址填寫網關地址,不懂的話就寫
192.168.0.1
。 - <網絡名稱>:給你自定義創建的網絡起個帥氣的名字。
效果:
解釋:這里創建完以后顯示的一長串是鏡像的完整 ID,放心,不是亂碼,沒有報錯。
-
docker network rm
用于刪除一個或多個未被使用的 Docker 網絡。如果某個網絡中仍有容器在運行,將無法被刪除,必須先斷開容器連接或停止容器。命令格式:
docker network rm <網絡名或ID>
說明:
- <網絡名或ID>:這里的網絡名指的就是
docker network ls
中的 NAME , ID 指的就是 NETWORK ID。
效果:
- <網絡名或ID>:這里的網絡名指的就是
-
docker network connect
將一個運行中的容器連接到指定的 Docker 網絡,使其具備與該網絡中其他容器通信的能力。一個容器可以同時連接到多個網絡。命令格式:
docker network connect <網絡名或ID> <容器名或ID>
說明:
- <網絡名或ID>:這里的網絡名指的就是
docker network ls
中的 NAME , ID 指的就是 NETWORK ID。 - <容器名或ID>:這里的容器名指的就是
docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:命令執行完成后不會顯示任何信息,但是可以通過 docker inspect 來確認容器是否已經成功加入網絡
- <網絡名或ID>:這里的網絡名指的就是
-
docker network disconnect
將容器從指定的 Docker 網絡中斷開。斷開后該容器將無法再通過該網絡與其他容器通信。命令格式:
docker network disconnect <網絡名或ID> <容器名或ID>
說明:
- <網絡名或ID>:這里的網絡名指的就是
docker network ls
中的 NAME , ID 指的就是 NETWORK ID。 - <容器名或ID>:這里的容器名指的就是
docker ps
中的 NAMES , ID 指的就是CONTAINER ID。
效果:
解釋:命令執行完成后不會顯示任何信息,但是可以通過 docker inspect 來確認容器是否已經成功從網絡中移除
- <網絡名或ID>:這里的網絡名指的就是
🔍 2.3.2 Docker 網絡信息檢查命令
Docker 網絡信息檢查命令主要用于查看當前系統中存在的網絡資源及其詳細配置,幫助用戶理解容器之間如何連接、隔離以及與外部通信的方式。
-
docker network ls
查看網絡列表。
命令格式:docker network ls
效果:
解釋:這里顯示的 NAME 為 bridge, host, none 的網絡為 Docker 自動創建的網絡。bridge 網絡中的容器會被分配虛擬 IP ; host 網絡中的容器會共享宿主機的 IP ; none 網絡中的容器沒有 IP。創建容器的時候不跟
--net
參數的話默認會被分配到 bridge 網絡中。
-
docker network inspect
查看網絡配置詳情。命令格式:
docker inspect <網絡名或ID>
說明:
- <網絡名或ID>:這里的網絡名指的就是
docker network ls
中的 NAME , ID 指的就是 NETWORK ID
效果:
- <網絡名或ID>:這里的網絡名指的就是
🧰 2.4 Docker 倉庫命令
在實際開發或部署過程中,企業通常會搭建私有鏡像倉庫(如 Harbor、JFrog Artifactory),用于集中管理項目鏡像、控制權限、提升部署效率。而默認情況下,Docker 使用的是官方鏡像倉庫 Docker Hub。以下是與倉庫認證相關的基本命令:
-
docker login
用于登錄鏡像倉庫,以便后續拉取(pull
)或推送(push
)鏡像。登錄過程會將憑據保存在本地配置文件中(如~/.docker/config.json
),用于身份驗證。命令格式:
docker login -u <用戶名> <倉庫地址>
說明:
- -u <用戶名> :公司給你分配的 Docker 倉庫賬號,或者是你在 Docker Hub 上注冊的賬號。
- <倉庫地址>:你們公司的倉庫地址。如果是登錄 Docker Hub,倉庫地址可省略。
效果:
解釋:命令執行后系統會提示輸入密碼,輸入完成后按回車即可登錄。這里我用自己的賬號登錄 Docker Hub。登錄成功后,即可在私有倉庫中執行鏡像上傳、下載等操作。
提示:其實
docker login -u <用戶名> -p <密碼>
可以一步登錄,但是這樣我的密碼就被你知道了)
-
docker logout
用于登出當前登錄的鏡像倉庫賬戶,清除本地保存的認證信息。命令格式:
docker logout [倉庫地址]
說明:
- [倉庫地址]:你們公司的倉庫地址。如果未指定地址,則默認登出 Docker Hub。
效果:
?? 3. 注意事項
🍁 docker build 構建鏡像失敗 exit code:100
再使用 Dockerfile 構建鏡像的時候出現以下情況
這是因為 Dockerfile 中有下載安裝軟件的指令,而 Ubuntu:latest 鏡像默認軟件源 http://ports.ubuntu.com/ubuntu-ports
是失效的,需要切換到國內有效的軟件源,才能進行軟件倉庫的更新以及軟件的下載和安裝。但是我們在構建鏡像的時候又無法進入容器修改配置文件,所以只能采取通過 sed 命令在系統安裝軟件之前強制修改配置文件內容的方法了:
RUN sed -i -e 's|http://ports.ubuntu.com/ubuntu-ports|http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports|g' /etc/apt/sources.list.d/ubuntu.sources && \apt-get update && \apt-get install -y vim
💦 docker 容器起不來
如果你用 docker start 啟動容器時遇到以下情況
或者用 docker run 啟動容器時遇到以下情況
那么你需要檢查你的容器內部有沒有持續運行的進程。如果你的容器不是服務類型的(比如 tomcat 或 nginx ),而且你在啟動的時候沒有添加 -it
參數,那么容器啟動后會因為沒有持續運行的進程而被 docker 關閉。所以一般不管時什么性質的容器,只要他不報錯,我都會在啟動容器的時候加上 -it
參數。
💔Tomcat 容器 docker attach 卡死
如果你通過 docker attach 鏈接 Tomcat 容器時遇到以下情況
光標就這樣卡在那兒不動了。這個時正常情況,因為 tomcat 是服務性質的容器,即使你添加了 -it
參數也無法在他的主進程中和他進行交互,這時候正確的做法應該是按下 Ctrl+C 然后使用帶 it
參數的 docker run 啟動 tomcat ,這樣才能進入到 tomcat 容器中。
但如果你閑的沒事使用了 docker attach 命令的 --no-stdin
參數去鏈接 tomcat 容器
那么恭喜你,發現了一個能夠卡死終端的新方法。在這種情況下,你無論輸入任何指令終端都不會有相應,包括 Ctrl+C 和 Ctrl+P+Q 。原因是 docker attach 的 --no-stdin 參數會讓容器無視一切標準輸入中的指令,這相當于給本來就不怎么聰明的 tomcat 容器又灌了一瓶毒奶粉,這是真的沒救了,只能重開終端了。
至于為什么會有這種參數,我個人猜測是某些開發者有特殊的需求,希望客戶在使用容器的時候,出于安全的角度(我就是想折磨客戶😈),防止客戶誤輸入指令導致容器狀態異常,才設計出來的。