溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker命令有哪些

發(fā)布時間:2021-07-01 10:16:09 來源:億速云 閱讀:108 作者:小新 欄目:服務(wù)器

這篇文章給大家分享的是有關(guān)Docker命令有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

簡介

Docker的命令分為使用命令和管理命令,而本文對Docker的使用命令和管理命令進(jìn)行了匯總和樣例提示,以便于他人學(xué)習(xí)和本人回顧使用。

Docker不僅提供了在各個環(huán)節(jié)下使用的命令,還提供了DockerAPI供我們使用Http來和Docker進(jìn)行交互,從而開發(fā)我們自己的Docker。

由于命令太多,下面給出一個大致的清單供大家對所有命令有一個初步了解,然后就是哪里不會點(diǎn)哪里。

管理命令:
 container 管理容器
 image  管理鏡像
 network 管理網(wǎng)絡(luò)
 node  管理Swarm節(jié)點(diǎn)
 plugin 管理插件
 secret 管理Docker secrets
 service 管理服務(wù)
 stack  管理Docker stacks
 swarm  管理Swarm集群
 system 查看系統(tǒng)信息
 volume 管理卷
 
 如:docker container ls 顯示所有容器
 
普通命令:
 
 // 開發(fā)應(yīng)該熟練掌握的:
 images 查看鏡像列表
 rmi  刪除鏡像
 save  將指定鏡像保存成 tar 歸檔文件
 load  從存檔或者STDIN加載鏡像
 build  從一個DockerFile構(gòu)建鏡像
 commit 從容器創(chuàng)建一個鏡像
 
 create 創(chuàng)建一個容器
 run  創(chuàng)建一個新的容器并運(yùn)行一個命令
 rename 重命名容器
 start  啟動容器
 stop  停止容器
 restart 重啟容器
 rm  刪除容器
 logs  獲取一個容器的日志
 exec  在正在運(yùn)行的容器中運(yùn)行命令
 cp  從容器和主機(jī)文件系統(tǒng)之間拷貝文件 
 ps  查看容器列表
 
 
 // 運(yùn)維應(yīng)該熟練掌握的: 
 login  登陸docker鏡像倉庫
 logout 退出docker鏡像倉庫
 search 從Docker Hub搜索鏡像
 pull  從鏡像倉庫拉取鏡像
 push  將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
 tag  標(biāo)記本地鏡像,將其歸入某一倉庫
 export 將容器的文件系統(tǒng)導(dǎo)出為tar存檔
 import 從歸檔文件中創(chuàng)建鏡像
 
 info  顯示系統(tǒng)范圍的信息
 version 顯示Docker的版本信息
 stats  顯示(實(shí)時)容器資源使用情況的統(tǒng)計信息
 inspect 顯示Docker對象的低級信息(查看對象詳情)
 diff  顯示容器文件系統(tǒng)上的更改(查看容器變化)
 events 顯示從服務(wù)器獲取實(shí)時事件(可查看docker的改動)
 port  顯示端口映射或容器的特定映射列表(端口查看)
 top  顯示一個容器中運(yùn)行的進(jìn)程(查看進(jìn)程)
 history 顯示鏡像的歷史記錄
 
 attach 進(jìn)入一個運(yùn)行的容器
 pause  暫停一個或多個容器中的所有進(jìn)程
 unpause 恢復(fù)容器中所有的進(jìn)程
 kill  kill運(yùn)行中的容器
 wait  阻塞直到容器停止,然后打印退出代碼
 
 update 更新容器配置

鏡像倉庫

login

dockerlogin : 登陸到一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認(rèn)為官方倉庫 Docker Hub

docker logout : 登出一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認(rèn)為官方倉庫 Docker Hub

語法:

docker login/logout (-$) [SERVER]

    -u                          登陸的用戶名

    -p                          登陸的密碼

實(shí)例:

登陸到Docker Hub

docker login -u 用戶名 -p 密碼

登出Docker Hub

docker logout

pull

dockerpull : 從鏡像倉庫中拉取或者更新指定鏡像

語法:

docker pull (-$) NAME[:TAG|@DIGEST]

    -a,all                      拉取所有 tagged 鏡像

    --disable-content-trust     忽略鏡像的校驗(yàn),默認(rèn)開啟

實(shí)例:

從Docker Hub下載java最新版鏡像。

docker pull java

從Docker Hub下載REPOSITORY為java的所有鏡像。

docker pull -a java

push

docker push : 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫

語法:

docker push (-$) NAME[:TAG]

    --disable-content-trust     忽略鏡像的校驗(yàn),默認(rèn)開啟

實(shí)例:

上傳本地鏡像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                          列出收藏數(shù)不小于指定值的鏡像。

實(shí)例:

從Docker Hub查找所有鏡像名包含java,并且收藏數(shù)大于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                          列出本地所有的鏡像(含中間映像層,默認(rèn)情況下,過濾掉中間映像層)

    --digests                   顯示鏡像的摘要信息

    -f                          顯示滿足條件的鏡像

    --format                    指定返回值的模板文件

    --no-trunc                  顯示完整的鏡像信息

    -q                          只顯示鏡像ID。

實(shí)例:

查詢出無用的鏡象

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              強(qiáng)制刪除鏡像
    --no-prune           不移除該鏡像的過程鏡像,默認(rèn)移除

實(shí)例:

刪除所有鏡像

docker rmi $(docker images -q)  

強(qiáng)制刪除鏡像名稱中包含"doss-api"的鏡像

docker rmi --force $(docker images | grep doss-api | awk '{print $3}')

批量刪除無用鏡象(三種方式都可以,想強(qiáng)制刪除可在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 : 標(biāo)記本地鏡像,將其歸入某一倉庫。

語法:

docker tag (-$) IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

實(shí)例:

將鏡像ubuntu:15.10標(biāo)記為 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 創(chuàng)建鏡像。

語法:

docker build (-$) PATH | URL | -

    --build-arg=[]              設(shè)置鏡像創(chuàng)建時的變量

    --cpu-shares                設(shè)置 cpu 使用權(quán)重

    --cpu-period                限制 CPU CFS周期

    --cpu-quota                 限制 CPU CFS配額

    --cpuset-cpus               指定使用的CPU id

    --cpuset-mems               指定使用的內(nèi)存 id

    --disable-content-trust     忽略校驗(yàn),默認(rèn)開啟

    -f                          指定要使用的Dockerfile路徑

    --force-rm                  設(shè)置鏡像過程中刪除中間容器

    --isolation                 使用容器隔離技術(shù)

    --label=[]                  設(shè)置鏡像使用的元數(shù)據(jù)

    -m                          設(shè)置內(nèi)存最大值

    --memory-swap               設(shè)置Swap的最大值為內(nèi)存+swap,"-1"表示不限swap

    --no-cache                  創(chuàng)建鏡像的過程不使用緩存

    --pull                      嘗試去更新鏡像的新版本

    --quiet, -q                 安靜模式,成功后只輸出鏡像 ID

    --rm                        設(shè)置鏡像成功后刪除中間容器

    --shm-size                  設(shè)置/dev/shm的大小,默認(rèn)值是64M

    --ulimit                    Ulimit配置。

    --tag, -t                   鏡像的名字及標(biāo)簽,通常 name:tag 或者 name 格式;可以在一次構(gòu)建中為一個鏡像設(shè)置多個標(biāo)簽。

    --network                   默認(rèn) default。在構(gòu)建期間設(shè)置RUN指令的網(wǎng)絡(luò)模式

實(shí)例:

使用當(dāng)前目錄的 Dockerfile 創(chuàng)建鏡像,標(biāo)簽為 runoob/ubuntu:v1。

docker build -t runoob/ubuntu:v1 .

使用URL github.com/creack/docker-firefox 的 Dockerfile 創(chuàng)建鏡像。

docker build github.com/creack/docker-firefox

也可以通過 -f Dockerfile 文件的位置:

docker build -f /path/to/a/Dockerfile .

在 Docker 守護(hù)進(jìn)程執(zhí)行 Dockerfile 中的指令前,首先會對 Dockerfile 進(jìn)行語法檢查,有語法錯誤時會返回:

docker build -t test/myapp .
 Sending build context to Docker daemon 2.048 kB
 Error response from daemon: Unknown instruction: RUNCMD

history

docker history : 查看指定鏡像的創(chuàng)建歷史。

語法:

docker history (-$) IMAGE

    -H              以可讀的格式打印鏡像大小和日期,默認(rèn)為true;

    --no-trunc      顯示完整的提交記錄;

    -q              僅列出提交記錄ID。

save

docker save : 將指定鏡像保存成 tar 歸檔文件。

語法:

docker save (-$) IMAGE [IMAGE...]

    -o              輸出到的文件。

實(shí)例:

導(dǎ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 : 導(dǎo)入使用 docker save 命令導(dǎo)出的鏡像。

語法:

docker load (-$)

    -i              指定導(dǎo)出的文件。

    -q              精簡輸出信息。

實(shí)例

導(dǎo)入鏡像

docker load -i ubuntu.tar
docker load < ubuntu.tar
docker load < /root/mytomcat7.tar.gz  

import

docker import : 從歸檔文件中創(chuàng)建鏡像。

語法:

docker import (-$) file|URL|- [REPOSITORY[:TAG]]

    -c,--change     將Dockerfile指令應(yīng)用于創(chuàng)建的映像

    -m,--message    為導(dǎo)入的鏡像設(shè)置說明信息
      --platform      如果服務(wù)器具有多平臺功能,則設(shè)置平臺

實(shí)例

從鏡像歸檔文件my_ubuntu_v3.tar創(chuàng)建鏡像,命名為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

dockerps : 列出容器

語法:

docker ps (-$)

    -a, --all       顯示所有容器(默認(rèn)顯示正在運(yùn)行)
   
    -n              顯示最后創(chuàng)建的n個容器(包括所有狀態(tài))(默認(rèn)值-1)
                    示例:docker ps -n2
           
    -l,--latest     顯示最新創(chuàng)建的容器(包括所有狀態(tài))
   
    -q, --quiet     只顯示數(shù)字id   
   
    -s, --size      顯示總文件大小
   
    --no-trunc      不截斷輸出
   
    -f, --filter    根據(jù)提供的條件過濾輸出
                    過濾條件如下:
                    Filter | Description
                    ---|---
                    id      | 容器的ID
                    name    | 容器的Name
                    label   | 表示鍵或鍵值對的任意字符串。表示為<key>或<key>=<value>
                    exited  | 表示容器退出代碼的整數(shù)。只有對所有人有用。
                    status  | created,restarting,running,removing,paused,exited,dead之一
                    ancestor| 篩選指定鏡像的容器,例如<image-name>[:<tag>],<image id>, or <image@digest>
                    before or since | 篩選在給定容器ID或名稱之前或之后創(chuàng)建的容器
                    volume  | 運(yùn)行已掛載給定卷或綁定掛載的容器的篩選器。
                    network | 過濾器運(yùn)行連接到給定網(wǎng)絡(luò)的容器。
                    publish or expose | 篩選發(fā)布或公開給定端口的容器,例如<port>[/<proto>] or <startport-endport>/[<proto>]
                    health  | 根據(jù)容器的健康檢查狀態(tài)過濾容器,例如starting, healthy, unhealthy or none.
                    isolation | 僅Windows守護(hù)進(jìn)程,例如default, process, or hyperv.
                    is-task | 篩選服務(wù)的“任務(wù)”容器。布爾選項(xiàng)(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  | 創(chuàng)建容器的時間
                    .RunningFor | 自容器啟動以來的運(yùn)行時長
                    .Ports      | 暴露的端口
                    .Status     | 容器狀態(tài)
                    .Size       | 容器的磁盤大小
                    .Names      | 容器的名稱
                    .Labels     | 分配給容器的所有標(biāo)簽
                    .Label      | 此容器的特定標(biāo)簽的值,例如`{{.Label "com.docker.swarm.cpu"}}`
                    .Mounts     | 容器掛載的卷
                    .Networks   | 容器所用的網(wǎng)絡(luò)名稱

示例:

docker ps --format "{{.ID}}: {{.Names}}: {{.Command}}"

常用監(jiān)控命令:

查詢最近5個容器

docker ps -a -n=5

監(jiān)控容器數(shù)量

docker ps -a -q | wc -l

正在運(yùn)行的容器的數(shù)量

docker ps -q | wc -l

非運(yùn)行狀態(tài)的容器的數(shù)量

docker ps -a | grep -v 'Up ' | grep -v'CONTAINER' | wc -l

inspect

docker inspect : 獲取容器/鏡像的元數(shù)據(jù)。

語法:

docker inspect (-$) NAME|ID [NAME|ID...]

    -f                      使用給定的Go模板格式化輸出

    -s                      如果類型是容器,則顯示總文件大小

    --type                  為指定類型返回JSON。

實(shí)例:

查看容器重啟次數(shù)

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

獲取正在運(yùn)行的容器mymysql的 IP

runoob@runoob:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
172.17.0.3

注:更多示例可點(diǎn)擊上方官網(wǎng)鏈接查看

top

docker top :查看容器中運(yùn)行的進(jìn)程信息,支持 ps 命令參數(shù)。

語法:

docker top CONTAINER [ps OPTIONS]

容器運(yùn)行時不一定有/bin/bash終端來交互執(zhí)行top命令,而且容器還不一定有top命令,可以使用docker top來實(shí)現(xiàn)查看container中正在運(yùn)行的進(jìn)程。

實(shí)例:

查看容器mymysql的進(jìn)程信息。

runoob@runoob:~/mysql$ docker top mymysql
UID PID PPID C  STIME TTY TIME  CMD
999 40347 40331 18  00:58 ? 00:00:02 mysqld

查看所有運(yùn)行容器的進(jìn)程信息。

for i in docker ps |grep Up|awk '{print $1}';do echo  &&docker top $i; done

attach

docker attach :連接到正在運(yùn)行中的容器,并將本地標(biāo)準(zhǔn)輸入、輸出和錯誤流附加到正在運(yùn)行的容器中(個人理解,既實(shí)現(xiàn)鏈接后使用命令控制容器)

語法:

docker attach (-$) CONTAINER

    --detach-keys                   覆蓋用于分離容器的鍵序列
    --no-stdin                      不附加STDIN
    --sig-proxy                     代理所有接收到的進(jìn)程信號(默認(rèn)為true)

要attach上去的容器必須正在運(yùn)行,可以同時連接上同一個container來共享屏幕(與screen命令的attach類似)。

官方文檔中說attach后可以通過CTRL-C來detach,但實(shí)際上經(jīng)過我的測試,如果container當(dāng)前在運(yùn)行bash,CTRL-C自然是當(dāng)前行的輸入,沒有退出;如果container當(dāng)前正在前臺運(yùn)行進(jìn)程,如輸出nginx的access.log日志,CTRL-C不僅會導(dǎo)致退出容器,而且還stop了。這不是我們想要的,detach的意思按理應(yīng)該是脫離容器終端,但容器依然運(yùn)行。好在attach是可以帶上--sig-proxy=false來確保CTRL-D或CTRL-C不會關(guān)閉容器。

實(shí)例:

容器mynginx將訪問日志指到標(biāo)準(zhǔn)輸出,連接到容器查看訪問信息。

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退出后容器也跟著停止運(yùn)行), 更多示例和詳細(xì)講解可點(diǎn)擊上方官網(wǎng)鏈接或是用--help命令查看

events

docker events : 從服務(wù)器獲取實(shí)時事件

語法:

docker events (-$)

    -f,--filter                 根據(jù)條件過濾事件

    --format                    使用給定的Go模板格式化輸出

    --since                     從指定的時間戳后顯示所有事件

    --until                     流水時間顯示到指定的時間為止

實(shí)例:

顯示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日后的相關(guān)事件。

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)

注:更多示例和詳細(xì)講解可點(diǎn)擊上方官網(wǎng)鏈接或是用--help命令查看

logs

docker logs : 獲取容器的日志

docker logs (-$) name  

    --details               顯示提供給日志的額外細(xì)節(jié)
    -f,--follow             跟蹤日志輸出  
    --since                 顯示從時間戳(例如2013-01-02T13:23:37)或相對(例如42分鐘42秒)之后的日志

    -t,--timestamps        顯示時間戳 類似 tail -f

    --tail                  在日志的末尾輸出指定行數(shù)日志(默認(rèn)所有日志)    
    --until                 顯示在時間戳(例如2013-01-02T13:23:37)或相對(例如42分鐘42秒)之前的日志

實(shí)例:

查看容器mynginx從2016年7月1日后的最新10條日志

docker logs --since="2016-07-01" --tail=10 mynginx

實(shí)時查看docker容器日志

docker logs -f -t --tail 行數(shù) 容器名

實(shí)時查看docker容器名為s12的最后10行日志

docker logs -f -t --tail 10 s12

注:更多示例和詳細(xì)講解可點(diǎn)擊上方官網(wǎng)鏈接或是用--help命令查看

wait

docker wait : 阻塞運(yùn)行直到容器停止,然后打印出它的退出代碼。

語法:

docker wait (-$) CONTAINER [CONTAINER...]

實(shí)例

docker wait CONTAINER

export

docker export :將文件系統(tǒng)作為一個tar歸檔文件導(dǎo)出到STDOUT

語法:

docker export [OPTIONS] CONTAINER

    -o,--output                 將輸入內(nèi)容寫到文件。

實(shí)例:

實(shí)例1:將容器名為red_panda的容器保存為tar文件

docker export red_panda > latest.tar

或者

docker export --output="latest.tar" red_panda

實(shí)例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]]

