Docker 共有 13 個管理命令和 41 個通用命令,如下是經常使用 Docker 命令列表

開發人員一直在努力提升 Docker 的使用率和性能,命令也在不停變化。Docker 命令常常被棄用,或被替換爲更新且更有效的命令,本文總結了近年來資深專家最經常使用的命令列表並給出部分使用方法。 html

目前,Docker 共有 13 個管理命令和 41 個通用命令,如下是經常使用 Docker 命令列表: linux

  • docker help—檢查最新 Docker 可用命令;
  • docker attach—將本地輸入、輸出、錯誤流附加到正在運行的容器;
  • docker commit—從當前更改的容器狀態建立新鏡像;
  • docker exec—在活動或正在運行的容器中運行命令;
  • docker history—顯示鏡像歷史記錄;
  • docker info—顯示系統範圍信息;
  • docker inspect—查找有關 docker 容器和鏡像的系統級信息;
  • docker login—登陸到本地註冊表或 Docker Hub;
  • docker pull—從本地註冊表或 Docker Hub 中提取鏡像或存儲庫;
  • docker ps—列出容器的各類屬性;
  • docker restart—中止並啓動容器;
  • docker rm—移除容器;
  • docker rmi—刪除鏡像;
  • docker run—在隔離容器中運行命令;
  • docker search—在 Docker Hub 中搜索鏡像;
  • docker start—啓動已中止的容器;
  • docker stop—中止運行容器;
  • docker version—提供 docker 版本信息。

查找 Docker 版本和系統信息

不管是在本地仍是雲端,咱們都須要檢查 Docker 版本和系統信息,可使用如下命令找到 Docker 版本:nginx

docker

shell

json

ubuntu

bash

服務器

ssh

$ docker version
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4 
Git commit: 0520e24 
Built: Wed Mar 21 23:06:22 2018 
OS/Arch: darwin/amd64 
Experimental: false 
Orchestrator: swarm 
Server: 
Engine: 
Version: 18.03.0-ce 
API version: 1.37 (minimum version 1.12) 
Go version: go1.9.4 
Git commit: 0520e24 
Built: Wed Mar 21 23:14:32 2018 
OS/Arch: linux/amd64 
Experimental: true

另外一個重要命令是 docker info:

複製代碼

 

$ docker info

Containers: 0

Running: 0

Paused: 0

Stopped: 0

Images: 0

Server Version: 18.03.0-ce

Storage Driver: overlay2

Backing Filesystem: extfs

Supports d_type: true

Native Overlay Diff: true

Logging Driver: json-file

Cgroup Driver: cgroupfs

Plugins:

Volume: local

Network: bridge host ipvlan macvlan null overlay

Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog


該命令將顯示部分設備信息,好比服務器版本、存儲驅動程序、內核版本、操做系統、總內存等。當嘗試爲當前 Docker 安裝啓動新資源或嘗試找出系統級資源分配問題時,這些信息很是有用,這也是檢查運行、中止容器數量及下載鏡像數量的快速方法。

搜索下載 Docker 鏡像

可使用 docker search 命令在 Docker Hub 搜索已有鏡像:

複製代碼

 

$ docker search ubuntu

 

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

 

ubuntu Ubuntu is a Debian-based Linux operating sys… 7861 [OK]

 

dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 190 [OK]

 

rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK]

 

ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK]

 

ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK]

 

neurodebian NeuroDebian provides neuroscience research s… 50 [OK]

 

以上對 ubuntu 的搜索顯示可用鏡像、描述和官方狀態等信息。若是要下載 ubuntu 鏡像,可使用 docker pull 命令:

複製代碼

 

$ docker pull ubuntu

 

Using default tag: latest

 

latest: Pulling from library/ubuntu

 

6b98dfc16071: Pull complete

 

4001a1209541: Pull complete

 

6319fc68c576: Pull complete

 

b24603670dc3: Pull complete

 

97f170c87c6f: Pull complete

 

Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d

 

Status: Downloaded newer image for ubuntu:latest

 

$

Docker 鏡像

使用 docker info 命令查找擁有鏡像數量:

複製代碼

 

$ docker info

 

Containers: 0

 

Running: 0

 

Paused: 0

 

Stopped: 0

 

