Docker 容器命令
Docker 容器命令
docker ps
docker ps
docker ps -a
docker ps --size
docker ps 是 Docker 的一個命令,用于查看當前正在運行的容器。
命令格式:
docker ps [OPTIONS]
常用選項:
-a或--all:顯示所有容器(包括未運行的)-q或--quiet:只顯示容器的 ID--no-trunc:不截斷輸出(例如容器名、命令等)--format:使用 Go 模板格式化輸出內容
示例解釋:
示例 1:
docker ps
顯示當前正在運行的容器,包括:
- 容器 ID(CONTAINER ID)
- 鏡像(IMAGE)
- 命令(COMMAND)
- 創建時間(CREATED)
- 狀態(STATUS)
- 端口(PORTS)
- 容器名(NAMES)
示例輸出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123456789 nginx:latest "nginx -g 'daemon of…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp webserver
示例 2:
docker ps -a
顯示所有容器,包括已停止的容器。
docker run
docker run 是 Docker 中最常用的命令之一,用于創建并啟動一個容器。它基于指定的鏡像運行一個新的容器實例,可以指定容器運行的配置參數,例如端口映射、環境變量、掛載卷等。
基本語法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE:鏡像名稱,例如nginx、ubuntu。COMMAND:可選,覆蓋鏡像默認執行命令。OPTIONS:可選參數,用于配置容器行為。
常見參數說明
| 參數 | 含義 |
|---|---|
-d |
后臺運行容器(detached 模式) |
-it |
交互模式運行容器,-i 保持輸入流打開,-t 分配偽終端 |
--name |
指定容器名稱 |
-p 主機端口:容器端口 |
端口映射,例如 -p 8080:80 |
-v 主機路徑:容器路徑 |
卷掛載,將主機目錄掛載到容器中 |
--rm |
容器退出時自動刪除 |
-e |
設置環境變量,例如 -e ENV_VAR=value |
示例
- 運行一個 Ubuntu 容器并進入交互模式:
docker run -it ubuntu bash
意思是:以 ubuntu 鏡像運行一個容器,進入 bash 交互終端。
- 運行 Nginx 并映射端口:
docker run -d -p 8080:80 nginx
意思是:以后臺方式運行 nginx,并將主機的 8080 端口映射到容器的 80 端口。
- 運行帶掛載卷的容器:
docker run -v /host/path:/container/path ubuntu
意思是:將主機的 /host/path 目錄掛載到容器的 /container/path。
- 設置環境變量:
docker run -e MY_ENV=prod ubuntu
重啟策略
使用 Docker 的 --restart 來指定容器的重啟策略。
重啟策略控制 Docker 守護進程退出后是否重新啟動容器。
Docker 支持以下重啟策略:
| Policy | Result |
|---|---|
no |
當容器退出時,不要自動重啟容器。這是默認值。 |
on-failure[:max-retries] |
僅當容器以非零退出狀態退出時重新啟動。可選地,限制Docker守護進程嘗試重新啟動的次數。 |
unless-stopped |
重新啟動容器,除非它被顯式停止或 Docker 本身被停止或重新啟動。 |
always |
無論退出狀態如何,總是重新啟動容器。當您指定 always 時,Docker 守護進程將嘗試無限期地重新啟動容器。容器也將始終在守護進程啟動時啟動,而不管容器的當前狀態如何。 |
說明
--restart=no:容器退出時不重啟。--restart=always:無論容器是如何退出的,都會重啟。--restart=on-failure:只有在容器非正常退出(退出狀態非 0)時才會重啟。--restart=unless-stopped:容器會一直重啟,除非被手動停止。
關于手動停止了,如果 Docker 守護進程不被重啟,都不會被啟動,如果使用了類似systemctl restart docker命令重啟 Docker 守護進程,那么 unless-stopped 的容器已經被手動停止了就不會自動重啟,always 的會自動重啟。
固定物理地址
有些服務的授權或激活機制依賴于網絡接口的 物理地址(MAC 地址)。
由于 Docker 容器默認每次啟動都會分配一個新的虛擬 MAC 地址,這會導致激活信息失效或授權失效。
為了解決這個問題,可以在啟動容器時通過 --mac-address 參數顯式指定一個固定的 MAC 地址,例如:
docker run --mac-address 02:42:ac:11:00:01 ...
這樣可以確保每次啟動的容器網絡接口使用相同的 MAC 地址,從而滿足服務對物理地址不變的要求。
docker exec
在運行的容器中執行命令
命令使用
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
描述
docker exec命令在運行的容器中運行一個新命令。
COMMAND在容器的默認目錄下運行。如果底層映像在Dockerfile中使用WORKDIR指令指定了自定義目錄,則使用此目錄。
COMMAND必須是可執行文件。鏈式或加引號的命令不起作用。
一般進入容器可以使用
docker exec -it mycontainer bash
docker exec -it mycontainer /bin/bash
選項
| Name, shorthand | 描述 |
|---|---|
--detach , -d |
分離模式:后臺運行命令 |
--detach-keys |
重寫分離容器的鍵序列 |
--env , -e |
設置環境變量 |
--env-file |
讀入一個環境變量文件 |
--interactive , -i |
保持標準輸入打開,即使沒有附加 |
--privileged |
為該命令提供擴展權限 |
--tty , -t |
分配偽 tty |
--user, -u |
用戶名或 UID |
--workdir , -w |
容器內的工作目錄 |
docker start
啟動容器
docker stop
停止容器
docker restart
重啟容器
docker rename
容器重命名
docker rename my_container my_new_container
docker rm
刪除容器
docker cp
docker cp 是 Docker 提供的一個命令,用于在宿主機與容器之間復制文件或目錄,語法簡單實用。
一、命令格式:
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
二、參數說明:
SRC_PATH:源路徑,可以是本地路徑或容器內路徑(需加上CONTAINER:)。DEST_PATH:目標路徑,可以是本地路徑或容器內路徑(需加上CONTAINER:)。CONTAINER:容器的名字或 ID。
三、常用示例:
- 從宿主機復制文件到容器中:
docker cp ./test.txt mycontainer:/app/test.txt
說明:將宿主機當前目錄下的 test.txt 復制到容器 mycontainer 的 /app/ 目錄下。
- 從容器中復制文件到宿主機:
docker cp mycontainer:/app/test.txt ./test.txt
說明:將容器 mycontainer 中 /app/test.txt 復制到宿主機當前目錄。
- 復制目錄:
docker cp mycontainer:/app/data ./data
說明:將容器內的 /app/data 目錄復制到宿主機當前目錄下。
四、注意事項:
docker cp只能用于運行中或已停止的容器(前提是容器存在)。- 支持相對路徑和絕對路徑。
- 如果目標路徑存在同名文件或目錄,會被覆蓋。
- 該命令不會改變文件的權限或所有權,但可能會略有不同,尤其在不同操作系統之間使用時。
docker network
在 Docker 中,網絡(network)用于連接容器,使它們可以相互通信,或者與主機、外部網絡通信。Docker 提供了多種網絡驅動類型,以滿足不同的使用場景。
Docker 網絡類型(驅動)
-
bridge(默認)
-
容器默認使用的網絡類型(除非指定)。
-
適用于單主機上多個容器之間的通信。
-
每個容器都會獲得一個虛擬 IP,彼此通過網絡橋接通信。
-
示例:
docker run -d --name container1 nginx docker run -d --name container2 busybox
-
-
host
-
容器與宿主機共享網絡命名空間。
-
容器不會有自己的 IP 地址,使用宿主機的 IP 和端口。
-
適用于對性能有要求,或不需要隔離的場景。
-
示例:
docker run --network host nginx
-
-
none
- 容器沒有網絡連接。
- 適用于需要完全隔離網絡的場景。
-
overlay
-
用于 Docker Swarm 或集群環境下,跨主機容器通信。
-
構建在多個 Docker 主機之上的虛擬網絡。
-
需要使用
docker swarm初始化。 -
示例:
docker network create --driver overlay my_overlay
-
-
macvlan
- 為容器分配一個 MAC 地址,使其像物理設備一樣存在于網絡中。
- 適用于需要容器在二層網絡中表現為獨立主機的場景。
-
自定義網絡
- 你可以通過
docker network create創建自定義網絡,并設置子網、網關等參數。 - 容器加入同一個自定義網絡后,可以使用容器名直接通信(DNS 支持)。
- 你可以通過
常用命令
-
查看所有網絡:
docker network ls -
創建一個自定義橋接網絡:
docker network create --driver bridge my_network -
查看網絡詳情:
docker network inspect my_network -
啟動容器并指定網絡:
docker run -d --name my_nginx --network my_network nginx -
將已存在的容器連接到網絡:
docker network connect my_network my_container -
從網絡中斷開容器:
docker network disconnect my_network my_container
Docker 網絡隔離
網絡是為了隔離同一個服務器上不同應用的
Docker 網絡可以用于隔離同一服務器上不同應用之間的通信。
通過創建不同的 Docker 網絡,可以確保應用只與需要通信的其他容器進行通信,而不會受到其他不相關容器的干擾。
docker network create my_network
# 啟動 app1 并連接到自定義網絡
docker run -d --name app1 --network my_network -p 3000:3000 app1_image
# 啟動 app2 并連接到自定義網絡
docker run -d --name app2 --network my_network -p 5000:5000 app2_image
# 將運行中的容器加入網絡
docker network connect my_network app3
# 在單個主機上部署多個容器,容器之間有隔離,需要使用同一網絡,容器名字代替IP地址
# 比如:app1 的配置文件中關于 app2 的IP地址用容器名字代替,比如 app2:5000
# 如果容器之間通信走內部 Docker 網絡,不通過宿主機映射端口,比如啟動了多個 MySQL 容器,每個容器里面都是3306端口,如果都加入到了同一個網絡,比如使用的 mysql8:3306 后面的 3306,要是容器內的端口。

浙公網安備 33010602011771號