资深专家都知道的顶级 Docker 命令!
開發人員一直在努力提高 Docker 的使用率和性能,命令也在不停變化。Docker 命令經常被棄用,或被替換為更新且更有效的命令,本文總結了近年來資深專家最常用的命令列表并給出部分使用方法。
目前,Docker 共有 13 個管理命令和 41 個通用命令,以下是常用 Docker 命令列表:
- 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 版本:
$ docker versionClient:
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 infoContainers: 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 ubuntuNAME 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 ubuntuUsing 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 infoContainers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 1
…
docker images 命令可詳細列出擁有鏡像:
$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 113a43faa138 2 weeks ago 81.2MB
假設下載 NGINX 鏡像,可以運行 docker pull 命令:
$ docker pull nginx如果檢查 Docker 鏡像,會看到如下內容:
$ docker imagesREPOSITORY 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 imagesREPOSITORY 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 psCONTAINER 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 psCONTAINER 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 infoContainers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 3
可以看到有兩個容器正在運行,如果一個暫?;蛞淹V?#xff0c;則不會僅使用 docker ps 命令查看這些容器,必須使用 all( - a)選項:
$ docker ps -a啟動,停止,重啟和殺死容器
假設要停止’my_nginx’容器,可使用 CONTAINER ID 或 NAME。
$ docker stop my_nginxmy_nginx
列出 Docker 容器:
$ docker psCONTAINER 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_nginxmy_nginx
檢查 Docker 容器列表:
$ docker psCONTAINER 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 -aCONTAINER 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 infoContainers: 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 bashroot@a19c770b8621:/#
root @haracle#表示位于 Docker 容器的 bash shell 中,可以運行 shell 命令:
root@a19c770b8621:/# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a19c770b8621:/# pwd
/
列出 Docker 容器:
$ docker psCONTAINER 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 bashroot@a19c770b8621:/#
使用 docker exec 向容器發出命令。例如,可以直接用命令提示符在 my_ubuntu 容器上運行 ls 命令:
$ docker exec -it my_ubuntu lsbin 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 bash75b28b7208359137b3e1dc2843387918e28b4c6c4860ef0cdeac79c205f5cbc4
驗證容器是否正在運行:
$ docker psCONTAINER 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_2root@75b28b720835:/#
檢查 Docker 鏡像歷史
Docker 社區鏡像是分層創建的,可使用 Docker history 命令查看鏡像創建方式。先看看有哪些鏡像:
$ docker imagesREPOSITORY 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 nginxIMAGE 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 nginxDocker 檢查容器
可以使用 docker inspect 命令查找有關系統的信息,運行 docker ps 命令列出 Docker 容器:
$ docker psCONTAINER 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 psCONTAINER 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/html50x.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 -aCONTAINER 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_templatesha256:117d060587a316035ed5a776e613d9cfbeee9fbfe202c6edc9203820c7da987b
如果現在檢查,將看到新鏡像:
$ docker imagesREPOSITORY 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_template4e042d76c39125471951626ba42cd609a65c73f041943298f74f4fc43dc5596a
$
刪除 Docker 容器和鏡像
Docker 容器和鏡像會占用硬盤空間,因此最好定期清理。首先停止所有容器,然后列出所有容器,使用以下 Docker 命令執行操作:
$ docker ps -aCONTAINER 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 6162daed25da4e042d76c391
75b28b720835
a19c770b8621
6162daed25da
可使用 NAMES 代替 CONTAINER ID,容器列表現在應該是干凈的:
$ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
列出 Docker 鏡像:
$ docker imagesREPOSITORY 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZE
原文鏈接:https://dzone.com/articles/top-docker-commands-itsyndicate
文章版權歸極客邦科技 InfoQ 所有,未經許可不得轉載。
總結
以上是生活随笔為你收集整理的资深专家都知道的顶级 Docker 命令!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios程序内发送邮件的代码
- 下一篇: oracle连接数据的oci和thin的