實(shí)例:

查看容器ID為cbe08f2a4406的端口映射情況。

runoob@runoob:~$ docker port cbe08f2a4406
3306/tcp -> 0.0.0.0:13306

stats

docker stats : 顯示容器資源使用情況統(tǒng)計信息的實(shí)時流

語法:

docker stats (-$) [CONTAINER...]

    -a,--all                顯示所有容器(默認(rèn)顯示剛剛運(yùn)行)   
    --format                使用Go模板的漂亮打印圖像    
    --no-stream             禁用流式統(tǒng)計信息并僅提取第一個結(jié)果    
    --no-trunc              不要截斷輸出

實(shí)例:

運(yùn)行docker stats在針對Linux后臺程序運(yùn)行的所有容器。

$ 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.kay7x1lh2twk9c0oig50sd5tr 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 %容器正在使用的主機(jī)CPU和內(nèi)存的百分比
MEM USAGE / LIMIT容器正在使用的總內(nèi)存,以及允許使用的內(nèi)存總量
NET I/O容器通過其網(wǎng)絡(luò)接口發(fā)送和接收的數(shù)據(jù)量
BLOCK I/O容器從主機(jī)上的塊設(shè)備讀取和寫入的數(shù)據(jù)量
PIDs容器創(chuàng)建的進(jìn)程或線程數(shù)

