【Docker系列】Docker操作常用命令

相关术语

Image:镜像。本文特指 Docker Image 。
Container:容器。本文特指 Docker Image Container。

Docker 通用操作

1.确认Docker版本

docker --version

2.获取帮助

docker --help

当然你也可以使用下列命令获取各项command的帮助

docker image --help
docker build --help

Image 相关操作

1.获取Image列表。

docker image ls

如果需要列出所有的Image(包括隐藏属性的Image)可以添加“-a”选项。

docker image ls -a

2.从Docker Hub获取Image

通用命令如下。其中ImageName表示镜像名称,TAG表示标签。默认从Docker Hub网站上下载。

docker image pull [ImageName]:[Tag] 

示例:

docker image pull alpine:3.10.5

需要注意的是,这里的Tag可以省略。如果省略则默认为Tag为‘latest’的版本,即最新版本。

docker image pull alpine

通过docker image ls命令我们可以看到两个不同版本的alpine

➜  docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
alpine                  3.10.5              be4e4bea2c2e        6 hours ago         5.58MB
alpine                  latest              f70734b6a266        6 hours ago         5.61MB

常用的image都可以从Docker Hub上找到。alpine是一个常用于生产环境的极简化Linux系统的Image。

3.更改Image的名称和tag

通用命令如下。Image:Tag为更改前的状态,NewImage:NewTag为更改后的状态。

docker image tag [Image:Tag] [NewImage:NewTag]

例如:

docker image tag alpine:3.10.5 helloworld:v1.0

通过docker image ls命令,我们可以看到helloworld:v1.0的镜像生成,而alpine:3.10.5也仍然存在。

➜  docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
alpine                  3.10.5              be4e4bea2c2e        6 hours ago         5.58MB
helloworld              v1.0                be4e4bea2c2e        6 hours ago         5.58MB

4.删除Image

通用命令如下。其中rm是remove的缩写,-f表示强制删除(即使由此Image生成的Continer正在运行,这个Image也会被删除)。

docker image rm -f [Image]:[Tag]

例如:

docker image rm -f alpine:latest

Container相关操作

Container 有5种状态,分别是:created(已创建),running(正在运行),paused(暂停中),exited(已终止),deleted(已删除)。

让我们来观察一张容器生命周期示意图:

出处:Docker | Docker技术基础梳理(三) – 容器生命周期管理
注释:图中的命令都不含有 container 并非错误,而是旧版本的命令中都不包含 container ,可以互换使用,但更推荐使用带有 container 的命令。

Image为Container的模版,从Image出发,
使用 docker container create 命令创建一个新的容器(created);
使用 docker container start 命令来执行容器(running);
使用 docker container run 命令来执行容器(running);
使用 docker container restart 命令重启这个容器(running);
使用 docker container paused 命令暂停这个容器(paused);
使用 docker container unpaused 命令恢复运行容器(running);
使用 docker container stop 命令终止容器(exited);
使用 dokcer container rm [-f] 命令删除容器(deleted);

接着让我们具体来使用下这些命令。

查看Container状态

查看正在运行的容器:

docker ps

查看所以容器命令如下。这里的 -a-all 的缩写,即查看全部容器。

docker ps -a

根据容器的某个值查看容器状态,可以使用如下命令:

docker ps -a -f name=value

这里的 name 表示项目名,value 表示此项目所对应的值。所有符合条件的结果都会被打印在命令行中。比如通过容器ID查看容器状态。(如何生成并启动Container将在下面介绍)

➜ docker ps -a -f ID=56114207ca65
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
56114207ca65        ubuntu              "/bin/bash"         52 seconds ago      Up 19 seconds                           laughing_wright

创建Container

通用命令如下。其中ImageName为所要使用的Image的名称,Tag为其标签。Tag可以省略,在省略的情况下,默认标签为latest

docker container create [ImageName]:[Tag]

例如:

docker container create ubuntu:18.04
docker container create ubuntu:latest
docker container create ubuntu

后两个命令本质上没有区别。(2020/4/26时的latest版本为20.04)
如果创建交互模式的容器,需要增加-it选项。

docker container create -it [ImageName]:[Tag]

例如

docker container create -it ubuntu:18.04

创建成功后,终端会返回给我们一个字符串。

➜ docker container create -it ubuntu:18.04
3aae22e8e5c165ea3d4fc3cea19b30228902bd5a81e049191638b3b1ae90a15f

这个字符串就是创建好的容器ID。我们可以通过docker ps -a 命令来查看上述容器是否已经被创建。

➜ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
3aae22e8e5c1        ubuntu:18.04        "/bin/bash"              3 minutes ago       Created                                            dazzling_panini

可以看到,CONTAINER ID3aae22e8e5c1的Container已经被创建。而这里的CONTAINER ID则是上述容器ID的缩写(前12字符),指的是同一个Container。因此,在docker的所有命令中可以等价使用。

启动Container

通用命令如下。这里的[ContainerID]指的是已经创建好的容器的ID,

docker container start [ContainerID]

我们在前面已经创建好了容器ID为3aae22e8e5c1的Container,我们来启动这个容器。

docker container start 3aae22e8e5c1

使用docker ps 命令来查看上述Container是否处于运行状态。

➜ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3aae22e8e5c1        ubuntu:18.04        "/bin/bash"         13 minutes ago      Up About a minute                       dazzling_panini

可以发现,容器ID为3aae22e8e5c1STATUSUp About a minute,即running状态。

需要注意的是,这里启动的为交互模式的容器。如果启动非交互模式的容器,则容器启动完成后便会进入终止状态。

# 创建容器
➜ docker container create ubuntu
3f6cb1ca05dc52620c1c1a9d8d5062edb9518d820617ac2fcb859c383e3212a0
# 启动容器
➜ docker container start 3f6cb1ca05dc
3f6cb1ca05dc
# 查看容器
➜ docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED              STATUS                        PORTS               NAMES
3f6cb1ca05dc        ubuntu               "/bin/bash"              About a minute ago   Exited (0) 4 seconds ago                          elastic_rubin

可以看到容器ID为 3f6cb1ca05dc 的容器 statusExited

访问(连接)Container

通用命令:

docker container attach [ContainerID]

访问之前我们已经启动的容器ID为 3aae22e8e5c1 的容器。接着我们来访问一下该容器。

➜ docker container attach 3aae22e8e5c1
root@3aae22e8e5c1:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

可以看到我们成功连接了容器的主进程,并且可以执行shell命令。使用 exit 命令中断连接。

root@3aae22e8e5c1:/# exit
exit

查看该容器状态,可以发现该容器已经终止。

➜ docker ps -a -f ID=3aae22e8e5c1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
3aae22e8e5c1        ubuntu:18.04        "/bin/bash"         5 hours ago         Exited (0) 2 minutes ago                       dazzling_panini

创建并启动Container

如果需要创建之后立即启动容器,可以使用下面的命令:

docker container run [IMAGE]:[TAG]

例如:

docker container run hello-world:latest

以交互模式启动一个容器,使用选项 -it

-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

在启动交互模式的同时,在容器内执行/bin/bash,方法如下:

docker container run -it [ImageName]:[Tag] /bin/bash

例如:使用镜像 nginx:latest 以交互模式启动一个容器,在容器内执行/bin/bash命令。

➜ docker container run -it nginx:latest /bin/bash
root@81e4292bb969:/# exit
exit

输入 exit 命令可以中断连接。中断的同时,容器也会终止运行。
如果需要给启动的容器附上一个名字,可以增加 “–Name”的选项。例如:

docker container run --name mynginx -it nginx:latest /bin/bash

查看该容器状态,可以发现 Names 一栏为 mynginx

➜  ~ git:(master) ✗ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
138e784ee1f3        nginx:latest        "/bin/bash"         14 seconds ago      Up 14 seconds       80/tcp              mynginx

容器的80端口映射到主机随机端口,则需要添加 -p 选项。这里的选项 -d 表示后台运行容器,并返回容器ID。

docker container run -P -d nginx:latest

查看容器状态。发现容器的80端口映射到了主机端口32770。可以通过浏览器访问 localhost:32770 进行测试。

➜  ~ git:(master) ✗ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
2ab3750c9fc2        nginx:latest        "nginx -g 'daemon of…"   6 seconds ago       Up 5 seconds        0.0.0.0:32770->80/tcp   gallant_mendel

也可以指定容器和主机的映射端口。比如将容器的80端口映射主机的1000端口,则命令如下:

docker container run -p 1000:80 -d nginx:latest

将容器的80端口映射主机的2000端口,将主机的目录 ~/data 映射到容器的 /data。

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

访问(连接)Container

通用命令:

docker container exec -it  [containerID] /bin/bash

尝试连接上述挂载卷的容器:

➜  docker container exec -it 974f099cb6c8 /bin/bash
root@974f099cb6c8:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

我们发现容器主目录下挂载了 data
成功连接后,退出使用 exit 命令。并且退出后,容器会保持正常运行。

暂停Container

通用命令:

docker container pause [ContainerID]

例如:

➜ docker container pause 56114207ca65
56114207ca65

查看该容器状态。

➜  ~ git:(master) ✗ docker ps -a -f ID=56114207ca65
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
56114207ca65        ubuntu              "/bin/bash"         About an hour ago   Up About an hour (Paused)                       laughing_wright

可以看到该容器状态为 Up About an hour (Paused),即为暂停。

恢复Container

docker container unpause [ContainerID]

例如:

➜ docker container unpause 56114207ca65
56114207ca65

查看该容器状态。

➜  ~ git:(master) ✗ docker ps -a -f ID=56114207ca65
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
56114207ca65        ubuntu              "/bin/bash"         About an hour ago   Up About an hour                        laughing_wright

可以看到该容器状态为 Up About an hour,即为正在运行。

停止Container

通用命令:

docker container stop [ContainerID]

例如:

➜ docker container stop 56114207ca65
56114207ca65

查看该容器状态。

➜  ~ git:(master) ✗ docker ps -a -f ID=56114207ca65
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
56114207ca65        ubuntu              "/bin/bash"         About an hour ago   Exited (0) 3 seconds ago                       laughing_wright

可以看到该容器状态为 Exited (0) 3 seconds ago,即为终止。

删除Container

通用命令:

docker container rm [ContainerID]

例如:

➜ docker container rm 56114207ca65
56114207ca65

查看该容器状态。

➜ docker ps -a -f ID=56114207ca65
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

可以看到该容器已被删除。

参考

Docker | Docker技术基础梳理(三) – 容器生命周期管理
Docker run 命令

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Close Bitnami banner