Images: 1

 

docker images 命令可詳細列出擁有鏡像:

複製代碼

 

$ docker images

 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 

ubuntu              latest              113a43faa138        2 weeks ago         81.2MB

假設下載 NGINX 鏡像,能夠運行 docker pull 命令:

複製代碼

 

$ docker pull nginx

若是檢查 Docker 鏡像,會看到以下內容:

複製代碼

 

$ docker images

 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 

ubuntu              latest              113a43faa138        2 weeks ago         81.2MB

 

nginx               latest              cd5239a0906a        2 weeks ago         109MB

若是尋找 Ubuntu 16.04 版本,可以使用 16.04 標籤下載特定版本:

複製代碼

 

$ docker pull ubuntu:16.04

隨後,將出現兩個 Ubuntu 映像版本:

複製代碼

 

$ docker images

 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 

ubuntu              16.04               5e8b97a2a082        2 weeks ago         114MB

 

ubuntu              latest              113a43faa138        2 weeks ago         81.2MB

 

nginx               latest              cd5239a0906a        2 weeks ago         109MB

注意:無需註冊 Docker Hub 便可提取鏡像。若是想將鏡像推送到 Docker Hub,須要註冊而後使用 docker login 命令登陸:

複製代碼

 

$ docker login --username=yourhubusername --email=youremail@company.com

運行鏡像的 Docker 容器

假設想在 docker 上運行 NGINX 服務器,可運行如下命令:

複製代碼

 

$ docker run -p 8080:80 nginx

若是已用 run 命令從 Docker Hub 提取 nginx 映像建立 NGINX 容器。 -p 8080:80 會告訴 Docker 將 localhost 端口 8080 映射到 Docker 容器端口 80,應該可以從 http:// localhost:8080 訪問 NGINX 服務器。

NGINX 容器已附加到命令行。若是退出命令行,容器將會中止,可以使用 detach(’-  d)啓動 NGINX 容器,這樣即便退出命令行也可繼續運行。

複製代碼

 

$ docker run -p 8080:80 -d nginx

以上命令將以分離模式啓動容器並返回命令行。

使用 docker ps 命令列出 Docker 容器

docker ps 命令容許查找正在運行的全部容器:

複製代碼

 

$ docker ps

 

CONTAINER ID         IMAGE         COMMAND         CREATED           STATUS          PORTS             NAMES

 

6162daed25da         nginx  "nginx -g 'daemon of…" 7 minutes ago   Up 7 minutes  0.0.0.0:8080->80/tcp  hardcore_torvalds

如上顯示容器的各類屬性,能夠看到是從 nginx 鏡像建立並顯示端口轉發信息。CONTAINER ID 和 NAMES 屬性須要特別說起,可使用上述兩大屬性惟一標識容器。兩者均可自動生成,但也可在容器建立過程當中爲容器命名。
建立一個名爲 my_nginx 的 NGINX 容器:

複製代碼

 

$ docker run --name my_nginx -p 8888:80 -d nginx

再次列出全部 Docker 容器:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES

 

e7b19b6ad778        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:8888->80/tcp   my_nginx

 

6162daed25da        nginx               "nginx -g 'daemon of…"   15 minutes ago       Up 16 minutes       0.0.0.0:8080->80/tcp   hardcore_torvalds

請注意,新容器的名稱爲「my_nginx」。 處理大量容器時,可使用命名約定,這能夠更好得組織容器。
docker ps 命令僅顯示正在運行的容器。若是對上述狀況使用 docker info 命令:

複製代碼

 

$ docker info

 

Containers: 2

 

Running: 2

 

Paused: 0

 

Stopped: 0

 

Images: 3

能夠看到有兩個容器正在運行,若是一個暫停或已中止,則不會僅使用 docker ps 命令查看這些容器,必須使用 all( -  a)選項:

複製代碼

 

$ docker ps -a

啓動,中止,重啓和殺死容器

假設要中止’my_nginx’容器,可以使用 CONTAINER ID 或 NAME。

複製代碼

 

$ docker stop my_nginx

 

my_nginx

列出 Docker 容器:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

 

6162daed25da        nginx               "nginx -g 'daemon of…"   27 minutes ago      Up 27 minutes       0.0.0.0:8080->80/tcp   hardcore_torvalds

 

