Docker 操作指令

下面表中列出了Docker操作镜像与容器的一些常用指令。

指令

说明

docker images

列出镜像

docker search

搜索镜像

docker pull

拉取镜像

docker build

构造镜像

docker rmi

删除镜像

docker run

创建并启动容器

docker ps

列出容器

docker exec

执行容器

docker stop

停止容器

docker start

启动容器

docker pause

暂停容器

docker unpause

恢复容器

docker rm

删除容器

1.列出镜像

通过docker images指令可以查看本地镜像列表中已经有的镜像,使用方法如下:

$ docker images

从图中可以看出,系统终端将本地镜像列出来,分5列进行展示,每一列的具体含义如下:

  • REPOSITORY:镜像名称

  • TAG:镜像参数,类似于版本号,默认为latest

  • IMAGE ID:镜像ID,是唯一值。此处看到的是一个长度为12的字符串,实际上它是64位完整镜像ID的缩写形式。

  • CREATED:距今创建镜像的时间。

  • SIZE:镜像大小。

2.搜索镜像

想知道在Docker Hub中包含了哪些镜像,除了可以登录Docker Hub(https://hub.docker.com/explore/),在官网中心进行查看,还可以直接在Docker客户端进行查询。例如想要查询Ubuntu镜像,可以使用如下指令:

$ docker search ubuntu

执行上述命令后,系统终端就会将搜索有关Ubuntu的镜像展示出来.

系统终端分5列将搜索到的Ubuntu相关的镜像列举出来:

  • Name:表示进项的名称,这里有两种格式的名称,其中不带"/"的表示官方镜像,而带有"/"的表示其他用户的公开镜像。公开镜像"/"前面hi用户在Docker Hub上的用户名(唯一),后面是对应的镜像名,除了从镜像名称上可以区分官方镜像与用户镜像,还可以通过第四列OFFICIAL声明中看出(改列内容为OK表示官方镜像)。

  • DESCRIPTION:表示镜像的描述,这里只显示了一小部分。

  • STARS:表示镜像 收藏数,用户可以在Docker Hub上对镜像进行收藏,一般可以通过该数字反映出该镜像的受欢迎程度。

  • OFFICIAL:表示是否为官方镜像。

  • AUTOMATED:表示是否自动构建镜像.例如:用户可以将自己Docker Hub绑定到如Github上,当代码提交更新后,自动构建镜像。

3.拉取镜像

通过docker pull可以拉取仓库镜像到本地(默认都是拉取Docker Hub仓库镜像,也可以指定"IP+端口"拉取某个Docker机器上的私有仓库镜像),具体使用是如下:

$ docker pull ubuntu

执行上述指令后,Docker会自动从Docker Hub上下载最新版本的Ubuntu到本地,当然也可以使用以下指令拉取指定版本的镜像到本地,具体执行如下:

$ docker pull ubuntu:14.04

4.构建镜像

除了可以通过docker pull指令从仓库拉取镜像外,还可以通过docker build指令构建Docker镜像,通常情况都是通过Dockerfile文件来构建镜像的。

(1).在Dockerfile文件所在目录后,可以使用docker build指令进行镜像构建,具体指令如下:

$ cd workspace/dockerspace/
$ docker build -t hellodocker .

进入Dockerfile所在目录,通过点"."读取当前应用上下文中的Dockerfile进行构建。

(2).在其他目录构建镜像

除了可以在Dockerfile文件所在目录构建镜像外,还可以在指定目录下进行镜像构建,如在home目录下读取Dockerfile文件所在目录的指令如下:

$ docker build -t hellodocker /home/revin/workspace/dockerspace/.

构建完成后就可以通过docker images指令查看镜像是否创建成功。

5.删除镜像

当本地存放过多不需要的镜像时,可以通过docker rmi指令将其删除。在删除镜像时,需要指定镜像名称或镜像ID。删除镜像的使用方式如下:

$ docker rmi -f hellodocker1 hellodocker2

上述指令中,docker rmi 表示删除镜像,-f 表示进行强制删除,而hellodocker1和hellodocker2分别表示乣删除的镜像名称,这里同时删除两个镜像。除了根据名称删除镜像外,还可以根据镜像ID来删除。

注意:在进行镜像删除操作时,如果通过镜像ID进行镜像删除,那么由该镜像创建的容器必须提前删除或停止。另外,在通过镜像名称操作镜像时,如果操作的不是默认的lastest镜像,必须爱镜像名称后面指定镜像标签tag参数来确保唯一性。

6.创建并启动容器

Docker镜像主要用于创建容器,可以使用Docker run指令创建并启动容器,具体使用方式如下:

$ docker run -d -p 5000:80 --name test hellodocker
  • docker run: 表示创建并启动一个容器,而后面的hellodocker就表示要启动运行的镜像名称。

  • -d:表示容器启动时在后台运行。

  • -p 5000::80:表示将容器内暴露的80端口映射到宿主机指定的5000端口,也可以将-p 5000::80更改为-P来映射主机的随机端口(注意p字母 大小写)。

  • --name test:表示为创建后的容器指定名称为test,如果有该参数配置,则生成的容器会设置一个随机名称。

docker run 命令是Docker操作红较为复杂的一个,它可以携带多个参数,我们可以通过docker run --help指令进行查看,其中有些参数如-e、-v和-w等都可以在Dockerfile文件中预先声明。

注意:由于容器的名称具有唯一性,因此创建容器时若指定了容器名称,则后续创建的容器名称不得与此容器名称相同,否则需要重新命名或者将之前的容器删除。

参数补充说明(Docker run 命令):

  • -a stdin:指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d:后台运行容器,并返回容器ID;

  • -i:以交互模式运行容器,通常与 -t 同时使用;

  • -p:端口映射,格式为:主机(宿主)端口:容器端口

  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb":为容器指定一个名称;

  • --dns 8.8.8.8:指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com:指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars":指定容器的hostname;

  • -e username="ritchie":设置环境变量;

  • --env-file=[]:从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2":绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge":指定容器的网络连接类型,支持 bridge/host/none/container:四种类型;

  • --link=[]:添加链接到另一个容器;

  • --expose=[]:开放一个端口或一组端口;

示例

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

7.列出容器

生成容器后,可以通过docker ps指令查看当前运行的所有容器,具体使用方法如下:

$ docker ps

系统终端通过7列对当前的正在运行的一个容器进行了展示,具体含义如下:

  • CONTAINER ID:表示生成的容器ID。

  • IMAGE:表示生成该容器的镜像名称。

  • COMMAND:表示启动容器时运行的命令,Docker要求在启动容器时必须运行一个命令。

  • CREATED:表示容器创建的时间。

  • STATUS:表示容器运行状态,例如Up表示运行中,Exited表示已停止。

  • PORTS:表示容器内部暴露的端口映射到主机的端口

  • NAMES:表示生成容器的名称,由Docker引擎自动生成,可以像上述示例中--name参数指定生成容器名称。

可以通过docker ps --help指令对ps指令详细的信息参数进行查看。

8.执行命令

当生成容器后,客户端可以通过docker exec指令与运行的容器进行通信,在通信时需要指定容器ID或名称,具体方式如下:

$ docker exec f0c9a8b1e2c4 ls -l

执行上述指令后,就会将该容器中的所有文件都展示出来。

9.停止容器

当不需要容器运行时,可以使用docker stop指令停止指定的容器,在停止容器时,需要指定容器ID名称,具体使用方式如下:

$ docker stop f0c9a8b1e2c4

使用上述指令停止容器时,会有所略微延迟,成功后会返回该容器ID,如果想要查看该容器,则可以通过上面学习的docker ps -a 进行查看。

也可以过docker kill指令立即杀死运行的容器进程,使用该指令也需要指定容器ID或名称,具体使用方式如下:

$ docker kill f0c9a8b1e2c4

使用上述命令杀死运行的容器时,几乎是瞬间完成,执行后便会返回该容器的ID。

10.启动容器

容器停止后,如果需要重新访问该容器中的程序,则需要重新启动该容器。启动容器可以通过docker start指令来完成,具体使用方式如下:

$ docker start f0c9a8b1e2c4

还可以使用docker restart 指令重启容器。

注意:docker restart指令即可以重新启动已经停止的容器,也可以重启当前正在运行的容器,具体使用方式如下:

$ docker restart f0c9a8b1e2c4

11.暂停容器

docker pause [OPTIONS] CONTAINER [CONTAINER...]

暂停容器中所有的进程。

12.恢复容器

docker unpause [OPTIONS] CONTAINER [CONTAINER...]

恢复容器中所有的进程。

Docker pause/unpause 命令

13.删除容器

当不需要使用容器时,则可以使用docker rm指令删除已停止的容器,具体使用方式如下:

$ docker rm f0c9a8b1e2c4

注意:上面的指令只能删除已经停止运行的容器,而不能删除正在运行的容器。如果想要删除正在运行容器,则需要添加-f参数强制删除,具体使用方式如下:

$ docker rm -f f0c9a8b1e2c4

当需要删除的容器过多时,如果还一个个删除太麻烦,可以使用如下指令将全部容器删除:

$ docker rm -f $(docker ps -aq)

上述指令中,首先会通过$(docker ps -aq)获取所有容器的ID,然后通过docker rm -f强制删除。

如果开发者有自己特殊的删除需求,可以根据前面docker ps指令进行组装来获取需要删除的容器ID。

Last updated