ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Docker入门与实战——操作Docker容器

2026/10/8 13:17:12 拓冰建站 浏览量
Docker入门与实战——操作Docker容器 操作Docker容器1、创建容器1.1、新建容器1.2、启动容器1.3、新建并启动容器1.4、守护态运行1.5、查看容器输出2、停止容器2.1、暂停容器2.2、终止容器3、进入容器3.1、attach命令3.2、exec命令4、删除容器5、导入和导出容器5.1、导出容器5.2、导入容器6、查看容器6.1、查看容器详情6.2、查看容器内进程6.3、查看统计信息7、其他容器命令7.1、复制文件7.2、查看变更7.3、查看端口映射7.4、更新配置容器是Docker的另一个核心概念。简而言之容器可以被理解为镜像的一个运行实例。它们之间的主要区别在于镜像是静态的只读文件而容器则包含运行时所需的可写文件层。此外容器中的应用进程会处于运行状态。相较于虚拟机模拟一整套操作系统包括内核、应用运行态环境和其他系统环境以及在操作系统上运行的应用Docker容器更像是一个或一组独立运行的应用以及它们所需的运行环境。本章将详细介绍与容器相关的重要操作包括创建容器、启动容器、终止容器、在容器内执行操作、删除容器以及通过导入或导出容器实现容器迁移等。1、创建容器本节主要介绍Docker容器的create、start、run、wait和logs子命令。1.1、新建容器可以使用docker create命令新建一个容器例如当使用docker create命令创建新容器时容器将处于停止状态。要启动容器可以使用docker start命令。由于容器是Docker技术栈的核心组成部分create以及后续的run命令都支持众多的命令选项主要包括基本选项、高级选项以及容器资源限制和安全保护相关选项因此读者应在实际操作中不断积累经验以更好地掌握这些选项的使用方法。下表中显示了基本选项及对应描述。高级选项及描述如下表所示。容器资源限制和安全保护的相关选项及描述如下表所示。1.2、启动容器使用docker start命令来启动一个已经创建的容器。例如启动刚创建的Ubuntu容器此时通过docker ps命令可以查看到一个运行中的容器1.3、新建并启动容器除了可以创建容器后通过start命令来启动容器也可以直接新建并启动容器。所需要的命令主要为docker run等价于先执行docker create命令再执行docker start命令。例如下面的命令输出一个“Hello World”​之后容器自动终止这与在本地直接执行/bin/echo hello world’一样快。在使用docker run命令创建并启动容器时Docker会在后台执行以下标准操作检查本地是否存在指定的镜像如果不存在则从公共仓库下载。基于镜像创建一个新容器并启动它。为容器分配一个文件系统在只读镜像层外添加一层可读写层。将宿主机的网桥接口桥接一个虚拟接口到容器内。从网桥的地址池中为容器配置一个IP地址。执行用户指定的应用程序。应用程序执行完成后容器将自动终止。下面的命令将启动一个bash终端允许用户在容器内进行交互其中-t选项让Docker分配一个伪终端(pseudo-tty)并将它绑定到容器的标准输入上-i则让容器的标准输入保持打开状态–rm让容器退出后自动删除容器一般跟随-it使用。更多的命令选项可以通过man docker-run命令查看。在交互模式下用户可以通过所创建的终端来输入命令例如对于所创建的bash容器在用户使用exit命令退出bash进程之后容器也会自动退出。这是因为对于容器来说当其中的应用退出后容器的使命完成也就没有继续运行的必要了。可以使用docker wait CONTAINER[CONTAINER…]子命令来等待容器退出并输出退出的错误码返回结果。某些时候因为docker run命令无法正常执行容器会出错直接退出此时可以查看退出的错误码。默认情况下常见的错误代码包括125Docker daemon执行出错例如指定了不支持的Docker命令参数。126所指定的命令无法执行例如权限出错。127容器内命令无法找到。命令执行出错后会默认返回命令的退出错误码。1.4、守护态运行更多的时候需要让Docker容器在后台以守护态(Daemonized)形式运行。此时可以通过添加-d参数来实现。例如下面的命令会在后台运行容器容器启动后会返回一个唯一的id也可以通过docker ps或docker container ls命令来查看容器信息1.5、查看容器输出要获取容器的输出信息可以使用docker logs命令。支持的选项包括--details输出详细信息。-f,--follow持续保持输出。--since string输出从某个时间开始的日志。--tail string输出最近的若干日志。-t,--timestamps显示时间戳信息。--until string输出某个时间之前的日志。例如查看某个容器的输出可以使用以下命令2、停止容器本节主要介绍Docker容器的pause/unpause、stop和prune子命令。2.1、暂停容器可以使用docker pause CONTAINER[CONTAINER...]命令来暂停一个运行中的容器。例如启动一个容器并将其暂停对于处于paused状态的容器可以使用docker [container] unpause CONTAINER[CONTAINER...]命令恢复到运行状态。2.2、终止容器可以使用docker stop命令来终止一个运行中的容器。该命令的格式为docker stop[-t|--time[10]​]​[CONTAINER...]​。该命令会首先向容器发送SIGTERM信号等待一段时间默认10s超时后再发送SIGKILL信号来终止容器此时执行docker prune命令会自动清除所有处于停止状态的容器。还可以通过docker kill命令直接发送SIGKILL信号来强行终止容器。当Docker容器中指定的应用终结时容器也会自动终止。例如对于只启动了一个终端的容器用户通过exit命令或CtrlD来退出终端时所创建的容器立刻终止处于Stopped状态。可以用docker ps-qa命令看到所有容器的ID。例如对于处于终止状态的容器可以通过docker start命令重新启动docker restart命令会将一个运行态的容器先终止然后再重新启动3、进入容器在使用-d参数时容器启动后会进入后台用户无法看到容器中的信息也无法进行操作。这时如果需要进入容器进行操作推荐使用官方的attach或exec命令。3.1、attach命令attach是Docker自带的命令命令格式为这个命令支持三个主要选项--detach-keys[[​]​]​指定退出attach模式的快捷键序列默认是CTRL-P和CTRL-Q。--no-stdintrue|false是否关闭标准输入默认保持打开。--sig-proxytrue|false是否将容器收到的系统信号代理转发给应用进程默认为true。下面的示例演示了如何使用该命令然而使用attach命令有时并不方便。当多个窗口同时进入同一个容器的时候所有窗口都会同步显示。当某个窗口因命令而发生阻塞时其他窗口也无法执行操作了。3.2、exec命令从Docker1.3.0版本起可以直接使用exec命令在运行中的容器内执行给定指令。该命令的基本格式为比较重要的参数有-d,--detach在容器中的后台执行命令。--detach-keys指定将容器切回后台的按键。-e,--env[​]​指定环境变量列表。-i,--interactivetrue|false打开标准输入接受用户输入命令默认为false。--privilegedtrue|false是否给执行命令以高权限默认为false。-t,--ttytrue|false分配伪终端默认为false。-u,--user执行命令的用户名或ID。例如进入刚创建的容器中并启动一个bash可以看到会打开一个新的bash终端在不影响容器内其他应用的前提下用户可以与容器进行交互。注意-it参数会保持容器的标准输入打开状态并且为容器分配一个伪终端。开启终端后用户可以在容器中通过命令行进行操作例如查看容器中的用户和进程信息4、删除容器可以使用docker rm命令来删除处于终止或退出状态的容器命令格式为主要支持的选项包括-f,--forcefalse是否强行终止并删除一个运行中的容器。-l,--linkfalse删除容器的链接但保留容器。-v,--volumesfalse删除容器挂载的数据卷。例如查看处于终止状态的容器并删除默认情况下docker rm命令只能删除已经处于终止或退出状态的容器并不能删除还处于运行状态的容器。如果要直接删除一个运行中的容器可以添加-f参数。Docker会先发送SIGKILL信号给容器终止其中的应用之后强行删除。5、导入和导出容器在某些情况下可能需要将容器从一个系统迁移到另一个系统。这时可以利用Docker提供的导入(import)和导出(export)功能来实现。5.1、导出容器导出容器是指导出一个已经创建的容器到一个文件不管此时这个容器是否处于运行状态。可以使用docker export命令导出容器该命令格式为其中可以通过-o选项来指定导出的tar文件名也可以直接通过重定向来实现。首先查看所有容器如下所示分别导出ce554267d7a4容器和e812617b41f6容器到文件test_for_run.tar和test_for_stop.tar之后可将导出的tar文件传输到其他机器上然后再通过导入命令导入系统中实现容器的迁移。5.2、导入容器导出的文件又可以通过docker import命令导入变成镜像该命令格式为用户可以通过-c,–change[​]选项在导入的同时执行对容器进行修改的Dockerfile指令可参考后续相关章节​。下面将导出的test_for_run.tar文件导入系统中之前笔者介绍过使用docker load命令来导入镜像文件这与docker import命令具有相似之处。实际上既可以使用docker load命令将镜像存储文件导入本地镜像库也可以使用docker import命令将容器快照导入本地镜像库。这两者之间的区别在于容器快照文件会丢弃所有历史记录和元数据信息仅保留当时的容器状态快照​而镜像存储文件会保存完整的记录因此文件体积较大。另外在从容器快照文件导入时用户可以重新指定标签等元数据信息。6、查看容器本节主要介绍Docker容器的inspect、top和stats子命令使用这些命令可以查看容器的状态信息。6.1、查看容器详情查看容器详情可以使用docker inspect [OPTIONS] NAME|ID[NAME|ID...]子命令。例如查看某容器的具体信息会以JSON格式返回包括容器Id、创建时间、路径、状态、镜像、配置等在内的各项信息6.2、查看容器内进程查看容器内进程可以使用docker [container] top [OPTIONS] CONTAINER[CONTAINER...]子命令。这个子命令类似于Linux系统中的top命令会输出容器内的进程信息包括PID、用户、时间、命令 等。例如查看test容器内的进程信息命令如下6.3、查看统计信息查看统计信息可以使用docker [container] stats [OPTIONS]​[CONTAINER...]子命令会显示CPU、内存、存储器、网络等使用情况的统计信息。支持的选项包括-a,--all输出所有容器统计信息默认仅运行中。--format string格式化输出信息。--no-stream不持续输出默认会自动持续更新实时结果。--no-trunc不截断输出信息。例如查看当前运行中容器的系统资源使用情况的统计信息7、其他容器命令本节主要介绍Docker容器的cp、diff、port和update子命令。7.1、复制文件cp命令支持在容器和主机之间复制文件命令格式为支持的选项包括-a,--archive打包模式复制文件会带有原始的uid/gid信息-L,--follow-link跟随软链接。当原路径为软链接时默认只复制链接信息使用该选项会复制链接的目标内容。例如将本地的路径data复制到apache-test容器的/tmp路径下7.2、查看变更diff命令用于查看容器内文件系统的变更命令格式为例如查看apache-test容器内的数据修改7.3、查看端口映射port命令可以查看容器的端口映射情况命令格式为例如查看apache-test容器的端口映射情况7.4、更新配置update命令可以更新容器的一些运行时配置主要是一些资源限制份额命令格式为支持的选项包括--blkio-weight uint16更新块I/O限制有限制时取值为101000默认为0代表无限制。--cpu-period int限制CPU调度器CFS(CompletelyFair Scheduler)的使用时间单位为微秒最小值为1000。--cpu-quota int限制CPU调度器CFSCompletelyFair Scheduler完全公平调度器的配额单位为微秒最小值为1000。--cpu-rt-period int限制CPU调度器的实时周期单位为微秒。--cpu-rt-runtime int限制CPU调度器的实时运行时单位为微秒。-c,--cpu-shares int限制CPU的使用份额。--cpus decimal限制CPU的个数。--cpuset-cpus string允许使用的CPU核如03,0,1。--cpuset-mems string允许使用的内存块如03,0,1。--kernel-memory bytes限制使用的内核内存。-m,--memory bytes限制使用的内存。--memory-reservation bytes内存软限制。--memory-swap bytes内存加上缓存区的限制-1表示为对缓冲区无限制。--pids-limit int调整容器的pid限制-1表示无限制。--restart string容器退出后的重启策略。例如限制总配额为1s容器test所占用时间为10%代码如下所示