Docker 操作指令

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

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