Docker是一个不断发展的系统,开发人员主动致力于提高使用率和性能。所以命令总是在变化。Docker命令经常被弃用并替换为新的或更有效的命令。您可以使用help选项检查Docker安装上的最新可用命令:
$ docker --help
要检查特定命令的选项,可以使用该命令的help选项。例如,要检查docker run
命令选项,可以使用以下命令:
$ docker run --help
作为Docker专家,您必须定期执行某些任务。因此,我们将把信息组织成更小的部分。它将为您提供运行各种命令的更好上下文。
目前,有13个管理命令和41个通用命令。以下是我们将用于课程的顶级Docker命令:
docker attach
- 将本地输入/输出/错误流附加到正在运行的容器。docker commit
- 从容器的当前更改状态创建新图像。docker exec
- 在活动或正在运行的容器中运行命令。docker history
- 显示图像的历史记录。docker info
- 显示系统范围的信息。docker inspect
- 查找有关泊坞容器和图像的系统级信息。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 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页面上,您会注意到最新版本的Ubuntu是18.04。如果您正在寻找16.04版本的Ubuntu,您可以使用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'
告诉泊坞窗到localhost的8080端口映射到多克容器的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
…
您可以看到有2个容器正在运行。如果您有一个暂停或已停止的容器,则不会仅使用docker ps
命令查看这些容器 。你必须使用all('-a'
)选项:
$ docker ps -a
您可以使用下一个Docker命令启动和停止容器。
假设您要停止'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命令来启动被终止的容器。
您经常需要与容器的shell进行交互以创建服务或解决问题。您可以使用该 docker exec
命令创建交互式shell。让我们用bash shell从ubuntu映像启动一个容器:
$ docker run --name my_ubuntu -it ubuntu:latest bash
root@a19c770b8621:/#
root@hash#
意味着您位于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:/#
请注意,CONTAINER ID和命令提示符的哈希匹配。所以你把SSH塞进容器'my_ubuntu'的努力是成功的。
用docker exec
向容器发出命令。例如,您可以直接从命令提示符在“my_ubuntu”docker容器上运行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的效果:
$ 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 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
,你会看到以下内容:
“欢迎来到nginx!”
如果您看到此页面,则nginx Web服务器已成功安装并正常运行。需要进一步配置。有关在线文档和支持,请参阅nginx.org。nginx.com提供商业支持。感谢您使用nginx。
让我们在你的本地目录中创建这个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”容器创建将来的容器。但是你只能从图像中旋转容器。为了制作更多“Hello World”容器,您必须将当前“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
命令和图像ID删除docker镜像 :
$ docker rmi 117d060587a3 5e8b97a2a082 113a43faa138 cd5239a0906a
现在您的Docker图像列表应该是干净的:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
希望这个迷你指南能帮助您获得使用所有顶级Docker命令的信心。使用本文作为定期练习的操作指南,这些命令将成为您的第二天性。
原文标题《Top Docker Commands Any Expert Should Know》
译者:February
不代表云加社区观点,更多详情请查看原文链接
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。