$ docker ps -a

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS                  NAMES

 

e7b19b6ad778        nginx               "nginx -g 'daemon of…"   12 minutes ago      Exited (0) About a minute ago                          my_nginx

 

6162daed25da        nginx               "nginx -g 'daemon of…"   27 minutes ago      Up 27 minutes                   0.0.0.0:8080->80/tcp   hardcore_torvalds

若是在沒有 -a 選項的狀況下運行 docker ps,只顯示正在運行的容器。在第二種狀況下,能夠看到’my_nginx’容器處於退出狀態。

讓咱們 docker start  容器:

複製代碼

 

$ docker start my_nginx

 

my_nginx

檢查 Docker 容器列表:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

 

e7b19b6ad778        nginx               "nginx -g 'daemon of…"   16 minutes ago      Up 29 seconds       0.0.0.0:8888->80/tcp   my_nginx

 

6162daed25da        nginx               "nginx -g 'daemon of…"   30 minutes ago      Up 30 minutes       0.0.0.0:8080->80/tcp   hardcore_torvalds

能夠看到 STATUS 顯示容器’my_nginx’再次被啓動。
若是因爲某些問題而需重啓容器,則可以使用 restart 命令,這比單獨中止和啓動容器速度更快:

複製代碼

 

$ docker restart my_nginx

能夠像進程同樣終止 docker 容器,好比終止 my_nginx 容器:

複製代碼

 

$ docker kill my_nginx

再次列出 Docker 容器:

複製代碼

 

$ docker ps -a

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                  NAMES

 

e7b19b6ad778        nginx               "nginx -g 'daemon of…"   22 minutes ago      Exited (137) 7 seconds ago                          my_nginx

 

6162daed25da        nginx               "nginx -g 'daemon of…"   36 minutes ago      Up 36 minutes                0.0.0.0:8080->80/tcp   hardcore_torvalds

容器 my_nginx 未運行。此外,可在信息中看到一個正在運行的容器和一個已中止容器:

複製代碼

 

$ docker info

 

Containers: 2

 

Running: 1

 

Paused: 0

 

Stopped: 1

 

Images: 3

 

Docker Exec Bash 和 Docker SSH

若是須要與 shell 進行交互以建立服務或解決問題,可使用 docker exec 命令建立交互式 shell。好比,用 bash shell 從 ubuntu 映像啓動一個容器:

複製代碼

 

$ docker run --name my_ubuntu -it ubuntu:latest bash

 

root@a19c770b8621:/#

root @haracle#表示位於 Docker 容器的 bash shell 中,能夠運行 shell 命令:

複製代碼

 

root@a19c770b8621:/# ls

 

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

 

root@a19c770b8621:/# pwd

 

/

列出 Docker 容器:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES

 

a19c770b8621        ubuntu:latest       "bash"                   About a minute ago   Up About a minute                          my_ubuntu

 

6162daed25da        nginx               "nginx -g 'daemon of…"   About an hour ago    Up About an hour    0.0.0.0:8080->80/tcp   hardcore_torvalds

如上,my_ubuntu 正在運行。假設想將 Docker ssh 放入’my_ubuntu’容器中,可使用 docker exec bash:

複製代碼

 

$ docker exec -it my_ubuntu bash

 

root@a19c770b8621:/#

使用 docker exec 向容器發出命令。例如,能夠直接用命令提示符在 my_ubuntu 容器上運行 ls 命令:

複製代碼

 

$ docker exec -it my_ubuntu ls

 

bin dev home lib64 mnt proc run srv tmp var

 

boot etc lib media opt root sbin sys usr

以分離模式啓動容器並使用 docker attach

以上示例用附加模式啓動 ubuntu 容器,咱們也可在分離模式下啓動:

複製代碼

 

$ docker run -it -d --name my_ubuntu_2 ubuntu:latest bash

 

75b28b7208359137b3e1dc2843387918e28b4c6c4860ef0cdeac79c205f5cbc4

驗證容器是否正在運行:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

 

75b28b720835        ubuntu:latest       "bash"                   3 minutes ago       Up 3 minutes                               my_ubuntu_2

 

