Docker 系列三: 操作 Docker 容器

本文详细介绍了如何操作Docker容器,包括新建、终止、进入、删除容器,以及容器的导出和导入。通过`docker run`创建并启动容器,使用`docker stop`和`docker kill`来终止容器,`docker attach`和`docker exec`进入容器,`docker rm`删除容器,`docker export`和`docker import`管理容器的备份和恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、新建容器

1. 创建容器

创建容器之☞

create命令与容器运行模式相关的选项

命令

描述

-a, --attach=[]

是否绑定到标准输入、输出和错误

-d,--detach=true|false

是否在后台运行容器,默认为否

--detach-key=""

从 attach 模式退出的快捷键

--encrypoint=""

镜像存在入口命令时,覆盖为新的命令

--expose=[]

指定容器会暴露出来的端口或端口范围

--group-add=[]

运行容器的用户组

-i, --interactive=true|fasle

保持标准输入打开,默认为 false

--ipc=""

容器 IPC 命名空间,可以为其他容器或主机

--isolation="default"

容器使用的隔离机制

--log-driver="json-file"

指定容器的日志驱动类型,可以为 json-file、syslog、journald、gelf、fluented、awslogs、

splunk、etwlogs、gcplogs 或 none

--log-opt=[]

传递给日志的驱动选项

--net="bridge"

指定容器的网络模式,包括 bridge、none、其他容器内网络、host 的网络或某个现有网络等

--net-alias=[]

容器在网络中的别名

-P,--publish-all=true|false

通过 NAT 机制将容器标记暴露的端口自动映射到本地主机的临时端口

-p, --publish-all=true|false

指定如何映射到本地主机端口,例如 -p 11234-12234:1234-2234

--pid=host

容器的 PID 命名空间

--userns=""

启用 userns-remap 时配置用户命名空间的模式

--uts=host

容器的 UTS 命名空间

--restart="no"

容器的重启策略,包括 no 、on-failure{:max-retry}、always、unless-stopped 等

--rm=true|false

容器退出后是否自动删除,不能 -d 同时使用

-t, --tty=true|false

是否分配一个伪终端,默认为 false

--tmpfs=[]

挂载临时文件系统到容器

-v | -- volume [ = [[HOST-DIR:] CONTAINER-DIR[:OPTIONS]]]

挂载主机上的文件卷到容器

--volume-driver=""

挂载文件卷的驱动类型

--volume-from=[]

从其他容器挂载卷

-w, --workdir=""

容器内的默认工作目录

创建容器之☞

create命令与容器环境和配置相关的选项

命令

描述

--add-host=[]

在容器内添加一个主机名到 IP 地址的映射关系(通过 /etc/hosts 文件)

--device=[]

映射物理机上的设备到容器内

--dns-search=[]

DNS 搜索域

--dns-opt=[]

自定义的 DNS 选项

--dns=[]

自定义的 DNS 服务器

-e, --env=[]

指定容器内环境变量

--env-file=[]

从文件中读取环境变量到容器内

-h, --hostname=""

指定容器内的主机名

--ip=""

指定容器的 IPv4 地址

--ip6=""

指定容器的 IPv6 地址

--link=[<name or id>:alias]

链接到其他容器

--mac-address=""

指定容器的 mac 地址

--name=""

指定容器的别名

创建容器之☞

create命令与容器资源限制和安全保护相关的选项

命令

描述

--blkio-weight=10~100

容器读写块设备的 I/O 性能权重,默认为0

--blkio-weight-device=[DEVICE_NAME:WEIGHT]

指定各个块设备的 I/O 性能权重

--cpu-shares=0

允许容器使用 CPU 资源的相对权重,默认一个容器能用满一个核的 CPU 

--cap-add=[]

增加容器的 Linux 指定安全能力

--cap-drop=[]

移除容器的 linux 指定安全能力

--cgroup-parent=""

容器 cgroups 限制的创建路径

--cidfile=""

指定容器的进程 ID 号写到文件

--cpu-period=0

指定容器在 CFS 调度器下的 CPU 占用时间片

--cpuset-cpus=""

限制容器能使用哪些 CPU 核心

--cpuset-mems=""

NUMA 架构下使用哪些核心的内存

--cpu-quota=0

限制容器在 CFS 调度器下的 CPU 配额

--device-read-bps=[]

挂载设备的读吞吐率(以 bps 为单位)限制

--device-write-bps=[]

挂载设备的写吞吐率(以 bps 为单位)限制

--device-read-iops=[]

挂载设备的读速率(以每秒 i/o 次数为单位)限制

--device-write-iops=[]

挂载设备的写速率(以每秒 i/o 次数为单位)限制

--kernel-memory=""

限制容器使用内核的内存大小,单位可以是 b、k、m 或 g

-m, --memory=""

限制容器内应用使用的内存,单位可以是 b、k、m 或 g

--memory-reservation=""

当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值

--memory-swap="LIMIT"

限制容器使用内存和交换区的总大小

--oom-kill-disable=true|false

内存耗尽(Out-Of-Memory)时是杀死容器

--om-score-adj=""

调整容器的内存耗尽参数

--pids-limit=""

限制容器的 pid 个数

--privileged=true|false

是否给容器以最高权限,这意味着容器内应用将不受权限下限制,一般不推荐

--read-only=true|false

是否让容器内的文件系统只读

--security-opt=[]

指定一些安全参数,包括权限、安全能力、apparmor 等

--stop-signal=SIGTERM

指定停止容器的系统信号

--shm-size=""

/dev/shm 的大小

--sig-proxy=true|false

是否代理收到的信号给应用,默认为 true,不能代理 SIGCHLD、SIGSTOP 和 SIGKILL 信号

--memory-swappiness="0-100"

调整容器的内存交换区参数

-u,--user=""

指定在容器内执行命令的用户信息

-ulimit=[]

通过 ulimit 来限制最大文件数、最大进程数等

-l,--label=[]

以键值对方式指定容器的标签信息

--label-file=[]

从文件中读取标签信息

2. 启动容器

3. 新建并启动容器

当利用 docker run 来创建并启动容器时, Docker 在后台运行标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载;

  • 利用镜像创建一个容器,并启动该容器;

  • 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;

  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;

  • 从网桥的地址池配置一个 IP 地址给容器;

  • 执行用户指定的应用程序;

  • 执行完毕后容器被自动终止

 

  • -t 选项让 Dokcer 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

  • -i 则让容器的标准输入保持打开

  • exit 或 Ctrl+D 退出

  • 对于所创建的 bash 容器,当时用 exit 命令退出之后,容器就自动处于退出(Exited)状态了。因为对 Docker 容器来说,当运行的应用退出后,容器也就没有继续运行的必要了。

  • docker run 会出错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码:

    • 125:Docker daemon 执行出错,例如制定了不支持的 Docker 命令参数

    • 126:所指定命令无法执行,例如权限出错;

    • 127:容器内命令无法找到

4. 守护态运行

更多时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。可以通过添加 -d 参数来实现

 

二、终止容器

  • 使用 docker stop 终止一个容器,会首先发送 SIGTERM 信号,等待一段超时时间(默认为10秒)后,再发送 SIGKILL 信号来终止容器

  • docker kill 命令会直接发送 SIGKILL 信号来强行终止容器

  • 当 Docker 容器中指定的应用终结时,容器也会自动终止

  • docker ps-qa 命令会看到所有容器的 ID

  • docker start CONTAINER_ID 启动容器

  • docker restart CONTAINER_ID 会将一个运行态的容器重启

 

三、进入容器

1. attach 命令,Docker自带命令

  • 格式:docker attach [--detach-keys[=[]]]  [--no-stdin] [--sig-proxy[=true]] CONTAINER

  • --detach-keys[=[]]: 指定退出 attach 模式的快捷键序列,默认是 CTRL-p CTRL-q;

  • --no-stdin=true|false: 是否关闭标准输入,默认是保持打开;

  • --sig-proxy=true|false: 是否代理收到的系统信号给应用进程,默认为 true

当多个窗口同时用 attach 命令连到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

2. exec 命令,可以在容器内直接执行任意命令

  • docker exec [-d | --detach] ....

  • -i, --interactive=true|false: 打开标准输入接受用户输入命令,默认为 false;

  • --privileged=true|false: 是否给执行命令以最高权限,默认为 false;

  • -t, --tty=true|false: 分配伪终端,默认 false;

  • -u, --user="": 执行命令的用户名或ID

通过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。通过 exec 命令对容器执行操作是最为推荐的方式。

 

四、删除容器

​使用  docker rm 命令来删除处于终止或退出状态的容器

  • -f, --force=false: 是否强行终止并删除一个运行中的容器;

  • -l, --link=false: 删除容器的连接,但保留容器;

  • -v, --volumes=false: 删除容器挂载的数据卷。

 

五、容器导出和导入

  • 导出:docker export 

  • 导入:docker import

docker load 命令导入镜像存储文件到本地镜像库, docker import 命令导入一个容器快照到本地镜像库。

容器快照文件将丢弃所有的记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。从容器快照文件导入时可以重新指定标签等元数据信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值