目錄
簡介
Docker的命令分為使用命令和管理命令,而本文對Docker的使用命令和管理命令進行了彙總和樣例提示,以便於他人學習和本人回顧使用。
Docker不僅提供了在各個環節下使用的命令,還提供了DockerAPI供我們使用Http來和Docker進行互動,從而開發我們自己的Docker。
由於命令太多,下面給出一個大致的清單供大家對所有命令有一個初步瞭解,然後就是哪裡不會點哪裡。
管理命令:
container 管理容器
image 管理映象
network 管理網路
node 管理Swarm節點
plugin 管理外掛
secret 管理Docker secrets
service 管理服務
stack 管理Docker stacks
swarm 管理Swarm叢集
system 檢視系統資訊
volume 管理卷
如:docker container ls 顯示所有容器
普通命令:
// 開發應該熟練掌握的:
images 檢視映象列表
rmi 刪除映象
save 將指定映象儲存成 tar 歸檔檔案
load 從存檔或者STDIN載入映象
build 從一個DockerFile構建映象
commit 從容器建立一個映象
create 建立一個容器
run 建立一個新的容器並執行一個命令
rename 重新命名容器
start 啟動容器
stop 停止容器
restart 重啟容器
rm 刪除容器
logs 獲取一個容器的日誌
exec 在正在執行的容器中執行命令
cp 從容器和主機檔案系統之間拷貝檔案
ps 檢視容器列表
// 運維應該熟練掌握的:
login 登陸docker映象倉庫
logout 退出docker映象倉庫
search 從Docker Hub搜尋映象
pull 從映象倉庫拉取映象
push 將本地的映象上傳到映象倉庫,要先登陸到映象倉庫
tag 標記本地映象,將其歸入某一倉庫
export 將容器的檔案系統匯出為tar存檔
import 從歸檔檔案中建立映象
info 顯示系統範圍的資訊
version 顯示Docker的版本資訊
stats 顯示(實時)容器資源使用情況的統計資訊
inspect 顯示Docker物件的低階資訊(檢視物件詳情)
diff 顯示容器檔案系統上的更改(檢視容器變化)
events 顯示從伺服器獲取實時事件(可檢視docker的改動)
port 顯示埠對映或容器的特定對映列表(埠檢視)
top 顯示一個容器中執行的程式(檢視程式)
history 顯示映象的歷史記錄
attach 進入一個執行的容器
pause 暫停一個或多個容器中的所有程式
unpause 恢復容器中所有的程式
kill kill執行中的容器
wait 阻塞直到容器停止,然後列印退出程式碼
update 更新容器配置
映象倉庫
login
docker login : 登陸到一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub
docker logout : 登出一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub
語法:
docker login/logout (-$) [SERVER]
-u 登陸的使用者名稱
-p 登陸的密碼
例項:
登陸到Docker Hub
docker login -u 使用者名稱 -p 密碼
登出Docker Hub
docker logout
pull
docker pull : 從映象倉庫中拉取或者更新指定映象
語法:
docker pull (-$) NAME[:TAG|@DIGEST]
-a,all 拉取所有 tagged 映象
--disable-content-trust 忽略映象的校驗,預設開啟
例項:
從Docker Hub下載java最新版映象。
docker pull java
從Docker Hub下載REPOSITORY為java的所有映象。
docker pull -a java
push
docker push : 將本地的映象上傳到映象倉庫,要先登陸到映象倉庫
語法:
docker push (-$) NAME[:TAG]
--disable-content-trust 忽略映象的校驗,預設開啟
例項:
上傳本地映象myapache:v1到映象倉庫中
docker push myapache:v1
推送映象庫到私有源
docker push 192.168.0.100:5000/ubuntu
search
docker search : 從Docker Hub查詢映象
語法:
docker search (-$) TERM
-automated 只列出 automated build型別的映象;
--no-trunc 顯示完整的映象描述;
-s 列出收藏數不小於指定值的映象。
例項:
從Docker Hub查詢所有映象名包含java,並且收藏數大於10的映象
docker search -s 10 java
runoob@runoob:~$ docker search -s 10 java
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
java Java is a concurrent, class-based... 1037 [OK]
anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC ... 115 [OK]
develar/java 46 [OK]
isuper/java-oracle This repository contains all java... 38 [OK]
lwieske/java-8 Oracle Java 8 Container - Full + ... 27 [OK]
nimmis/java-centos This is docker images of CentOS 7... 13 [OK]
本地映象管理
images
docker images : 列出本地映象。
語法:
docker images (-$) [REPOSITORY[:TAG]]
-a 列出本地所有的映象(含中間映像層,預設情況下,過濾掉中間映像層)
--digests 顯示映象的摘要資訊
-f 顯示滿足條件的映象
--format 指定返回值的模板檔案
--no-trunc 顯示完整的映象資訊
-q 只顯示映象ID。
例項:
查詢出無用的鏡象
docker images -f dangling=true
列出本地映象中REPOSITORY為alpine的映象列表。
docker images alpine
[root@master ~]# docker images alpine
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 3.9 cdf98d1859c1 3 months ago 5.53MB
alpine latest cdf98d1859c1 3 months ago 5.53MB
rmi
docker rmi : 刪除本地一個或多少映象。
語法:
docker rmi (-$)
-f,--force 強制刪除映象
--no-prune 不移除該映象的過程映象,預設移除
例項:
刪除所有映象
docker rmi $(docker images -q)
強制刪除映象名稱中包含"doss-api"的映象
docker rmi --force $(docker images | grep doss-api | awk '{print $3}')
批量刪除無用鏡象(三種方式都可以,想強制刪除可在rmi後加-f)
docker rmi $(docker images | grep "^
" | awk "{print $3}")
docker images | grep none | awk '{print $3}' | xargs docker rmi
docker rmi $( docker images -f dangling=true)
tag
docker tag : 標記本地映象,將其歸入某一倉庫。
語法:
docker tag (-$) IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
例項:
將映象ubuntu:15.10標記為 runoob/ubuntu:v3 映象。
docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images runoob/ubuntu:v3
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v3 4e3b13c8a266 3 months ago 136.3 MB
build
docker build 命令用於使用 Dockerfile 建立映象。
語法:
docker build (-$) PATH | URL | -
--build-arg=[] 設定映象建立時的變數
--cpu-shares 設定 cpu 使用權重
--cpu-period 限制 CPU CFS週期
--cpu-quota 限制 CPU CFS配額
--cpuset-cpus 指定使用的CPU id
--cpuset-mems 指定使用的記憶體 id
--disable-content-trust 忽略校驗,預設開啟
-f 指定要使用的Dockerfile路徑
--force-rm 設定映象過程中刪除中間容器
--isolation 使用容器隔離技術
--label=[] 設定映象使用的後設資料
-m 設定記憶體最大值
--memory-swap 設定Swap的最大值為記憶體+swap,"-1"表示不限swap
--no-cache 建立映象的過程不使用快取
--pull 嘗試去更新映象的新版本
--quiet, -q 安靜模式,成功後只輸出映象 ID
--rm 設定映象成功後刪除中間容器
--shm-size 設定/dev/shm的大小,預設值是64M
--ulimit Ulimit配置。
--tag, -t 映象的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中為一個映象設定多個標籤。
--network 預設 default。在構建期間設定RUN指令的網路模式
例項:
使用當前目錄的 Dockerfile 建立映象,標籤為 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 建立映象。
docker build github.com/creack/docker-firefox
也可以通過 -f Dockerfile 檔案的位置:
docker build -f /path/to/a/Dockerfile .
在 Docker 守護程式執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:
docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD
history
docker history : 檢視指定映象的建立歷史。
語法:
docker history (-$) IMAGE
-H 以可讀的格式列印映象大小和日期,預設為true;
--no-trunc 顯示完整的提交記錄;
-q 僅列出提交記錄ID。
save
docker save : 將指定映象儲存成 tar 歸檔檔案。
語法:
docker save (-$) IMAGE [IMAGE...]
-o 輸出到的檔案。
例項:
匯出映象
docker save -o /root/mytomcat7.tar.gz docker.io/tomcat:7.0.77-jre7
或
docker save docker.io/tomcat:7.0.77-jre7 >/root/mytomcat7.tar.gz
load
docker load : 匯入使用 docker save 命令匯出的映象。
語法:
docker load (-$)
-i 指定匯出的檔案。
-q 精簡輸出資訊。
例項
匯入映象
docker load -i ubuntu.tar
docker load < ubuntu.tar
docker load < /root/mytomcat7.tar.gz
import
docker import : 從歸檔檔案中建立映象。
語法:
docker import (-$) file|URL|- [REPOSITORY[:TAG]]
-c,--change 將Dockerfile指令應用於建立的映像
-m,--message 為匯入的映象設定說明資訊
--platform 如果伺服器具有多平臺功能,則設定平臺
例項
從映象歸檔檔案my_ubuntu_v3.tar建立映象,命名為runoob/ubuntu:v4
runoob@runoob:~$ docker import my_ubuntu_v3.tar runoob/ubuntu:v4
sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39
runoob@runoob:~$ docker images runoob/ubuntu:v4
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v4 63ce4a6d6bc3 20 seconds ago 142.1 MB
容器操作
ps
docker ps : 列出容器
語法:
docker ps (-$)
-a, --all 顯示所有容器(預設顯示正在執行)
-n 顯示最後建立的n個容器(包括所有狀態)(預設值-1)
示例:docker ps -n2
-l,--latest 顯示最新建立的容器(包括所有狀態)
-q, --quiet 只顯示數字id
-s, --size 顯示總檔案大小
--no-trunc 不截斷輸出
-f, --filter 根據提供的條件過濾輸出
過濾條件如下:
Filter | Description
---|---
id | 容器的ID
name | 容器的Name
label | 表示鍵或鍵值對的任意字串。表示為<key>或<key>=<value>
exited | 表示容器退出程式碼的整數。只有對所有人有用。
status | created,restarting,running,removing,paused,exited,dead之一
ancestor| 篩選指定映象的容器,例如<image-name>[:<tag>],<image id>, or <image@digest>
before or since | 篩選在給定容器ID或名稱之前或之後建立的容器
volume | 執行已掛載給定卷或繫結掛載的容器的篩選器。
network | 過濾器執行連線到給定網路的容器。
publish or expose | 篩選釋出或公開給定埠的容器,例如<port>[/<proto>] or <startport-endport>/[<proto>]
health | 根據容器的健康檢查狀態過濾容器,例如starting, healthy, unhealthy or none.
isolation | 僅Windows守護程式,例如default, process, or hyperv.
is-task | 篩選服務的“任務”容器。布林選項(true or false)
示例:
docker ps -f name=^'modality'
docker ps --filter name=nginx
docker ps -a --filter exited=0
docker ps --filter status=running
docker ps --filter expose=3306
--format 使用Go模板漂亮地列印容器
過濾條件如下:
Placeholder | Description
---|---
.ID | 容器的ID
.Image | 映象的ID
.Command | 引用命令
.CreatedAt | 建立容器的時間
.RunningFor | 自容器啟動以來的執行時長
.Ports | 暴露的埠
.Status | 容器狀態
.Size | 容器的磁碟大小
.Names | 容器的名稱
.Labels | 分配給容器的所有標籤
.Label | 此容器的特定標籤的值,例如`{{.Label "com.docker.swarm.cpu"}}`
.Mounts | 容器掛載的卷
.Networks | 容器所用的網路名稱
示例:
docker ps --format "{{.ID}}: {{.Names}}: {{.Command}}"
常用監控命令:
查詢最近5個容器
docker ps -a -n=5
監控容器數量
docker ps -a -q | wc -l
正在執行的容器的數量
docker ps -q | wc -l
非執行狀態的容器的數量
docker ps -a | grep -v 'Up ' | grep -v'CONTAINER' | wc -l
inspect
docker inspect : 獲取容器/映象的後設資料。
語法:
docker inspect (-$) NAME|ID [NAME|ID...]
-f 使用給定的Go模板格式化輸出
-s 如果型別是容器,則顯示總檔案大小
--type 為指定型別返回JSON。
例項:
檢視容器重啟次數
docker inspect -f "{{ .RestartCount }}" name
檢視容器最後一次的啟動時間
docker inspect -f "{{ .State.StartedAt }}" name
列出所有埠繫結
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
獲取正在執行的容器mymysql的 IP
runoob@runoob:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
172.17.0.3
注:更多示例可點選上方官網連結檢視
top
docker top :檢視容器中執行的程式資訊,支援 ps 命令引數。
語法:
docker top CONTAINER [ps OPTIONS]
容器執行時不一定有/bin/bash終端來互動執行top命令,而且容器還不一定有top命令,可以使用docker top來實現檢視container中正在執行的程式。
例項:
檢視容器mymysql的程式資訊。
runoob@runoob:~/mysql$ docker top mymysql
UID PID PPID C STIME TTY TIME CMD
999 40347 40331 18 00:58 ? 00:00:02 mysqld
檢視所有執行容器的程式資訊。
for i in
docker ps |grep Up|awk '{print $1}'
;do echo &&docker top $i; done
attach
docker attach :連線到正在執行中的容器,並將本地標準輸入、輸出和錯誤流附加到正在執行的容器中(個人理解,既實現連結後使用命令控制容器)
語法:
docker attach (-$) CONTAINER
--detach-keys 覆蓋用於分離容器的鍵序列
--no-stdin 不附加STDIN
--sig-proxy 代理所有接收到的程式訊號(預設為true)
要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不會關閉容器。
例項:
容器mynginx將訪問日誌指到標準輸出,連線到容器檢視訪問資訊。
runoob@runoob:~$ docker attach --sig-proxy=false mynginx
192.168.239.1 - - [10/Jul/2016:16:54:26 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
注:(使用exit退出後容器也跟著停止執行), 更多示例和詳細講解可點選上方官網連結或是用--help命令檢視
events
docker events : 從伺服器獲取實時事件
語法:
docker events (-$)
-f,--filter 根據條件過濾事件
--format 使用給定的Go模板格式化輸出
--since 從指定的時間戳後顯示所有事件
--until 流水時間顯示到指定的時間為止
例項:
顯示docker 2016年7月1日後的所有事件。
docker events --since="1467302400"
runoob@runoob:~/mysql$ docker events --since="1467302400"
2016-07-08T19:44:54.501277677+08:00 network connect 66f958fd13dc4314ad20034e576d5c5eba72e0849dcc38ad9e8436314a4149d4 (container=b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64, name=bridge, type=bridge)
2016-07-08T19:44:54.723876221+08:00 container start b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64 (image=nginx:latest, name=elegant_albattani)
顯示docker 映象為mysql:5.6 2016年7月1日後的相關事件。
docker events -f "image"="mysql:5.6" --since="1467302400"
runoob@runoob:~/mysql$ docker events -f "image"="mysql:5.6" --since="1467302400"
2016-07-11T00:38:53.975174837+08:00 container start 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)
2016-07-11T00:51:17.022572452+08:00 container kill 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql, signal=9)
注:更多示例和詳細講解可點選上方官網連結或是用--help命令檢視
logs
docker logs : 獲取容器的日誌
docker logs (-$) name
--details 顯示提供給日誌的額外細節
-f,--follow 跟蹤日誌輸出
--since 顯示從時間戳(例如2013-01-02T13:23:37)或相對(例如42分鐘42秒)之後的日誌
-t,--timestamps 顯示時間戳 類似 tail -f
--tail 在日誌的末尾輸出指定行數日誌(預設所有日誌)
--until 顯示在時間戳(例如2013-01-02T13:23:37)或相對(例如42分鐘42秒)之前的日誌
例項:
檢視容器mynginx從2016年7月1日後的最新10條日誌
docker logs --since="2016-07-01" --tail=10 mynginx
實時檢視docker容器日誌
docker logs -f -t --tail 行數 容器名
實時檢視docker容器名為s12的最後10行日誌
docker logs -f -t --tail 10 s12
注:更多示例和詳細講解可點選上方官網連結或是用--help命令檢視
wait
docker wait : 阻塞執行直到容器停止,然後列印出它的退出程式碼。
語法:
docker wait (-$) CONTAINER [CONTAINER...]
例項
docker wait CONTAINER
export
docker export :將檔案系統作為一個tar歸檔檔案匯出到STDOUT
語法:
docker export [OPTIONS] CONTAINER
-o,--output 將輸入內容寫到檔案。
例項:
例項1:將容器名為red_panda的容器儲存為tar檔案
docker export red_panda > latest.tar
或者
docker export --output="latest.tar" red_panda
例項2:將id為a404c6c174a2的容器按日期儲存為tar檔案。
runoob@runoob:~$ docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
runoob@runoob:~$ ls mysql-`date +%Y%m%d`.tar
mysql-20160711.tar
port
docker port :列出指定的容器的埠對映,或者查詢將PRIVATE_PORT NAT到面向公眾的埠。
語法:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
例項:
檢視容器ID為cbe08f2a4406的埠對映情況。
runoob@runoob:~$ docker port cbe08f2a4406
3306/tcp -> 0.0.0.0:13306
stats
docker stats : 顯示容器資源使用情況統計資訊的實時流
語法:
docker stats (-$) [CONTAINER...]
-a,--all 顯示所有容器(預設顯示剛剛執行)
--format 使用Go模板的漂亮列印影象
--no-stream 禁用流式統計資訊並僅提取第一個結果
--no-trunc 不要截斷輸出
例項:
執行docker stats在針對Linux後臺程式執行的所有容器。
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b95a83497c91 awesome_brattain 0.28% 5.629MiB / 1.952GiB 0.28% 916B / 0B 147kB / 0B 9
67b2525d8ad1 foobar 0.00% 1.727MiB / 1.952GiB 0.09% 2.48kB / 0B 4.11MB / 0B 2
e5c383697914 test-1951.1.kay7x1lh1twk9c0oig50sd5tr 0.00% 196KiB / 1.952GiB 0.01% 71.2kB / 0B 770kB / 0B 1
4bda148efbc0 random.1.vnc8on831idyr42slu578u3cr 0.00% 1.672MiB / 1.952GiB 0.08%
如果未使用指定格式字串--format,則會顯示以下列。
列名 | 描述 |
---|---|
CONTAINER ID 和 Name |
容器的ID和名稱 |
CPU % 和 MEM % |
容器正在使用的主機CPU和記憶體的百分比 |
MEM USAGE / LIMIT |
容器正在使用的總記憶體,以及允許使用的記憶體總量 |
NET I/O |
容器通過其網路介面傳送和接收的資料量 |
BLOCK I/O |
容器從主機上的塊裝置讀取和寫入的資料量 |
PIDs |
容器建立的程式或執行緒數 |
注:更多示例可點選上方官網連結檢視
容器生命週期管理
run
docker run :建立一個新的容器並執行一個命令
注:由於該命令的選項高達99項,所以本節只選用了常用的一些選項,詳情可參見官網
語法:
docker run (-$) IMAGE [COMMAND] [ARG...]
-a, --attach=[] 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項,用於登入容器(必須是以docker run -d啟動的容器)
-d 後臺執行容器,並返回容器ID,預設為false
-i 開啟STDIN,以互動模式執行容器,通常與 -t 同時使用,預設為false
-P, --publish-all=false 隨機埠對映,容器內部埠隨機對映到主機的各埠
-p, --publish=[] 指定容器暴露的埠,格式為:主機(宿主)埠:容器埠
-t,--tty 為容器重新分配一個偽輸入終端TTY,從而可以支援終端登入,通常與 -i 同時使用預設為false
--name="" 指定容器名字,links特性需要使用名字
-u, --user="" 指定容器的使用者
-w 指定容器的工作目錄
-c 設定容器CPU權重,在CPU共享場景使用
-e, --env=[] 指定環境變數,容器中可以使用該環境變數
-m 指定容器的記憶體上限
-h 指定容器的主機名
-v, --volume=[] 給容器掛載儲存卷,掛載到容器的某個目錄
--volumes-from=[] 給容器掛載其他容器上的卷,掛載到容器的某個目錄
--cap-add=[] 新增許可權
--cap-drop=[] 刪除許可權
--cidfile="" 執行容器後,在指定檔案中寫入容器PID值,監控系統用法
--cpuset="" 設定容器可使用哪些CPU,此引數可以用來容器獨佔CPU
--device=[] 新增主機裝置給容器,相當於裝置直通
--dns=[] 指定容器的dns伺服器
--dns-search=[] 指定容器的dns搜尋域名,寫入到容器/etc/resolv.conf檔案
--entrypoint="" 覆蓋image的入口點
--env-file=[] 指定環境變數檔案,檔案格式為每行一個環境變數
--expose=[] 開放一個埠或一組埠,即修改映象的暴露埠
--link=[] 指定容器間的關聯,使其連結到另一個容器,從而使用其他容器的IP、env等資訊
--lxc-conf=[] 指定容器的配置檔案,只有在指定--exec-driver=lxc時使用
--net="bridge" 指定容器的網路連線型別:
bridge 使用docker daemon指定的網橋
host //容器使用主機的網路
container:NAME_or_ID >//使用其他容器的網路共享IP和PORT等網路資源
none 容器使用自己的網路(類似--net=bridge)
--privileged=false 指定容器是否為特權容器,特權容器擁有所有的許可權
--restart="no" 指定容器停止後的重啟策略:
no: 容器退出時不重啟(預設策略)
on-failure: 容器故障退出(返回值非零)時重啟
on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
always: 容器退出時總是重啟
unless-stopped: 在容器退出時總是重啟容器,但是不考慮在Docker守護程式啟動時就已經停止了的容器
--rm=false 指定容器停止後自動刪除容器(不支援以docker run -d啟動的容器)
--sig-proxy=true 設定由代理接受並處理訊號,SIGCHLD,SIGSTOP和SIGKILL不代
擴充套件說明: 容器的退出狀態碼
docker run的退出狀態碼如下:
- 0,表示正常退出
- 非0,表示異常退出(退出狀態碼採用chroot標準)
- 125,Docker守護程式本身的錯誤
- 126,容器啟動後,要執行的預設命令無法呼叫
- 127,容器啟動後,要執行的預設命令不存在
- 其他命令狀態碼,容器啟動後正常執行命令,退出命令時該命令的返回狀態碼作為容器的退出狀態碼
例項:
使用docker映象nginx:latest以後臺模式啟動一個容器,並將容器命名為mynginx。
docker run --name mynginx -d nginx:latest
使用映象nginx:latest以後臺模式啟動一個容器,並將容器的80埠對映到主機隨機埠。
docker run -P -d nginx:latest
使用映象 nginx:latest,以後臺模式啟動一個容器,將容器的 80 埠對映到主機的 80 埠,主機的目錄 /data 對映到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
繫結容器的 8080 埠,並將其對映到本地主機 127.0.0.1 的 80 埠上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用映象nginx:latest以互動模式啟動一個容器,在容器內執行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
start/stop/restart
docker start :啟動一個或多個已經被停止的容器
docker stop :停止一個執行中的容器
docker restart :重啟容器
語法:
docker start (-$) CONTAINER [CONTAINER...]
--attach , -a 連線STDOUT / STDERR並轉發訊號
--checkpoint 從此檢查點恢復
--checkpoint-dir 使用自定義檢查點儲存目錄
--detach-keys 覆蓋用於分離容器的鍵序列
--interactive , -i 附上容器的STDIN
docker stop (-$) CONTAINER [CONTAINER...]
--time , -t 在殺死之前等待停止的秒數,預設10秒
docker restart (-$) CONTAINER [CONTAINER...]
--time , -t 在殺死之前等待停止的秒數,預設10秒
kill
docker kill :殺掉一個執行中的容器。
語法:
docker kill (-$) CONTAINER [CONTAINER...]
-s,--signal 向容器傳送一個訊號, 強制中斷 -s代表指定SIGINT訊號型別,預設“kill”
例項:
殺掉執行中的容器mynginx
runoob@runoob:~$ docker kill -s KILL mynginx
mynginx
殺死所有正在執行的容器
docker kill $( docker ps -p -a )
注:此小節的-s牽扯到Linux的訊號,如需瞭解詳情,可點選此處檢視
rm
docker rm :刪除一個或多少容器
語法:
docker rm (-$) CONTAINER [CONTAINER...]
-f --force=false 通過SIGKILL訊號強制刪除一個執行中的容器
-l --link=false 移除容器間的網路連線,而非容器本身,保留底層容器
-v --volumes=false 刪除與容器關聯的卷
例項:
移除容器nginx01對容器db01的連線,連線名db
docker rm -l db
刪除容器nginx01,並刪除容器掛載的資料卷
docker rm -v nginx01
強制刪除所有容器
docker rm -f
'docker ps -a -q'
刪除非執行的容器
docker rm
docker ps -a -f status=exited
刪除異常退出的容器
docker rm
docker ps -a | grep Exited | awk'{print $1}'
一條命令實現停用並刪除容器
docker stop $(docker ps -q) & docker rm $( docker ps -aq )
批量刪除最近5個容器
docker rm $(docker ps -aq -n=5)
移除指定映象建立的容器
docker rm $(docker ps -a | grep "watch-the-fun/jdk:8" | awk '{print $1}')
命令拆分解釋:
| 為管道符,主要作用為將前一命令的執行結果做為引數傳入後一個命令
docker ps -a 查詢所有建立的容器(包含未啟動)
grep "watch-the-fun/jdk:8" 過濾映象名為watch-the-fun/jdk:8的記錄
awk '{print $1}' 按行查詢記錄中的第1列,該列為容器的id
$() 用作命令替換
注:更多示例和詳細講解可點選上方官網連結或是用--help命令檢視
pause/unpause
docker pause :暫停容器中所有的程式。
docker unpause :恢復容器中所有的程式。
語法:
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]
例項:
暫停資料庫容器db01提供服務
docker pause db01
恢復資料庫容器db01提供服務
docker unpause db01
create
docker create :建立一個新的容器但不啟動它
用法同 docker run
語法:
docker create (-$) IMAGE [COMMAND] [ARG...]
語法同 docker run
例項:
使用docker映象nginx:latest建立一個容器,並將容器命名為myrunoob
runoob@runoob:~$ docker create --name myrunoob nginx:latest
09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
exec
docker exec :在執行的容器中執行命令
語法:
docker exec (-$) CONTAINER COMMAND [ARG...]
-d,--detach 分離模式: 在後臺執行命令
-i,--interactive 即使沒有連線,也要保持STDIN開啟
-t,--tty 分配一個偽終端(TTY)
--detach-keys 覆蓋用於分離容器的鍵序列
-e,--env 設定環境變數
--privileged 為命令提供擴充套件許可權
--user , -u 使用者名稱或UID(格式:<name | uid> [:<group | gid>])
-w,--workdir 容器內的工作目錄
例項:
例項1:在容器 mynginx 中以互動模式執行容器內 /root/runoob.sh 指令碼:
runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
http://www.runoob.com/
例項2:在容器 mynginx 中開啟一個互動模式的終端:
runoob@runoob:~$ docker exec -it mynginx /bin/bash
root@b1a0703e41e7:/#
注:也可以通過 docker ps -a 命令檢視已經在執行的容器,然後使用容器 ID 進入容器
例項3:第一列的 9df70f9a0714 就是容器 ID。
通過 exec 命令對指定的容器執行 bash:
# docker exec -it 9df70f9a0714 /bin/bash
注:該命令是以互動式的方式進入某個容器(使用exit退出後容器不停止執行),更多詳解參見官網
update
docker update : 更新一個或多個容器的配置
語法:
docker update (-$) CONTAINER [CONTAINER...]
--blkio-weight 阻止IO(相對權重),介於10和1000之間,或0阻止(預設為0)
--cpu-period 限制CPU CFS(完全公平計劃程式)期間
--cpu-quota 限制CPU CFS(完全公平排程程式)配額
--cpu-rt-period 限制CPU實時週期(以微秒為單位)
--cpu-rt-runtime 以微秒為單位限制CPU實時執行時間
--cpu-shares , -c CPU份額(相對權重)
--cpus CPU數量
--cpuset-cpus 允許執行的CPU(0-3,0,1)
--cpuset-mems 允許執行的MEM(0-3,0,1)
--kernel-memory 核心記憶體限制
--memory , -m 記憶體限制
--memory-reservation 記憶體軟限制
--memory-swap 交換限制等於記憶體加交換:' - 1以啟用無限制交換
--restart 重新啟動容器退出時應用的策略
例項:
更新容器的cpu-shares
要將容器的cpu-shares限制為512,請首先標識容器名稱或ID。您可以使用它docker ps來查詢這些值。您還可以使用從docker run命令返回的ID 。然後,執行以下操作:
docker update --cpu-shares 512 abebf7571666
使用cpu-shares和記憶體更新容器
要為多個容器更新多個資源配置:
docker update --cpu-shares 512 -m 300M abebf7571666 hopeful_morse
注:更多示例可點選上方官網連結檢視
容器rootfs命令
commit
docker commit :從容器建立一個新的映象。
語法:
docker commit (-$) CONTAINER [REPOSITORY[:TAG]]
-a,--author="" 作者
-c,--change 使用Dockerfile指令來建立映象
-m,--message="" 簡要說明
-p,--pause=true 在提交期間暫停容器
例項:
將容器a404c6c174a2 儲存為新的映象,並新增提交人資訊和說明資訊。
runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB
cp
docker cp :用於容器與主機之間的資料拷貝。
語法:
docker cp (-$) CONTAINER:SRC_PATH DEST_PATH|-
docker cp (-$) SRC_PATH|- CONTAINER:DEST_PATH
-a,--archive 存檔模式(複製所有uid / gid資訊)
-L,--follow-link 保持源目標中的連結
例項:
例項1:將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下
docker cp /www/runoob 96f7f14e99ab:/www/
例項2:將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重新命名為www
docker cp /www/runoob 96f7f14e99ab:/www
例項3:將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中
docker cp 96f7f14e99ab:/www /tmp/
diff
docker diff : 檢查容器檔案系統上檔案或目錄的更改
語法:
docker diff CONTAINER
擴充套件說明
自容器建立以來,列出容器檔案系統中已更改的檔案和目錄。跟蹤三種不同型別的變化:
符號 | 描述 |
---|---|
A | 新增了檔案或目錄 |
D | 檔案或目錄已刪除 |
C | 檔案或目錄已更改 |
例項:
檢視容器mymysql的檔案結構更改
runoob@runoob:~$ docker diff mymysql
A /logs
A /mysql_data
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
C /tmp
rename
docker rename : 重新命名一個容器
語法:
docker rename CONTAINER NEW_NAME
docker管理命令
Docker除了提供上面的使用命令外,還提供了一系列的管理命令,分別如下
builder 管理構建
config 管理Docker配置
container 管理容器
engine 管理docker引擎
image 管理映象
network 管理網路
node 管理Swarm節點
plugin 管理外掛
secret 管理Docker secrets
service 管理服務
stack 管理Docker堆疊
swarm 管理Swarm叢集
system 檢視系統資訊
trust 管理對Docker映象的信任
volume 管理卷
我們不必對上述的這些所有命令都瞭如指掌,因為那太浪費時間了,但我們可以知道他們都有什麼作用,在需要時去官網檢視就可以了
下面列出了一下我們常用到的管理命令:
檢視網路列表
docker network ls
檢視swarm service列表
docker service ls
刪除所有未被 tag 標記和未被容器使用的映象
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
刪除所有未被容器使用的映象:
docker image prune -a
刪除所有停止執行的容器:
docker container prune
刪除所有未被掛載的卷:
docker volume prune
刪除所有網路:
docker network prune
刪除 docker 所有資源:
docker system prune
修剪映象:
docker system prune -a
Docker選項
docker (-$)
--api-enable-cors=false 在遠端API中啟用CORS 頭
-b, --bridge="" 橋接網路 使用“none” 禁用容器網路
--bip="" 網橋模式
-d, --daemon=false 守護者模式
-D, --debug=false debug 模式
--dns=[] 強制 docker 使用指定 dns 伺服器
--dns-search=[] 強制 docker 使用指定 dns 搜尋域
-e, --exec-driver="native" 強制 docker 執行時使用指定執行驅動器
--fixed-cidr="" 固定IP的IPv4子網(例:10.20.0.0/16)必須鑲套在橋子網中(由-b or --bip定義)
-G, --group="docker" 當在守護模式中執行時,組指向-H指定的unix套接字。使用""禁用組設定。
-g, --graph="/var/lib/docker" 容器執行的根目錄路徑
-H, --host=[] 套接字繫結到守護模式。使用一個或多個tcp://主機:埠,unix:///路徑/到/套,fd://*或fd://socketfd.
--icc=true inter-container跨容器通訊
--insecure-registry=[] 使用指定的登錄檔啟用不安全通訊(沒有HTTPS的證照驗證和啟用HTTP回退)(例如,localhost:5000或10.20.0 /16)
--ip="0.0.0.0" 繫結容器埠時使用的IP地址
--ip-forward=true 使用net.ipv4.ip_forward轉發
--ip-masq=true 使IP偽裝成橋的IP範圍
--iptables=true 啟用Docker新增iptables規則
--mtu=0 設定容器網路mtu
-p, --pidfile="/var/run/docker.pid" 指定守護程式pid檔案位置
--registry-mirror=[] 指定一個首選的映象倉庫(加速地址)
-s, --storage-driver="" 強制 docker 執行時使用指定儲存驅動
--selinux-enabled=false 開啟 selinux 支援
--storage-opt=[] 設定儲存驅動選項
--tls=false 開啟 tls
--tlscacert="/root/.docker/ca.pem" 只信任提供CA簽名的證照
--tlscert="/root/.docker/cert.pem" tls 證照檔案位置
--tlskey="/root/.docker/key.pem" tls key 檔案位置
--tlsverify=false 使用 tls 並確認遠端控制主機
-v, --version=false 輸出 docker 版本資訊