当前位置:首页 > 技术 > 正文内容

Docker容器操作详解:从启动到管理

访客 技术 2026年6月18日 1

4.1 容器核心概念

当执行 docker run 时,Docker 会按以下顺序查找镜像:先检查本地仓库,若存在则直接启动;若不存在,则连接镜像仓库搜索。如果镜像仓库中存在目标镜像,Docker 会下载并启动;若仓库中也不存在,则会抛出错误信息。

结合多架构镜像支持,完整的容器启动逻辑可以概括为:
本地查找 → 镜像仓库查找 → 根据系统架构选择合适的镜像版本 → 下载并运行。

4.2 创建并启动容器的两种模式

4.2.1 交互模式运行 Ubuntu

拉取镜像并启动一个终端会话:

docker pull ubuntu
docker run --name my-ubuntu -i -t ubuntu /bin/bash

参数说明:
- --name:为容器指定自定义命名
- -i -t(可合并为 -it):以交互模式运行并分配伪终端
- /bin/bash:容器启动后执行 bash 命令,进入终端界面

运行后,终端提示符变为 root@<容器ID>:/#,其中 <容器ID> 是系统生成的唯一标识。此时可在容器内执行 Linux 命令,但需要注意的是,该 Ubuntu 是精简版,部分常用工具可能缺失。

输入 exit 可退出容器,但容器会立即终止运行。

4.2.2 交互模式运行 Tomcat

使用 Tomcat 8.5.32 版本进行演示(此版本 webapps 目录未被修改):

docker run --name my-tomcat -it tomcat:8.5.32 /bin/bash

执行 ls -l 可查看 Tomcat 根目录结构。需要注意,通过 /bin/bash 进入时,Tomcat 服务并未启动。

要真正启动 Tomcat,需省略 /bin/bash 并指定端口映射:

docker run --name tomcat8081 -it -p 8081:8080 tomcat:8.5.32

-p 参数用于端口映射,格式为 宿主机端口:容器内端口。启动后,Tomcat 日志会持续输出到控制台,通过浏览器访问 主机IP:8081 即可验证服务运行。

4.2.3 分离模式运行 Tomcat

使用 -d 参数使容器在后台运行:

docker run --name my-tomcat03 -d -p 8083:8080 tomcat:8.5.32

执行后返回容器 ID,通过 docker ps 可查看正在运行的容器列表。支持同时启动多个 Tomcat 容器,并映射到不同的宿主机端口。

若使用大写 -P,系统会自动分配一个宿主机端口映射到容器内部端口:

docker run --name my-tomcat-auto -d -P tomcat:8.5.32

4.2.4 分离模式运行 Ubuntu 的问题

Ubuntu 容器以分离模式启动后会立即退出,因为容器没有运行需要持续等待的进程:

docker run -d ubuntu:latest

通过 docker ps -a 可看到该容器已处于 Exited 状态。

4.3 仅创建容器:docker create

docker create 用于创建容器但不启动,与 docker run 参数类似,但不支持 -d

docker create --name my-tom -p 8084:8080 tomcat:8.5.32

4.4 退出交互模式容器的两种方式

4.4.1 退出并停止:exit

docker run --name my-ubuntu01 -it ubuntu:latest

在容器内执行 exit 后,容器会停止运行。

4.4.2 退出不停止:Ctrl + P + Q

先按下 Ctrl + P,再按 Q,可回到宿主机终端,同时容器保持运行状态。

4.5 容器状态查询命令

  • docker ps:列出所有运行中的容器
  • docker ps -a:列出所有容器(包括已停止的)
  • docker ps -q:仅输出容器 ID
  • docker ps -l:显示最近创建的容器
  • docker ps -n 5:显示最近创建的 5 个容器

4.6 进入运行中的容器

4.6.1 exec:新建进程进入

docker exec -i -t my-tomcat /bin/bash

此命令会在容器内创建新进程,exit 仅结束该进程,不影响容器运行。

4.6.2 exec:不进入容器直接执行命令