a19c770b8621        ubuntu:latest       "bash"                   15 minutes ago      Up 15 minutes                              my_ubuntu

 

6162daed25da        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:8080->80/tcp   hardcore_torvalds

使用 docker attach 命令獲取 docker exec bash-like 效果:

複製代碼

 

$ docker attach my_ubuntu_2

 

root@75b28b720835:/#

檢查 Docker 鏡像歷史

Docker 社區鏡像是分層建立的,可以使用 Docker history 命令查看鏡像建立方式。先看看有哪些鏡像:

複製代碼

 

$ docker images

 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 

ubuntu              16.04               5e8b97a2a082        2 weeks ago         114MB

 

ubuntu              latest              113a43faa138        2 weeks ago         81.2MB

 

nginx               latest              cd5239a0906a        2 weeks ago         109MB

查看 nginx 鏡像歷史:

複製代碼

 

$ docker history nginx

 

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

 

cd5239a0906a        2 weeks ago         /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B                 

 

<missing>           2 weeks ago         /bin/sh -c #(nop)  STOPSIGNAL [SIGTERM]         0B                 

 

<missing>           2 weeks ago         /bin/sh -c #(nop)  EXPOSE 80/tcp                0B                 

 

<missing>           2 weeks ago         /bin/sh -c ln -sf /dev/stdout /var/log/nginx…   22B                

 

<missing>           2 weeks ago         /bin/sh -c set -x  && apt-get update  && apt…   53.7MB             

 

<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV NJS_VERSION=1.15.0.0.…   0B                 

 

<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.15.0-…   0B                 

 

<missing>           7 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B                 

 

<missing>           8 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B                 

 

<missing>           8 weeks ago         /bin/sh -c #(nop) ADD file:ec5be7eec56a74975…   55.3MB

使用鏡像歷史命令查找最近更改,若是在新版本鏡像中發現問題,則此命令可幫助找到緣由,也可用如下命令:

複製代碼

 

$ docker image history nginx

Docker 檢查容器

可使用 docker inspect 命令查找有關係統的信息,運行 docker ps 命令列出 Docker 容器:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

 

6162daed25da        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:8080->80/tcp   hardcore_torvalds

使用 CONTAINER ID 檢查容器(也可以使用容器名稱):

複製代碼

 

$ docker inspect 6162daed25da

 

[

 

{

 

"Id": "6162daed25da50b98afca5f7ed8caca2289bf309b2547d87ae8674b899d604a4",

 

"Created": "2018-06-25T05:46:37.902211302Z",

 

"Path": "nginx",

 

"Args": [

 

 

 

 

"DriverOpts": null

 

}

 

}

 

}

 

}

 

]

該命令將以 JSON 格式提供大量信息,如下是查找容器 IP 地址的技巧:

複製代碼

 

$ docker inspect 6162daed25da | grep "IPAddress"

 

            "SecondaryIPAddresses": null,

 

            "IPAddress": "172.17.0.2",

 

                    "IPAddress": "172.17.0.2",

使用 docker cp 將文件從本地複製到容器

再次列出 Docker 容器:

複製代碼

 

$ docker ps

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

 

6162daed25da        nginx               "nginx -g 'daemon of…"   3 hours ago         Up 3 hours          0.0.0.0:8080->80/tcp   hardcore_torvalds

NGINX 容器在端口 8080 上運行。所以,若是轉到 http:// localhost:8080,將看到如下內容:

複製代碼

 

"Welcome to nginx!"

若是看到此頁面,則 nginx Web 服務器已成功安裝並正常運行,須要進一步配置。
首先,在本地目錄中建立 index.html:

複製代碼

 

<html>

 

<Header><title>My Website</title></header>

 

<body>

 

Hello world

 

</body>

 

</html>

使用帶有 ls 的 docker exec 命令檢查 NGINX 容器中具備 index.html 的文件夾:

複製代碼

 

$ docker exec -it hardcore_torvalds ls /usr/share/nginx/html

 

50x.html index.html

使用建立的本地文件覆蓋容器 index.html 文件:

複製代碼

 

$ docker cp index.html hardcore_torvalds:usr/share/nginx/html/