注:更多示例可點(diǎn)擊上方官網(wǎng)鏈接查看

容器生命周期管理

run

docker run :創(chuàng)建一個新的容器并運(yùn)行一個命令

注:由于該命令的選項(xiàng)高達(dá)99項(xiàng),所以本節(jié)只選用了常用的一些選項(xiàng),詳情可參見官網(wǎng)

語法:

docker run (-$) IMAGE [COMMAND] [ARG...]  

    -a, --attach=[]         指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類型,可選 STDIN/STDOUT/STDERR 三項(xiàng),用于登錄容器(必須是以docker run -d啟動的容器)
      -d                      后臺運(yùn)行容器,并返回容器ID,默認(rèn)為false    

    -i                      打開STDIN,以交互模式運(yùn)行容器,通常與 -t 同時使用,默認(rèn)為false 

    -P, --publish-all=false 隨機(jī)端口映射,容器內(nèi)部端口隨機(jī)映射到主機(jī)的各端口

    -p, --publish=[]        指定容器暴露的端口,格式為:主機(jī)(宿主)端口:容器端口   
    -t,--tty                為容器重新分配一個偽輸入終端TTY,從而可以支持終端登錄,通常與 -i 同時使用默認(rèn)為false       
    --name=""               指定容器名字,links特性需要使用名字       
    -u, --user=""           指定容器的用戶  

    -w                      指定容器的工作目錄 

    -c                      設(shè)置容器CPU權(quán)重,在CPU共享場景使用   

    -e, --env=[]            指定環(huán)境變量,容器中可以使用該環(huán)境變量  

    -m                      指定容器的內(nèi)存上限   

    -h                      指定容器的主機(jī)名   

    -v, --volume=[]         給容器掛載存儲卷,掛載到容器的某個目錄      
    --volumes-from=[]       給容器掛載其他容器上的卷,掛載到容器的某個目錄

    --cap-add=[]            添加權(quán)限

    --cap-drop=[]           刪除權(quán)限

    --cidfile=""            運(yùn)行容器后,在指定文件中寫入容器PID值,監(jiān)控系統(tǒng)用法  

    --cpuset=""             設(shè)置容器可使用哪些CPU,此參數(shù)可以用來容器獨(dú)占CPU  

    --device=[]             添加主機(jī)設(shè)備給容器,相當(dāng)于設(shè)備直通  

    --dns=[]                指定容器的dns服務(wù)器  

    --dns-search=[]         指定容器的dns搜索域名,寫入到容器/etc/resolv.conf文件    
  --entrypoint=""         覆蓋image的入口點(diǎn)  

    --env-file=[]           指定環(huán)境變量文件,文件格式為每行一個環(huán)境變量  

    --expose=[]             開放一個端口或一組端口,即修改鏡像的暴露端口  

    --link=[]               指定容器間的關(guān)聯(lián),使其鏈接到另一個容器,從而使用其他容器的IP、env等信息  

    --lxc-conf=[]           指定容器的配置文件,只有在指定--exec-driver=lxc時使用

    --net="bridge"          指定容器的網(wǎng)絡(luò)連接類型:
   
                            bridge 使用docker daemon指定的網(wǎng)橋
                      
                            host    //容器使用主機(jī)的網(wǎng)絡(luò)
                      
                            container:NAME_or_ID >//使用其他容器的網(wǎng)路共享IP和PORT等網(wǎng)絡(luò)資源
                          
                            none 容器使用自己的網(wǎng)絡(luò)(類似--net=bridge)
       
    --privileged=false      指定容器是否為特權(quán)容器,特權(quán)容器擁有所有的權(quán)限        
    --restart="no"          指定容器停止后的重啟策略:
       
                            no:            容器退出時不重啟(默認(rèn)策略)
                           
                            on-failure:    容器故障退出(返回值非零)時重啟
                                                       
                                on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
                               
                            always:        容器退出時總是重啟
                           
                            unless-stopped: 在容器退出時總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動時就已經(jīng)停止了的容器
                           
    --rm=false              指定容器停止后自動刪除容器(不支持以docker run -d啟動的容器)         
    --sig-proxy=true        設(shè)置由代理接受并處理信號,SIGCHLD,SIGSTOP和SIGKILL不代

擴(kuò)展說明: 容器的退出狀態(tài)碼

  • docker run的退出狀態(tài)碼如下:

  • 0,表示正常退出

    • 非0,表示異常退出(退出狀態(tài)碼采用chroot標(biāo)準(zhǔn)) ?125,Docker守護(hù)進(jìn)程本身的錯誤

    • 126,容器啟動后,要執(zhí)行的默認(rèn)命令無法調(diào)用

    • 127,容器啟動后,要執(zhí)行的默認(rèn)命令不存在

    • 其他命令狀態(tài)碼,容器啟動后正常執(zhí)行命令,退出命令時該命令的返回狀態(tài)碼作為容器的退出狀態(tài)碼

實(shí)例:

使用docker鏡像nginx:latest以后臺模式啟動一個容器,并將容器命名為mynginx。

docker run --name mynginx -d nginx:latest

使用鏡像nginx:latest以后臺模式啟動一個容器,并將容器的80端口映射到主機(jī)隨機(jī)端口。

docker run -P -d nginx:latest

使用鏡像 nginx:latest,以后臺模式啟動一個容器,將容器的 80 端口映射到主機(jī)的 80 端口,主機(jī)的目錄 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

綁定容器的 8080 端口,并將其映射到本地主機(jī) 127.0.0.1 的 80 端口上。

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用鏡像nginx:latest以交互模式啟動一個容器,在容器內(nèi)執(zhí)行/bin/bash命令。

runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#

start/stop/restart

docker start :啟動一個或多個已經(jīng)被停止的容器

docker stop :停止一個運(yùn)行中的容器

docker restart :重啟容器

語法:

docker start (-$) CONTAINER [CONTAINER...]

    --attach , -a               連接STDOUT / STDERR并轉(zhuǎn)發(fā)信號
      --checkpoint                從此檢查點(diǎn)恢復(fù)

    --checkpoint-dir            使用自定義檢查點(diǎn)存儲目錄

    --detach-keys               覆蓋用于分離容器的鍵序列   
    --interactive , -i          附上容器的STDIN

docker stop (-$) CONTAINER [CONTAINER...]

    --time , -t                 在殺死之前等待停止的秒數(shù),默認(rèn)10秒

docker restart (-$) CONTAINER [CONTAINER...]

    --time , -t                 在殺死之前等待停止的秒數(shù),默認(rèn)10秒

kill

docker kill :殺掉一個運(yùn)行中的容器。

語法:

docker kill (-$) CONTAINER [CONTAINER...]

    -s,--signal                 向容器發(fā)送一個信號, 強(qiáng)制中斷 -s代表指定SIGINT信號類型,默認(rèn)“kill”

實(shí)例:

殺掉運(yùn)行中的容器mynginx

runoob@runoob:~$ docker kill -s KILL mynginx
mynginx

殺死所有正在運(yùn)行的容器

docker kill $( docker ps -p -a )

注:此小節(jié)的-s牽扯到Linux的信號,如需了解詳情,可點(diǎn)擊此處查看

rm

docker rm :刪除一個或多少容器

語法:

docker rm (-$) CONTAINER [CONTAINER...]

    -f  --force=false       通過SIGKILL信號強(qiáng)制刪除一個運(yùn)行中的容器   

    -l  --link=false        移除容器間的網(wǎng)絡(luò)連接,而非容器本身,保留底層容器 

    -v   --volumes=false     刪除與容器關(guān)聯(lián)的卷

實(shí)例:

移除容器nginx01對容器db01的連接,連接名db

docker rm -l db

刪除容器nginx01,并刪除容器掛載的數(shù)據(jù)卷

docker rm -v nginx01

強(qiáng)制刪除所有容器

docker rm -f 'docker ps -a -q'

刪除非運(yùn)行的容器

docker rm docker ps -a -f status=exited

刪除異常退出的容器

docker rm docker ps -a | grep Exited | awk'{print $1}'

一條命令實(shí)現(xiàn)停用并刪除容器

docker stop $(docker ps -q) & docker rm $( docker ps -aq )

批量刪除最近5個容器

docker rm $(docker ps -aq -n=5)

移除指定鏡像創(chuàng)建的容器

docker rm $(docker ps -a | grep "watch-the-fun/jdk:8" | awk '{print $1}')

命令拆分解釋:

|                           為管道符,主要作用為將前一命令的執(zhí)行結(jié)果做為參數(shù)傳入后一個命令

docker ps -a                查詢所有創(chuàng)建的容器(包含未啟動)

grep "watch-the-fun/jdk:8"  過濾鏡像名為watch-the-fun/jdk:8的記錄

awk '{print $1}'            按行查找記錄中的第1列,該列為容器的id

$()                         用作命令替換

注:更多示例和詳細(xì)講解可點(diǎn)擊上方官網(wǎng)鏈接或是用--help命令查看

pause/unpause

docker pause :暫停容器中所有的進(jìn)程。

docker unpause :恢復(fù)容器中所有的進(jìn)程。

語法:

docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]

實(shí)例:

暫停數(shù)據(jù)庫容器db01提供服務(wù)

docker pause db01

恢復(fù)數(shù)據(jù)庫容器db01提供服務(wù)

docker unpause db01

create

docker create :創(chuàng)建一個新的容器但不啟動它

