管理docker容器——深入了解

上一节对Docker镜像有了一定的深入理解,这一节我们来学习如何管理Docker容器
Docker 容器是另一个重要的概念。容器是镜像的可运行实例。容器是一组独立运行的应用程序。示例可以使用 centos7 + jdk + tomcat + web-app 构建单个容器。它运行的隔离环境称为 docker 运行时。在本页中,将通过示例讨论如何执行 docker run、docker exec、导入容器、导出容器、清理容器。
Docker容器的一些命令
Docker run 用于从 IMAGE 创建容器并运行它。
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
docker run -it --rm nginx:latest bash
启动一个容器
基本上有两种启动容器的方法,
(i)使用 docker run 从 docker 映像创建容器或
(ii)使用 docker start 启动终止/停止的容器
Docker 容器是轻量级的,通常的做法是随时删除和重新创建容器。
创建一个容器并运行
基本上, docker run 用于创建容器并从镜像运行。此镜像必须在注册表(docker hub 或自定义注册表)中可用,或者您使用 docker build 命令从 Dockerfile 构建镜像。
让我们看下面的例子:
docker run -it --name centos-container centos:7 bash

上面的例子运行 centos:7 docker 容器并将容器命名为 centos-container。输入 exit 退出容器,这也将终止容器。现在运行 docker container ls --all,您将能够在容器列表中看到 centos:7。
现在,使用以下命令再次启动终止的容器
docker start centos-container

停止容器并再次启动容器
运行 docker stop containerID/containerNAME 以停止正在运行的容器。您可以使用 docker start 再次启动容器。
docker stop centos-container
docker start centos-container
暂停正在运行的容器并取消暂停
使用 docker pause 暂停,使用 docker unpause 恢复容器。
docker pause centos-container
docker unpause centos-container
连接正在运行的容器
有时您需要进入正在运行的容器来调试、检查或运行命令。 Docker 提供了 2 个相同的命令, docker attach 和 docker exec 。
使用 docker attach
Docker attach 用于将终端连接到正在运行的容器。查看不同的示例以清楚了解何时使用此命令。
docker attach [OPTIONS] CONTAINER
示例(按 ctrl + c 退出容器)
docker run -d --name topdemo ubuntu /usr/bin/top -b
docker attach topdemo

Linux top 命令可以显示系统摘要信息以及当前由 Linux 内核管理的任务列表。以上示例说明了如何将本地终端连接到正在运行的容器。
在下面的示例中,您将看到 bash 进程返回的exit 13
,也由 docker attach
命令返回。

使用 docker execute
正如官方文档所说,使用 docker exec 在正在运行的容器中运行命令。命令在运行容器的默认目录中运行。默认目录在 Dockerfile 中指定为 WORKDIR。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
在下面的示例中,-d 用于打印摘要,以便您可以连接到它。 -i 以交互模式启动,-t 以新的终端会话启动。
docker run -dit centos
从上面复制摘要并将其与可用命令一起使用。
docker exec -it 6f2b11a3af bash

始终建议使用 docker exec 而不是 docker attach
导出和导入 docker 容器
使用 docker export 或 docker container export 命令将容器的文件系统导出为 tar 存档。
docker export [OPTIONS] CONTAINER
看下面的例子
docker run --name export-import-container -d -it debian
docker export export-import-container > centos:7.tar

同样,使用 docker import 命令从 tarball 导入内容以创建文件系统镜像。
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
重新导入,上面导出的centos:7.tar,按照下面的代码
cat centsos:7.tar | docker import - test/imported-centos
或者,您可以通过指定 URL 或目录来导入它,例如
docker import http://example.com/exampleimage.tgz example/imagerepo
注意:使用 docker load 导入存储在本地镜像库中的镜像文件。使用 docker import 将容器的快照导入本地镜像库。两者的区别在于容器快照文件会丢弃所有的历史和元数据信息(即只有容器当时的快照状态),而镜像存储文件会保存完整的记录,而且很大。此外,从容器快照文件导入时,可以重新分配标签等元数据信息。
清理容器
通常的做法是清理/删除旧容器并从映像存储库中重建新容器。在您的情况下,您可能每天早上都部署了一个测试版本,因此基本上删除旧容器并重新创建新容器。
使用 docker rm containerId 或 docker container rm containerId 删除容器。您可以使用 containerId、container-name 或 digest 来删除。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
删除特定容器的示例
docker rm 7ea20a106509
使用上面的命令,你只能删除一个终止的容器。使用 -f 强制删除正在运行的容器,但要小心。
要清理所有终止的容器,请使用 docker container prune,查看以下代码
