Docker 常用命令總結


Docker 常用命令總結

 

 

鏡像相關

搜索

docker search *image_name*

下載

docker pull *image_name*

查看

docker images
docker image ls

刪除

docker rmi *image_name*
docker image rm *image_name*

導出docker鏡像

docker save *image_name* > /save/image/path/name.tar.gz

導入docker鏡像

docker load < /save/image/path/name.tar.gz

提交創建的自定義的鏡像

docker commit *container_id* *鏡像名稱*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@c7-dev ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ecddae6e645 centos "bash" 21 minutes ago Exited (0) About a minute ago boring_mestorf
# 進入容器,執行一些安裝的過程省略
# 對容器進行一些自定制的操作后,提交這個容器生成新的鏡像
[root@c7-dev ~]# docker commit 6ecdd gandoufu/centos-wget
sha256:bac2d675a9c230f0a60b0af35b5d4e3cb337d7c6f122a05b60a9172ddb9fbda0
[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ecddae6e645 centos "bash" 24 minutes ago Exited (0) 4 minutes ago boring_mestorf
[root@c7-dev ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gandoufu/centos-wget latest bac2d675a9c2 16 seconds ago 328 MB
docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB

# 將生成的新的鏡像推送至遠程倉庫
[root@c7-dev ~]# docker login
Username: gandoufu
Password:
Login Succeeded
[root@c7-dev ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gandoufu/centos-wget latest bac2d675a9c2 10 minutes ago 328 MB
docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
[root@c7-dev ~]# docker tag bac2 gandoufu/centos7-wget:latest
[root@c7-dev ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gandoufu/centos-wget latest bac2d675a9c2 12 minutes ago 328 MB
gandoufu/centos7-wget latest bac2d675a9c2 12 minutes ago 328 MB
docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
[root@c7-dev ~]# docker push gandoufu/centos7-wget
The push refers to a repository [docker.io/gandoufu/centos7-wget]
f79b6b9e2fa6: Pushing [==================================================>] 129.6 MB
071d8bd76517: Pushed

打標簽時的注意事項:
docker tag bac2 gandoufu/centos7-wget
bac2 是鏡像的id
gandoufu/centos7-wget 鏡像的名稱必須是自己的id名稱/鏡像名稱
latest 默認版本號,可以不用加

容器相關

新建容器

docker create image_name
docker create -t -i image_name bash
docker run image_name
docker run image_name /bin/echo “haha”
docker run -it -d image_name
docker run -it -d –rm –name mydo image_name

使用create創建的容器,在使用時需要先start對應的容器;
使用run創建的容器,直接運行;如果指定的image_name不存在,則會去鏡像倉庫下載鏡像,然后根據鏡像創建容器。

參數說明:
i 進入交互模式
t 創建一個虛擬終端
d 后台運行
rm 退出后自動刪除容器
name 創建的容器使用自定義的名字
注:i和t參數一起指定(-it),在實際操作時發現只指定i參數時,attach到實例時會出現卡死的情況。

進入容器

docker attach *container_id|container_name*
根據容器的id或名字進入指定的容器;如果容器處於未運行狀態,需要先啟動容器docker start container_id

1
2
3
4
5
6
7
8
9
10
11
[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aefe7162ed16 centos "bash" 22 minutes ago Exited (0) 3 seconds ago hungry_franklin
[root@c7-dev ~]#
[root@c7-dev ~]# docker start aefe
aefe
[root@c7-dev ~]# docker attach aefe

[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aefe7162ed16 centos "bash" 20 minutes ago Up 16 seconds hungry_franklin

 

使用運行的容器執行命令

docker exec *container_id* command

1
2
3
4
5
[root@c7-dev ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aefe7162ed16 centos "bash" 15 minutes ago Up 15 minutes hungry_franklin
[root@c7-dev ~]# docker exec aefe date
Wed Dec 12 14:04:12 UTC 2018

 

查看容器

docker ps
docker ps -a
docker ps -aq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@c7-dev ~]# docker run -it -d centos bash
aefe7162ed163028c36741c26545dc0f1967ada0c985ce32cee5cf79666d2a3b
[root@c7-dev ~]# docker create -it --name myubun ubuntu
3ba687940aed4a65bfc0656ea23ab627eab71ec4c3bd796ab107674503dd6f72
[root@c7-dev ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aefe7162ed16 centos "bash" 45 seconds ago Up 45 seconds hungry_franklin
[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ba687940aed ubuntu "/bin/bash" 9 seconds ago Created myubun
aefe7162ed16 centos "bash" 47 seconds ago Up 47 seconds hungry_franklin
[root@c7-dev ~]# docker ps -aq
3ba687940aed
aefe7162ed16

 

停止容器

docker stop *container_id*

1
2
3
4
5
6
7
[root@c7-dev ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aefe7162ed16 centos "bash" 18 minutes ago Up 18 minutes hungry_franklin
[root@c7-dev ~]# docker stop aefe
aefe
[root@c7-dev ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

 

刪除容器

docker rm *container_id*

1
2
3
4
5
6
7
8
9
[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ba687940aed ubuntu "/bin/bash" 16 minutes ago Created myubun
aefe7162ed16 centos "bash" 17 minutes ago Up 17 minutes hungry_franklin
[root@c7-dev ~]# docker rm myubun
myubun
[root@c7-dev ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aefe7162ed16 centos "bash" 17 minutes ago Up 17 minutes hungry_franklin

 

倉庫相關

登錄/退出倉庫

docker [login/logout] [倉庫地址]

1
2
3
4
5
6
7
[root@c7-dev ~]# docker login daocloud.io
Username: gandoufu
Password:
Login Succeeded

[root@c7-dev ~]# docker logout daocloud.io
Removing login credentials for daocloud.io

外部訪問容器

先下載一個training/webapp鏡像,用於測試

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@c7-dev ~]# docker run -d -P training/webapp python app.py
e8c1832a9814d61c61faf3d472b40c1164cd410caad855415f3bc56668f0cc2a
[root@c7-dev ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8c1832a9814 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:32768->5000/tcp tender_cori
[root@c7-dev ~]# docker port e8c
5000/tcp -> 0.0.0.0:32768
[root@c7-dev ~]# docker top e8c1
UID PID PPID C STIME TTY TIME CMD
root 1781 1767 0 10:19 ? 00:00:00 python app.py

[root@c7-dev ~]# docker run -d -p 8000:5000 --name flask training/webapp python app.py
fef819097329bf7eb90fcf868a4a047b39e62b300c7e30105c38d1adf7fbf10e
[root@c7-dev ~]# docker port fef8
5000/tcp -> 0.0.0.0:8000

 

通過webapp鏡像創建運行容器,在容器內運行一個簡單的web應用,端口為5000。

參數說明:
-P 會使用宿主機的一個隨機端口映射到容器內的5000端口;外部訪問ip+隨機端口就可以訪問容器內的外部應用
-p 指定外部端口與內部端口映射關系。外部端口:內部端口

硬件資源相關

顯示容器硬件資源使用情況

docker stats [OPTIONS] [CONTAINER...]

1
2
3
[root@c7-dev ~]# docker stats --no-stream
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
3e7563aef10e 0.03% 10.9 MiB / 991.7 MiB 1.10% 2.59 kB / 2.22 kB 0 B / 0 B 1

 

如果不加--no-stream參數,會實時刷新顯示資源使用情況。

更新容器的硬件資源限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 創建容器的時候,限制內存
[root@c7-dev ~]# docker run -it -d -m 100M --memory-swap -1 --name mycent centos
32d70771e7c88b70caaca4c8e7428421a0906dde6358d77441104a6162032447
[root@c7-dev ~]# docker stats --no-stream 32d7
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32d7 0.00% 380 KiB / 100 MiB 0.37% 648 B / 648 B 0 B / 0 B 1

# 更新內存限制
[root@c7-dev ~]# docker update -m 200M --memory-swap -1 32d7
32d7
[root@c7-dev ~]#
[root@c7-dev ~]#
[root@c7-dev ~]# docker stats --no-stream 32d7
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
32d7 0.00% 380 KiB / 200 MiB 0.19% 648 B / 648 B 0 B / 0 B 1

[root@c7-dev ~]# docker update -m 400M 32d7
Error response from daemon: Cannot update container 32d70771e7c88b70caaca4c8e7428421a0906dde6358d77441104a6162032447: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time

注意:指定限制內存大小並且設置 memory-swap 值為 -1,表示容器程序使用內存受限,而 swap 空間使用不受限制(宿主 swap 支持使用多少則容器即可使用多少。如果 –memory-swap 設置小於 –memory則設置不生效,使用默認設置)。
docker run -it --rm -m 100M ubuntu-stress:latest /bin/bash
如果不添加–memory-swap選項,則表示容器中程序可以使用100M內存和100Mswap內存,默認情況下,–memory-swap 會被設置成 memory 的 2倍。-m 為物理內存上限,而 –memory-swap 則是 memory + swap 之和,當壓測值是 –memory-swap 上限時,則容器中的進程會被直接 OOM kill。

 

Docker命令參考表

docker命令選項列表

選項 說明 其他
–config [string] 客戶端本地配置文件路徑 默認為 ~/.docker
-D, –debug 啟用調試模式  
–help 打印用法  
-H, –host list 通過socket訪問指定的docker守護進程(服務端) unix:// , fd:// , tcp://
-l, –log-level [string] 設置日志級別 (debuginfowarnerrorfatal) 默認為 info
–tls 啟用TLS加密  
–tlscacert [string] 指定信任的CA根證書路徑 默認為 ~/.docker/ca.pem
–tlscert [string] 客戶端證書路徑 默認為 ~/.docker/cert.pem
–tlskey [string] 客戶端證書私鑰路徑 默認為 ~/.docker/key.pem
–tlsverify 啟用TLS加密並驗證客戶端證書  
-v, –version 打印docker客戶端版本信息

用於管理的子命令列表

選項 說明
container 管理容器
image 管理鏡像
network 管理容器網絡(默認為bridge、host、none三個網絡配置)
plugin 管理插件
system 管理系統資源。其中, docker system prune 命令用於清理沒有使用的鏡像, 容器, 數據卷以及網絡
volume 管理數據卷
swarm 管理Swarm模式
service 管理Swarm模式下的服務
node 管理Swarm模式下的docker集群中的節點
secret 管理Swarm模式下的敏感數據
stack Swarm模式下利用compose-file管理服務

基礎子命令列表

選項 說明
attach 進入運行中的容器, 顯示該容器的控制台界面。注意, 從該指令退出會導致容器關閉
build 根據 Dockerfile 文件構建鏡像
commit 提交容器所做的改為為一個新的鏡像
cp 在容器和宿主機之間復制文件
create 根據鏡像生成一個新的容器
diff 展示容器相對於構建它的鏡像內容所做的改變
events 實時打印服務端執行的事件
exec 在已運行的容器中執行命令
export 導出容器到本地快照文件
history 顯示鏡像每層的變更內容
images 列出本地所有鏡像
import 導入本地容器快照文件為鏡像
info 顯示 Docker 詳細的系統信息
inspect 查看容器或鏡像的配置信息, 默認為json數據
kill -s 選項向容器發送信號, 默認為SIGKILL信號(強制關閉)
load 導入鏡像壓縮包
login 登錄第三方倉庫
logout 退出第三方倉庫
logs 打印容器的控制台輸出內容
pause 暫停容器
port 容器端口映射列表
ps 列出正在運行的容器, -a 選項顯示所有容器
pull 從鏡像倉庫拉取鏡像
push 將鏡像推送到鏡像倉庫
rename 重命名容器名
restart 重啟容器
rm 刪除已停止的容器, -f 選項可強制刪除正在運行的容器
rmi 刪除鏡像(必須先刪除該鏡像構建的所有容器)
run 根據鏡像生成並進入一個新的容器
save 打包本地鏡像, 使用壓縮包來完成遷移
search 查找鏡像
start 啟動關閉的容器
stats 顯示容器對資源的使用情況(內存、CPU、磁盤等)
stop 關閉正在運行的容器
tag 修改鏡像tag
top 顯示容器中正在運行的進程(相當於容器內執行 ps -ef 命令)
unpause 恢復暫停的容器
update 更新容器的硬件資源限制(內存、CPU等)
version 顯示docker客戶端和服務端版本信息
wait 阻塞當前命令直到對應的容器被關閉, 容器關閉后打印結束代碼
daemon 這個子命令已過期, 將在Docker 17.12之后的版本中移出, 直接使用dockerd

run命令常用選項

選項 說明
-d 后台運行容器, 並返回容器ID;不指定時, 啟動后開始打印日志, Ctrl + C 退出命令同時會關閉容器
-i 以交互模式運行容器, 通常與 -t 同時使用;
-t 為容器重新分配一個偽輸入終端, 通常與 -i 同時使用
–name “anyesu-container” 為容器指定一個別名, 不指定時隨機生成
-h docker-anyesu 設置容器的主機名, 默認隨機生成
–dns 8.8.8.8 指定容器使用的DNS服務器, 默認和宿主一致
-e docker_host=172.17.0.1 設置環境變量
–cpuset=”0-2” or –cpuset=”0,1,2” 綁定容器到指定CPU運行
-m 100M 設置容器使用內存最大值
–net bridge 指定容器的網絡連接類型, 支持 bridge / host / none / container 四種類型
–ip 172.18.0.13 為容器分配固定ip(需要使用自定義網絡)
–expose 8081 –expose 8082 開放一個端口或一組端口, 會覆蓋鏡像設置中開放的端口
-p [宿主機端口]:[容器內端口] 宿主機到容器的端口映射, 可指定宿主機的要監聽的ip, 默認為 0.0.0.0
-P 注意是大寫的, 宿主機隨機指定一組可用的端口映射容器 expose 的所有端口
-v [宿主機目錄路徑]:[容器內目錄路徑] 掛載宿主機的指定目錄(或文件)到容器內的指定目錄(或文件)
–add-host [主機名]:[ip] 為容器hosts文件追加host, 默認會在hosts文件最后追加 [主機名]:[容器ip]
–volumes-from [其他容器名] 將其他容器的數據卷添加到此容器
–link [其他容器名]:[在該容器中的別名] 添加鏈接到另一個容器, 在本容器hosts文件中加入關聯容器的記錄, 效果類似於 --add-host

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM