博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
这54个docker命令!你必须懂!
阅读量:2117 次
发布时间:2019-04-29

本文共 16863 字,大约阅读时间需要 56 分钟。

640?wx_fmt=gif

Docker是一个不断发展的系统,开发人员积极改进使用和性能。所以命令总是在变化。docker一些老的命令经常被弃用,并被新的或更有效的命令取代。您可以使用帮助选项检查Docker安装上的最新可用命令:

 
$ docker  --help

要使用特定命令的选项,可以使用该命令的help选项。例如,要使用docker run命令选项,可以使用以下命令:

 
$ docker run --help

目前,有13个管理命令和41个通用命令。下面是我们的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系统信息。您可以使用以下命令查找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镜像

您可以使用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

 640?wx_fmt=gif

您可以在此处找到有关这些镜像的更多信息:

  • Docker Hub官方

  • Ubuntu

  • nginx

您可以使用这些页面查找镜像的特定版本。在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容器

假设您想在docker上运行nginx服务器。运行以下命令:

 
$ docker run -p 8080:80 nginx

docker run命令从先前从Docker Hub中提取的nginx镜像创建了一个nginx容器。“-p 8080:80”告诉Docker将本地主机端口8080映射到Docker容器的端口80。您应该能够从http://localhost:8080访问nginx服务器。

nginx容器附加到命令行。因此,如果退出命令行,容器将不再运行。您可以使用detach(“-d”)选项启动nginx容器,这样即使您退出命令行,它也可以继续运行。

 
$ docker run -p 8080:80 -d nginx

上面的命令将以分离模式启动容器并返回命令行。

列出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镜像创建的,并且还显示了端口转发信息。容器ID和名称属性需要特别说明。您可以使用这些属性来唯一地标识容器。这两个属性都是自动生成的。但您也可以在容器创建过程中为容器命名。让我们创建一个名为“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	…

您可以看到有两个容器正在运行。如果您有一个暂停或停止的容器,您必须使用a ll(“-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

如果docker ps 没有-a选项运行,它只显示正在运行的容器。在第二种情况下,您可以看到'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命令来启动被杀掉的容器。

Docker exec bash 和Docker SSH 进入容器

您通常需要与容器的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:/#

注意,命令提示符的容器ID和bash匹配。因此,您将ssh放入容器“my-ubuntu”的结果是成功的。

使用docker exec向容器中发出命令。例如,您可以直接从命令提示符在“my_buntu”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

连接到正在运行中的容器

在上面的示例中,您以附加模式启动了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 类似的效果:

 
$ 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                  	
2 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
2 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B
2 weeks ago /bin/sh -c set -x && apt-get update && apt… 53.7MB
2 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.0.0.… 0B
2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.0-… 0B
7 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
8 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
           8 weeks ago         /bin/sh -c #(nop) ADD file:ec5be7eec56a74975…   55.3MB

您可以使用镜像的history命令来了解最近发生了什么变化。如果在从已经使用的新版本镜像启动容器后发现问题,此命令可以帮助您找到原因。或者,也可以使用以下版本的命令:

 
$ 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:

 
	
My Website
Hello world

让我们使用docker exec -ls命令和查看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中,您可以看到'hardcore_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

除了容器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
640?wx_fmt=png

-Congratulations-

希望这个文章能让您熟练掌握Docker命令,并在工作中能够对您有所帮助!只要你我都用心去奋斗,去努力,美好的未来在等着我们!

640?wx_fmt=png

640?wx_fmt=gif

喜欢记得来一个

640?wx_fmt=gif

640?wx_fmt=jpeg

长按二维码 ▲

订阅「架构师小秘圈」公众号

如有启发,帮我点个在看,谢谢↓

转载地址:http://sfmef.baihongyu.com/

你可能感兴趣的文章
第一次kaggle比赛 回顾篇
查看>>
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>