管理docker容器——深入了解

选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。

管理docker容器——深入了解

Docker architecture

上一节对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,查看以下代码

版权声明:著作权归作者所有。

相关推荐

[译]了解AttnGAN:文字到图像转换器

文字到图像的转换一直令我着迷,最近的AttnGAN论文引起了我的注意。 在这篇文章中,我会试着提供一个直观的说明,希望让你好奇,进一步挖掘:-)。在我们开始实际模型之前,有一些先决条件:1、注意力为了避免重蹈覆辙(并推广我自己的课程),请看我以前的帖子,我在这里提供了一个关于“深度学习中的注意力”的小介绍。2、生成式对抗网络简单地说,一个GAN是两个网络的组合:一个生成器(从噪声中产生有

[译]了解AttnGAN:文字到图像转换器

文字到图像的转换一直令我着迷,最近的AttnGAN论文引起了我的注意。 在这篇文章中,我会试着提供一个直观的说明,希望让你好奇,进一步挖掘:-)。在我们开始实际模型之前,有一些先决条件:1、注意力为了避免重蹈覆辙(并推广我自己的课程),请看我以前的帖子,我在这里提供了一个关于“深度学习中的注意力”的小介绍。2、生成式对抗网络简单地说,一个GAN是两个网络的组合:一个生成器(从噪声中产生有

docker-machine配置导入/导出脚本

为了在多个主机同步docker-machine的配置,常常需要对docker-machine配置进行导入导出。这里附上两个脚本分别用于导出/导入docker-machine配置:docker-machine-export.sh和docker-machine-import.sh。这两个脚本需要所有的主机系统有相同的$MACHINE_STORAGE_PATH/certs。用法如下:导出(主机 

Anaconda管理环境命令

基本命令conda upgrade --all #默认情况下更新所有的包 conda install package_name = version #安装指定的包(可同时安装多个包并附加版本) conda remove package_name #卸载包 conda list&n

RabbitMQ使用rabbitmqctl添加用户管理

rabbitmqctrl是RabbitMQ的管理工具,在RabbitMQ安装目录的sbin下。虚拟主机管理添加虚拟主机rabbitmqctl add_vhost <vhost> 删除虚拟主机rabbitmqctl delete_vhost <vhost>用户管理 添加用户rabbitmqctl add_user <username> <

Linux 系统用户账号的管理

1. 用户账号的优势 帮助系统管理员对使用系统的用户进行跟踪 控制用户对系统资源的访问 帮助用户组织文件,为用户提供安全保护 2. 添加新的用户添加命令useradd 选项 用户名常用选项-d<目录>, 设置用户主目录,默认值为用户的登录名,并放在 /home 目录下;如果此目录不存在,则同时使用 -m 选项,可以创建主目录。-g<用户组>,指

VSCode 以管理员权限打开终端

在window使用VSCode的终端时,有时需要有管理员的权限。我们只需要以管理员打开vs code,那么打开的终端也是管理员权限。两种方式以管理员权限打开vscode:方式一:右键vscode图标,选择“以管理员身份运行(A)”方式二:设置为默认以管理员身份运行:右键vscode图标  -> 属性 -> 兼容性 -> 打勾“以管理员身份运行此程序”,如图:

JPA实体状态深入理解

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:瞬时态(transient)托管态(persistent)游离态(detached)移除态(removed)注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。为什么会有这四种状态呢?啥,这个也有为啥,网上不是都这么说的

【译】深入了解React 18的自动批处理

 React在事件处理或者内置的hook中,使用批处理合并多个状态的更新。避免了每次的状态更新都要重新渲染组件,从而提高应用的性能。在React 17以及之前的版本,仅支持浏览器事件的批更新。React 18更新带来增强版的批处理,称为自动批处理(Automatic Batching)。它对所有状态的更新,不管来源哪里,都可以使用批处理。React 17的批处理如上面提到的,React