docker exec -i -t my-tomcat ls -l

直接在外部查看容器内目录结构。

4.6.3 attach:附加到容器主进程

先以交互模式启动 Ubuntu 容器,按 Ctrl + P + Q 退出但不停止,再执行:

docker attach my-ubuntu

此时 exit 会直接停止容器,因为 attach 连接的是容器的主进程。

4.6.4 attach 查看 Tomcat 输出

docker attach my-tomcat

该命令会显示 Tomcat 的运行日志,按 Ctrl + C 结束 Tomcat 进程,容器也随之退出。

4.7 查看容器内进程:docker top

docker top my-tomcat

显示指定容器的进程详情,可通过 grep 过滤结果。

4.8 容器日志管理

4.8.1 查看全部日志

docker logs my-tomcat

4.8.2 查看最近 N 条日志

docker logs -n 5 my-tomcat

4.8.3 指定起始时间

docker logs --since="2024-07-08" --tail=3 my-tomcat
docker logs --since="50m" --tail=3 my-tomcat

4.8.4 指定截止时间

docker logs --until="2024-07-09" --tail=3 my-tomcat
docker logs --until=20m --tail=3 my-tomcat

4.8.5 显示时间戳

docker logs -t --tail=3 my-tomcat

4.8.6 实时追踪日志

docker logs -f --tail=3 my-tomcat

4.9 容器生命周期管理

  • docker start my-tomcat:启动已停止的容器
  • docker restart my-tomcat:重启运行中的容器
  • docker stop my-tomcat:优雅停止(等待当前请求处理完毕)
  • docker kill my-tomcat:强制停止(立即终止)
  • docker stop $(docker ps -qa):停止所有容器
  • docker pause my-tomcat:暂停容器服务
  • docker unpause my-tomcat:恢复容器服务

4.10 删除容器

  • docker rm ubuntu02:删除已停止的容器
  • docker rm -f ubuntu01:强制删除运行中的容器
  • docker rm -f $(docker ps -aq):删除所有容器

4.11 文件复制:docker cp

4.11.1 从容器复制到宿主机

docker cp my-tomcat:/usr/local/tomcat/export.tar /usr/local

4.11.2 从宿主机复制到容器

docker cp export.tar my-tomcat:/usr/local/tomcat

4.11.3 不支持容器间直接复制

docker cp my-tomcat01:/file my-tomcat02:/path  # 无效操作

4.12 将容器提交为镜像

4.12.1 准备容器环境

docker pull centos:7
docker run --name centos-test -it centos:7

在容器内安装 net-tools 工具:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y net-tools

4.12.2 生成新镜像

docker commit -a "user <user@example.com>" -m "added net-tools" centos-test centos7:net-tools

4.12.3 使用新镜像

docker run --name my-centos -it centos7:net-tools

4.12.4 创建悬虚镜像

不指定 repository 和 tag 即可生成悬虚镜像:

docker commit centos-test

4.13 容器导入/导出

4.13.1 导出容器

docker export -o tomcat8.tar tomcat01

4.13.2 导入为镜像

docker import tomcat8.tar tomcat-custom:1.0

4.13.3 与 save/load 的对比

功能export/importsave/load
作用对象容器镜像
历史记录丢弃,仅保留当前快照保留完整分层信息
批量操作一次一个容器一次多个镜像
导入后镜像 ID与原镜像不同与原镜像相同
指定标签可以指定不可指定,沿用原镜像标签

4.13.4 与 docker commit 的对比

相同点:两者都能将容器转化为镜像。
区别:export/import 生成的镜像仅有一层,而 commit 生成的镜像包含原镜像的所有分层。

4.14 docker system 命令集

4.14.1 查看磁盘占用

docker system df
docker system df -v

4.14.2 查看事件记录

docker system events --since="2024-07-09"

4.14.3 查看系统详情

docker info

4.14.4 清理无用数据

docker system prune

该命令会删除已停止的容器、悬空镜像、无连接的网络和构建缓存。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。