用法同 docker run

語法:

docker create (-$) IMAGE [COMMAND] [ARG...]

語法同 docker run

實(shí)例:

使用docker鏡像nginx:latest創(chuàng)建一個容器,并將容器命名為myrunoob

runoob@runoob:~$ docker create --name myrunoob nginx:latest  
09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f

exec

docker exec :在運(yùn)行的容器中執(zhí)行命令

語法:

docker exec (-$) CONTAINER COMMAND [ARG...]

    -d,--detach                 分離模式: 在后臺運(yùn)行命令

    -i,--interactive            即使沒有連接,也要保持STDIN打開

    -t,--tty                    分配一個偽終端(TTY)    
    --detach-keys               覆蓋用于分離容器的鍵序列    
    -e,--env                    設(shè)置環(huán)境變量    
    --privileged                為命令提供擴(kuò)展權(quán)限    
    --user , -u                 用戶名或UID(格式:<name | uid> [:<group | gid>])    
    -w,--workdir                容器內(nèi)的工作目錄

實(shí)例:

實(shí)例1:在容器 mynginx 中以交互模式執(zhí)行容器內(nèi) /root/runoob.sh 腳本:

runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
http://www.runoob.com/

實(shí)例2:在容器 mynginx 中開啟一個交互模式的終端:

runoob@runoob:~$ docker exec -it mynginx /bin/bash
root@b1a0703e41e7:/#

注:也可以通過 docker ps -a 命令查看已經(jīng)在運(yùn)行的容器,然后使用容器 ID 進(jìn)入容器

實(shí)例3:第一列的 9df70f9a0714 就是容器 ID。

通過 exec 命令對指定的容器執(zhí)行 bash:

# docker exec -it 9df70f9a0714 /bin/bash

注:該命令是以交互式的方式進(jìn)入某個容器(使用exit退出后容器不停止運(yùn)行),更多詳解參見官網(wǎng)

update

docker update : 更新一個或多個容器的配置

語法:

docker update (-$) CONTAINER [CONTAINER...]

    --blkio-weight          阻止IO(相對權(quán)重),介于10和1000之間,或0阻止(默認(rèn)為0)
    --cpu-period            限制CPU CFS(完全公平計劃程序)期間
    --cpu-quota             限制CPU CFS(完全公平調(diào)度程序)配額    
    --cpu-rt-period         限制CPU實(shí)時周期(以微秒為單位)

    --cpu-rt-runtime        以微秒為單位限制CPU實(shí)時運(yùn)行時間

    --cpu-shares , -c       CPU份額(相對權(quán)重)    
    --cpus                  CPU數(shù)量

    --cpuset-cpus           允許執(zhí)行的CPU(0-3,0,1)    
    --cpuset-mems           允許執(zhí)行的MEM(0-3,0,1)    
    --kernel-memory         內(nèi)核內(nèi)存限制    
    --memory , -m           內(nèi)存限制    
    --memory-reservation    內(nèi)存軟限制    
    --memory-swap           交換限制等于內(nèi)存加交換:' - 1以啟用無限制交換    
    --restart               重新啟動容器退出時應(yīng)用的策略

實(shí)例:

更新容器的cpu-shares

要將容器的cpu-shares限制為512,請首先標(biāo)識容器名稱或ID。您可以使用它docker ps來查找這些值。您還可以使用從docker run命令返回的ID 。然后,執(zhí)行以下操作:

docker update --cpu-shares 512 abebf7571666

使用cpu-shares和內(nèi)存更新容器

要為多個容器更新多個資源配置:

docker update --cpu-shares 512 -m 300M abebf7571666 hopeful_morse

注:更多示例可點(diǎn)擊上方官網(wǎng)鏈接查看

容器rootfs命令

commit

docker commit :從容器創(chuàng)建一個新的鏡像。

語法:

docker commit (-$) CONTAINER [REPOSITORY[:TAG]]

    -a,--author=""          作者

    -c,--change             使用Dockerfile指令來創(chuàng)建鏡像    
    -m,--message=""         簡要說明

    -p,--pause=true         在提交期間暫停容器

實(shí)例:

將容器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 :用于容器與主機(jī)之間的數(shù)據(jù)拷貝。

語法:

docker cp (-$) CONTAINER:SRC_PATH DEST_PATH|-
docker cp (-$) SRC_PATH|- CONTAINER:DEST_PATH

    -a,--archive            存檔模式(復(fù)制所有uid / gid信息)    
    -L,--follow-link        保持源目標(biāo)中的鏈接

實(shí)例:

實(shí)例1:將主機(jī)/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下

docker cp /www/runoob 96f7f14e99ab:/www/

實(shí)例2:將主機(jī)/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重命名為www

docker cp /www/runoob 96f7f14e99ab:/www

