大数跨境

详解Docker——你需要知道的Docker进阶知识一

详解Docker——你需要知道的Docker进阶知识一 AI原生电商
2020-03-07
0
导读:在 Docker1.12CLI 中大约有四十个左右的顶级命令,这些命令没有经过任何组织,学习他们对于一个新手来说很不容易。值得庆幸的是在 Docker1.13 中将命令进行了 分组

Docker容器

首先我们可以直接通过 help 或者使用 man 手册的方式查看相关命令的详细说明

 
 
 
 
  1. $ docker --help

在 Docker1.12CLI 中大约有四十个左右的顶级命令,这些命令没有经过任何组织,十分混乱,学习他们对于一个新手来说很不容易。值得庆幸的是在 Docker1.13 中将命令进行了 分组,于是有了如下的 ManagementCommands

 
 
 
 
  1. Management Commands:

  2. builder Manage builds

  3. config Manage Docker configs

  4. container Manage containers

  5. context Manage contexts

  6. engine Manage the docker engine

  7. image Manage images

  8. network Manage networks

  9. node Manage Swarm nodes

  10. plugin Manage plugins

  11. secret Manage Docker secrets

  12. service Manage services

  13. stack Manage Docker stacks

  14. swarm Manage Swarm

  15. system Manage Docker

  16. trust Manage trust on Docker images

  17. volume Manage volumes

docker run

docker run 对应于 ManagementCommands 的命令为

 
 
 
 
  1. docker container run [OPTIONS] IMAGE [COMMAND]

docker run 命令会在指定的镜像 IMAGE 上创建一个可写的容器(因为镜像是只读的),然后运行指定的命令 [COMMAND]。

一些常用的配置项为:

  • -i 或 --interactive, 交互模式

  • -t 或 --tty, 分配一个 pseudo-TTY,即伪终端

  • --rm 在容器退出后自动移除

  • -p 将容器的端口映射到主机

  • -v 或 --volume, 指定数据卷

我们指定 busybox 镜像,然后运行命令 echo"hello docker" 命令,如下所示:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container run busybox echo "hello docker"

  2. hello docker

  3. [root@VM_0_17_centos ~]# docker container ls

  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

在执行命令之后,容器就会退出,如果我们需要一个保持运行的容器,最简单的方法就是给这个容器一个可以保持运行的命令或者应用,比如 bash,例如我们在 ubunutu 容器中运行 /bin/bash 命令:

对于交互式的进程而言(例如这里的 bash),必须将 -i 和 -t 参数一起使用,才能为容器进程分配一个伪终端,通常我们会直接使用 -it。

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container run -i -t ubuntu /bin/bash

  2. root@0c32418e9673:/#

如上所示,我们已经进入到分配的终端中了,这时如果我们需要退出 bash,可以使用以下两种方式,它们的效果完全不同:

  1. 直接使用 exit 命令,这时候 bash 程序终止,容器进入到停止状态

  2. 使用组合键退出,容器仍然保持运行的状态,可以再次连接到这个 bash 中,组合键是 ctrl+p 和 ctrl+q。即先同时按下 ctrl 和 p 键,再同时按 ctrl 和 q 键。就可以退出

这里我们使用第二种方式,然后使用 docker container ls 命令,可以看到该容器仍然处于运行中。

 
 
 
 
  1. root@0c32418e9673:/# [root@VM_0_17_centos ~]# docker container ls

  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  3. 0c32418e9673 ubuntu "/bin/bash" 5 minutes ago Up 5 minutes laughing_brahmagupta

docker container create

严格意义上来讲, docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。而用于创建一个新容器的命令为

 
 
 
 
  1. docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

该命令会在指定的镜像 IMAGE 上创建一个可写容器层,并 准备运行指定的命令。需要着重强调的是,这里是准备运行,并不是立即运行。即该命令只创建容器,并不会运行容器。

一些常见的配置项如下所示:

  • --name 指定一个容器名称,未指定时,会随机产生一个名字。

  • --hostname 设置容器的主机名

  • --mac-address 设置 MAC 地址

  • --ulimit 设置 Ulimit 选项。

除此之外,关于创建容器,还可以设置有关存储和网络的详细内容,我们会在下篇文章中介绍。

如下示例,我们指定容器的名字为 hellodocker,主机名为 hellodocker,设置相应的 MAC 地址,并通过 ulimit 设置最大进程数( 1024:2048 分别代表软硬资源限制),使用 ubuntu 的镜像,并运行 bash:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container create --name hellodocker --hostname hellodocker --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash

  2. ca243c07dcd877537a69433a261ddefd34f4a5d276e527766214cba829559ba9

此时,容器创建成功后,会打印该容器的 ID,这里需要简单说明一下,在 docker 中,容器的标识有三种比较常见的标识方式:

  • UUID 长标识符,例如 ca243c07dcd877537a69433a261ddefd34f4a5d276e527766214cba829559ba9

  • UUID 短标识符,从长标识符开始,只要不与其它标识符冲突,可以从头开始,任意选用位数,例如针对上面的长标识符,可以使用 ca, ca24 等等

  • Name 最后一种方式即是使用容器的名字

在容器创建成功后,我们可以查看其运行状态,使用如下命令:

 
 
 
 
  1. # 此时该容器并未运行,需要使用 -a 参数

  2. $ docker container ls -a

新创建的容器的状态 ( STATUS) 为 Created,并且其容器名被设置为对应的值。

 
 
 
 
  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  2. ca243c07dcd8 ubuntu "/bin/bash" 4 minutes ago Created

查看容器详细信息

查看容器的详细信息可以使用如下命令:

 
 
 
 
  1. docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

例如我们查看刚刚创建的容器的详细信息就可以使用以下命令:

 
 
 
 
  1. $ docker container inspect helodocker

例如,我们查看刚刚创建的名为 hellodocker 的容器的 MAC 地址,就可以使用如下命令:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container inspect hellodocker | grep "00:01"

  2. "MacAddress": "00:01:02:03:04:05",

容器的启动和暂停

容器的启动命令为:

 
 
 
 
  1. docker container start [OPTIONS] CONTAINER [CONTAINER..

对于上面我们创建的容器而言,此时处于 Created 状态,需要使用如下命令启动它:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container start hellodocker

  2. hellodocker

此时,运行一个容器我们分成了两个步骤,即创建和启动,使用的命令如下:

 
 
 
 
  1. # 创建

  2. $ docker container create --name hellodocker --hostname hellodocker --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash


  3. # 启动

  4. $ docker container start hellodocker

上述的两个命令使用 docker container run 只需要一步即可,即 run 命令同时完成了 create 及 start 操作:

 
 
 
 
  1. $ docker container run --name hellodocker --hostname hellodocker --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash

除此之外,上面的 run 命令还完成一些其它的操作,例如没有镜像时会 pull 镜像,使用 -it 参数时完成了 attach 操作(后面会学习该操作),使用 --rm 参数在容器退出后还会完成 container rm 操作。

run 命令是一个综合性的命令,如果能够熟练的使用它可以简化很多步骤,但是其使用方式较为复杂

启动之后,暂停容器可以使用如下命令:

 
 
 
 
  1. # 暂停一个或多个容器

  2. docker container stop [OPTIONS] CONTAINER [CONTAINER...]


  3. # 暂停一个或多个容器中的所有进程

  4. docker container pause CONTAINER [CONTAINER...]

上述两个命令的区别在于一个是暂停容器中的进程,而另外一个是暂停容器,例如,我们使用 stop 停止刚刚启动的容器就可以使用如下命令:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container stop hellodocker

  2. hellodocker

  3. [root@VM_0_17_centos ~]# docker container ls -a

  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  5. ca243c07dcd8 ubuntu "/bin/bash" 35 minutes ago Exited (0) 11 seconds ago hellodocker

如上图所示,容器被暂停后,此时处于 Exited 状态。

连接到容器

上述操作我们启动的容器运行于后台,所以,我们需要使用 attach 操作将本地标准输入输出流连接到一个运行中的容器,命令格式为:

 
 
 
 
  1. docker container attach [OPTIONS] CONTAINER

如下示例,我们启动容器,并使用连接命令:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container start hellodocker

  2. hellodocker

  3. [root@VM_0_17_centos ~]# docker container attach hellodocker

  4. root@hellodocker:/# ifconfig

其他命令

获取日志

获取容器的输出信息可以使用如下命令:

 
 
 
 
  1. docker container logs [OPTIONS] CONTAINER

常用的配置选项有:

  • -t 或 --timestamps 显示时间戳

  • -f 实时输出,类似于 tail-f

如下所示,我们查看刚刚创建的容器的日志,使用如下命令:

显示进程

除了获取日志之外,还可以显示运行中的容器的进程信息,例如查看刚刚创建的容器的进程信息:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container top hellodocker

  2. UID PID PPID C STIME TTY TIME CMD

  3. root 27655 27639 1 00:27 ? 00:00:00

查看修改

查看相对于镜像的文件系统来说,容器中做了哪些改变,例如我们在 hellodocker 容器中创建一个文件,就可以使用 diff 命令查看到相应的修改:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker attach hellodocker

  2. root@hellodocker:/# ls

  3. bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

  4. root@hellodocker:/# touch test1


  5. [root@VM_0_17_centos ~]# docker container diff hellodocker

  6. C /root

  7. A /root/.bash_history

  8. A /test1

重启

重启容器可以使用如下命令:

 
 
 
 
  1. docker container restart hellodocker

执行命令

除了使用 docker container run 来创建容器并在容器里执行命令之外,我们还可以在一个已经处于运行中的容器中执行命令,使用如下格式:

 
 
 
 
  1. docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

例如,我们在刚刚创建的容器中执行 echo"test_exec" 命令,就可以使用如下命令:

 
 
 
 
  1. [root@VM_0_17_centos ~]# docker container exec hellodocker echo "test_exec"

  2. test_exec

删除容器

删除容器的命令:

 
 
 
 
  1. docker container rm [OPTIONS] CONTAINER [CONTAINER...]

需要注意的是,在删除容器后,在容器中进行的操作并不会持久化到镜像中

【声明】内容源于网络
0
0
AI原生电商
1234
内容 53
粉丝 0
AI原生电商 1234
总阅读0
粉丝0
内容53