docker 实践三:操作容器

Posted xingyys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 实践三:操作容器相关的知识,希望对你有一定的参考价值。

在学习了 docker 镜像的内容后,我们在来看 docker 的另一个核心点:容器。

注:环境为 CentOS7,docker 19.03

docker 的容器是镜像的一个运行实例。docker 镜像是只读文件,而容器则带有运行时的可读写层,而且容器中的应用进程处于运行状态。接下来我们就来学习 docker 容器的具体操作。

创建容器

创建容器相关的命令有 create、start、run、wait 和 logs。

新建容器

使用命令 docker [container] create 新建一个容器:

# docker create -it ubuntu:latest
63197c11dc16e893dc8bb032ebf92419032cc40d6dcb6f750a16e9e308d52584
# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                  PORTS                    NAMES
63197c11dc16        ubuntu:latest         "/bin/bash"              5 seconds ago       Created                                          hardcore_raman

docker create 命令对应的参数有很多,下面列出对应的选项:
create 命令与容器运行模式相关的选项
技术图片
技术图片
create 命令与容器环境和配置相关的选项
技术图片
create 命令与容器资源限制和安全保护相关的选项
技术图片
技术图片
技术图片
技术图片

以及:

  • -l, --label=[]: 以键值对?式指定容器的标签信息;
  • --label-file=[]: 从?件中读取标签信息。

启动容器

使用该命令新建的容器处于停止状态,使用命令 docker [container] start启动容器,通过 docker [container] ps查看运行中的容器:

# docker start 63197c11dc16e893dc8bb032ebf92419032cc40d6dcb6f750a16e9e308d52584
63197c11dc16e893dc8bb032ebf92419032cc40d6dcb6f750a16e9e308d52584
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
63197c11dc16        ubuntu:latest       "/bin/bash"              About a minute ago   Up 3 seconds                                 hardcore_raman

我们还可以将新建和启动容器合起来,命令 docker [container] run 就是两个命令的组合:

# docker run ubuntu /bin/echo "Hello World"
Hello World
# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS                    NAMES
5982bad8cf83        ubuntu                "/bin/echo 'Hello Wo…"   7 seconds ago       Exited (0) 6 seconds ago                            exciting_lalande

使用 run 命令实际上在后台包含了以下过程:

  • 检查本地是否存在指定的镜像, 不存在就从公有仓库下载;
  • 利?镜像创建?个容器, 并启动该容器;
  • 分配?个?件系统给容器, 并在只读的镜像层外?挂载?层可读写层;
  • 从宿主主机配置的?桥接?中桥接?个虚拟接?到容器中去;
  • 从?桥的地址池配置?个IP地址给容器;
  • 执??户指定的应?程序;
  • 执?完毕后容器被?动终?。

注:运行结束后容器就会停止。

还可以在创建时启动一个 bash 终端,这样就能和容器交互了:

# docker run -it ubuntu bash
root@264cf6ed894e:/# 
  • -t:选项让Docker分配?个伪终端(pseudo-tty) 并绑定到容器的标准输?上,
  • -i:则让容器的标准输?保持打开。

退出容器

?户可以按 Ctrl+d 或输? exit 命令来退出容器,也可以使用命令 docker container wait CONTAINER[CONTAINER...] ?命令来等待容器退出, 并打印退出返回结果。

root@264cf6ed894e:/# exit
exit

如果启动容器的出项错误,有以下错误代码:

  • 125: Docker daemon执?出错, 例如指定了不?持的Docker命令参数;
  • 126: 所指定命令?法执?, 例如权限出错;
  • 127: 容器内命令?法找到。

后台运行

如果需要让容器在后台以守护态(Daemonized) 形式运?,可以通过 -d 参数实现:

# docker run -itd ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"
5352f3e531b2f451ec6b484a6d35d1fd064438fa3d3404691b80b98bbc6e7801

它会返回一个唯一的id值,使用 docker psdocker container ls 来查看容器信息:

# docker container ls 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
5352f3e531b2        ubuntu              "/bin/bash -c 'while…"   2 minutes ago       Up 2 minutes                                 lucid_albattani

查看容器输出

刚才通过 -d 让容器以后台方式运行,我们没有看到它的输出信息,可以使用命令docker [container] logs命令查看,该命令包含以下选项:

  • -details: 打印详细信息;
  • -f, -follow: 持续保持输出;
  • -since string: 输出从某个时间开始的?志;
  • -tail string: 输出最近的若??志;
  • -t, -timestamps: 显?时间戳信息;·-until string: 输出某个时间之前的?志。
# docker logs 5352f3e531b2
hello world

注:创建容器后会返回一个唯一的id,但一般我们截取字符前面的一部分,保证能认到这个容器就可以了。

停止容器

停止容器使用的子命令为 pause/unpause、stop、prune。

暂停容器

使用命令docker [container] pause CONTAINER[CONTAINER...]来暂停一个运行中的容器

# docker run --name test --rm -itd ubuntu bash
c1a52ffc5f662b2e60bcd98fe81157754cb251b22a624e8a6a32785905d5b93e
# docker pause c1a52ffc5
c1a52ffc5
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                    NAMES
c1a52ffc5f66        ubuntu              "bash"                   16 seconds ago      Up 16 seconds (Paused)                            test

出于 paused 状态的容器就可以使用 docker [container] unpause CONTAINER[CONTAINER...] 命令来恢复了。

注:启动时添加 --rm 选项时,在容器退出后会删除容器。

停止容器

使用命令docker [container] stop [-t|--time[=10]] [CONTAINER...]停止容器:

# docker stop 5352f3e531b2
5352f3e531b2

现在使用命令 docker container prune 会删除所有处于停止状态的容器。

除了 stop 外,使用命令docker [container] kill或在交互模式下通过命令exitCtrl+d都可以停止容器。

属于停止状态的容器,可以使用命令 docker [container] start 来启动,或者是命令 docker [container] restart 来先停止再启动。

以上是关于docker 实践三:操作容器的主要内容,如果未能解决你的问题,请参考以下文章

Docker 从入门到实践系列三 - Docker 常用命令

13-Docker 技术基本应用实践

Docker入门到实践——简单操作

Docker容器日志管理实践

Docker实践之01-入门介绍

虚拟化容器docker实践基础