實(shí)例3:將容器96f7f14e99ab的/www目錄拷貝到主機(jī)的/tmp目錄中

docker cp 96f7f14e99ab:/www /tmp/

diff

docker diff : 檢查容器文件系統(tǒng)上文件或目錄的更改

語法:

docker diff CONTAINER

擴(kuò)展說明

自容器創(chuàng)建以來,列出容器文件系統(tǒng)中已更改的文件和目錄。跟蹤三種不同類型的變化:

符號描述
A添加了文件或目錄
D文件或目錄已刪除
C文件或目錄已更改

實(shí)例:

查看容器mymysql的文件結(jié)構(gòu)更改

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         管理構(gòu)建
    config          管理Docker配置
    container       管理容器
    engine          管理docker引擎
    image           管理鏡像
    network         管理網(wǎng)絡(luò)
    node            管理Swarm節(jié)點(diǎn)
    plugin          管理插件
    secret          管理Docker secrets
    service         管理服務(wù)
    stack           管理Docker堆棧
    swarm           管理Swarm集群
    system          查看系統(tǒng)信息
    trust           管理對Docker鏡像的信任
    volume          管理卷

我們不必對上述的這些所有命令都了如指掌,因?yàn)槟翘速M(fèi)時間了,但我們可以知道他們都有什么作用,在需要時去官網(wǎng)查看就可以了

下面列出了一下我們常用到的管理命令:

查看網(wǎng)絡(luò)列表

docker network ls

查看swarm service列表

docker service ls

刪除所有未被 tag 標(biāo)記和未被容器使用的鏡像

$ docker image prune
 WARNING! This will remove all dangling images.
 Are you sure you want to continue? [y/N] y

刪除所有未被容器使用的鏡像:

docker image prune -a

刪除所有停止運(yùn)行的容器:

docker container prune

刪除所有未被掛載的卷:

docker volume prune

刪除所有網(wǎng)絡(luò):

docker network prune

刪除 docker 所有資源:

docker system prune

修剪鏡像:

docker system prune -a

Docker選項(xiàng)

docker (-$)

   --api-enable-cors=false                 在遠(yuǎn)程API中啟用CORS 頭
   
    -b, --bridge=""                         橋接網(wǎng)絡(luò) 使用“none” 禁用容器網(wǎng)絡(luò)
   
    --bip=""                                網(wǎng)橋模式       
   
    -d, --daemon=false                      守護(hù)者模式
   
    -D, --debug=false                       debug 模式
   
    --dns=[]                                強(qiáng)制 docker 使用指定 dns 服務(wù)器
   
    --dns-search=[]                         強(qiáng)制 docker 使用指定 dns 搜索域
   
    -e, --exec-driver="native"              強(qiáng)制 docker 運(yùn)行時使用指定執(zhí)行驅(qū)動器
   
    --fixed-cidr=""                         固定IP的IPv4子網(wǎng)(例:10.20.0.0/16)必須鑲套在橋子網(wǎng)中(由-b or --bip定義)                                        
   
    -G, --group="docker"                    當(dāng)在守護(hù)模式中運(yùn)行時,組指向-H指定的unix套接字。使用""禁用組設(shè)置。
       
    -g, --graph="/var/lib/docker"           容器運(yùn)行的根目錄路徑
   
    -H, --host=[]                           套接字綁定到守護(hù)模式。使用一個或多個tcp://主機(jī):端口,unix:///路徑/到/套,fd://*或fd://socketfd.
       
    --icc=true                              inter-container跨容器通信
   
    --insecure-registry=[]                  使用指定的注冊表啟用不安全通信(沒有HTTPS的證書驗(yàn)證和啟用HTTP回退)(例如,localhost:5000或10.20.0 /16)
   
    --ip="0.0.0.0"                          綁定容器端口時使用的IP地址

    --ip-forward=true                       使用net.ipv4.ip_forward轉(zhuǎn)發(fā)
    
    --ip-masq=true                          使IP偽裝成橋的IP范圍
    
    --iptables=true                         啟用Docker添加iptables規(guī)則
    
    --mtu=0                                 設(shè)置容器網(wǎng)絡(luò)mtu
   
    -p, --pidfile="/var/run/docker.pid"     指定守護(hù)進(jìn)程pid文件位置
   
    --registry-mirror=[]                    指定一個首選的鏡像倉庫(加速地址)                
    -s, --storage-driver=""                 強(qiáng)制 docker 運(yùn)行時使用指定存儲驅(qū)動
   
    --selinux-enabled=false                 開啟 selinux 支持
   
    --storage-opt=[]                        設(shè)置存儲驅(qū)動選項(xiàng)
   
    --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 并確認(rèn)遠(yuǎn)程控制主機(jī)
   
    -v, --version=false                     輸出 docker 版本信息

感謝各位的閱讀!關(guān)于“Docker命令有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI