开发人员一直在努力提升 Docker 的使用率和性能,命令也在不停变化。Docker 命令常常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最经常使用的命令列表并给出部分使用方法。 html
目前,Docker 共有 13 个管理命令和 41 个通用命令,如下是经常使用 Docker 命令列表: linux
不管是在本地仍是云端,咱们都须要检查 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 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 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 上运行 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 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
…
若是须要与 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
以上示例用附加模式启动 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 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 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 容器:
复制代码
$ 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 命令在本地计算机和建立容器间移动文件,此方法可用于覆盖配置文件。
若是想复制更多“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 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