若是再次檢查http://localhost:8080,應該能夠看到問候語「Hello world」。
可以使用 docker cp 命令在本地計算機和建立容器間移動文件,此方法可用於覆蓋配置文件。

建立 Docker 鏡像

若是想複製更多「Hello World」容器,必須將當前容器保存爲鏡像。
首先,中止容器:

複製代碼

 

$ docker stop hardcore_torvalds

列出全部 Docker 容器:

複製代碼

 

$ docker ps -a

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES

 

75b28b720835        ubuntu:latest       "bash"                   About an hour ago   Exited (0) About an hour ago                       my_ubuntu_2

 

a19c770b8621        ubuntu:latest       "bash"                   2 hours ago         Exited (0) About an hour ago                       my_ubuntu

 

6162daed25da        nginx               "nginx -g 'daemon of…"   3 hours ago         Exited (0) 27 seconds ago                          hardcore_torvalds

從 STATUS 中,能夠看到 NGINX’corecore_torvalds’容器已中止。使用 docker commit 命令建立新鏡像:

複製代碼

 

$ docker commit 6162daed25da nginx_hello_world_template

 

sha256:117d060587a316035ed5a776e613d9cfbeee9fbfe202c6edc9203820c7da987b

若是如今檢查,將看到新鏡像:

複製代碼

 

$ docker images

 

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE

 

nginx_hello_world_template   latest              117d060587a3        40 seconds ago      109MB

 

ubuntu                       16.04               5e8b97a2a082        2 weeks ago         114MB

 

ubuntu                       latest              113a43faa138        2 weeks ago         81.2MB

 

nginx                        latest              cd5239a0906a        2 weeks ago         109MB

可使用此鏡像並啓動新 Docker 容器,新建立容器將具備「Hello world」頁面,而不是「Welcome NGINX」頁面。示例以下:

複製代碼

 

$ docker run -it -d -p 8886:80 nginx_hello_world_template

 

4e042d76c39125471951626ba42cd609a65c73f041943298f74f4fc43dc5596a

 

$

刪除 Docker 容器和鏡像

Docker 容器和鏡像會佔用硬盤空間,所以最好按期清理。首先中止全部容器,而後列出全部容器,使用如下 Docker 命令執行操做:

複製代碼

 

$ docker ps -a

 

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                         PORTS               NAMES

 

4e042d76c391        nginx_hello_world_template   "nginx -g 'daemon of…"   2 minutes ago       Exited (0) 8 seconds ago                           boring_keldysh

 

75b28b720835        ubuntu:latest                "bash"                   2 hours ago         Exited (0) About an hour ago                       my_ubuntu_2

 

a19c770b8621        ubuntu:latest                "bash"                   2 hours ago         Exited (0) About an hour ago                       my_ubuntu

 

6162daed25da        nginx                        "nginx -g 'daemon of…"   3 hours ago         Exited (0) 11 minutes ago                          hardcore_torvalds

如上,有 4 個處於中止狀態的容器,可以使用 docker rm 命令刪除容器:

複製代碼

 

$ docker rm 4e042d76c391 75b28b720835 a19c770b8621 6162daed25da

 

4e042d76c391

 

75b28b720835

 

a19c770b8621

 

6162daed25da

可以使用 NAMES 代替 CONTAINER ID,容器列表如今應該是乾淨的:

複製代碼

 

$ docker ps -a

 

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

列出 Docker 鏡像:

複製代碼

 

$ docker images

 

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE

 

nginx_hello_world_template   latest              117d060587a3        11 minutes ago      109MB

 

ubuntu                       16.04               5e8b97a2a082        2 weeks ago         114MB

 

ubuntu                       latest              113a43faa138        2 weeks ago         81.2MB

 

nginx                        latest              cd5239a0906a        2 weeks ago         109MB

可以使用 docker rmi 命令和 IMAGE ID 刪除 docker 鏡像:

複製代碼

 

$ docker rmi 117d060587a3 5e8b97a2a082 113a43faa138 cd5239a0906a

最後,Docker 鏡像列表應該是乾淨的:

複製代碼

 

$ docker images

 

REPOSITORY TAG IMAGE ID CREATED SIZE

原文連接:https://dzone.com/articles/top-docker-commands-itsyndicate

相關文章
相關標籤/搜索