容器技术技术入门与Docker环境部署

目录

[一:Docker 概述](#一:Docker 概述)

1:什么是Docker

[2:Docker 的优势](#2:Docker 的优势)

3:Docker的应用场景

4:Docker核心概念

[二:Docker 安装](#二:Docker 安装)

[三:Docker 镜像操作](#三:Docker 镜像操作)

1:获取镜像

2:查看镜像信息

3:查看镜像的详细信息

4:修改镜像标签(老名字+新名字)

5:删除镜像

6:存出镜像和载入镜像

[四:Docker 容器操作](#四:Docker 容器操作)


一:Docker 概述

因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。

Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。

1:什么是Docker

类别 描述
定义 Docker是一种轻量级的容器技术,用于打包应用程序及其依赖项,实现应用的隔离和可移植性。
核心功能 创建轻量级、可移植、自给自足的容器,简化部署和调试工作。
技术原理 共享宿主机操作系统内核,但容器间拥有独立的文件系统、进程空间和网络接口。
与传统虚拟化对比 传统虚拟化需模拟完整操作系统(如VM),而容器仅虚拟化用户空间,更轻量高效。
优势 1. 高效利用资源 2. 快速启动和部署 3. 环境一致性(开发、测试、生产) 4. 易于扩展和维护
应用场景 1. 微服务架构 2. 持续集成/持续部署(CI/CD) 3. 云原生应用开发 4. 多租户环境隔离
容器特点 像一个独立"盒子",包含应用所需的代码、运行时、工具和库,与其他容器隔离运行。

2:Docker 的优势

Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为可能。

传统虚拟化技术(如 Vware、VirtualBox 等)是通过虚拟机管理程序(Hypervisor)在物理服务器上创建多个虚拟机(VM),每个虚拟机都包含完整的操作系统。而容器技术是在操作系统层面进行虚拟化,多个容器共享宿主机的操作系统内核。

容器技术和传统虚拟化的主要区别在于:

对比维度 容器技术 传统虚拟化
资源占用 共享宿主机内核,仅包含应用及依赖项,资源占用少,启动速度快(秒级)。 每个虚拟机需独立运行完整操作系统,资源占用高(CPU、内存、存储),启动较慢(分钟级)。
隔离性 进程级隔离,依赖宿主机内核,隔离性较弱(但可通过配置增强)。 硬件级隔离,每个虚拟机有独立OS,安全性更高。
性能 直接调用宿主机内核,性能损耗极低,接近原生应用。 需通过虚拟化层(Hypervisor)访问硬件,存在额外性能开销。
适用场景 高密度微服务、CI/CD、快速扩展、云原生应用。 需要强隔离的多租户环境、异构OS运行(如Windows与Linux共存)。
代表技术 Docker、Kubernetes、LXC。 VMware、Hyper-V、KVM。

Docker 操作方便,可以通过 Dockerfile 配置文件支持灵活的自动化创建和部署。表1将 Docker容器技术与传统虚拟机的特性进行了比较。

特性 Docker 容器 虚拟机
启动速度 秒级(快速启动,适合动态伸缩) 分钟级(需启动完整操作系统)
计算能力损耗 几乎无(直接调用宿主机内核) 约 50%(需通过虚拟化层访问硬件)
性能 接近原生(低延迟,高吞吐) 较弱(受虚拟化开销影响)
单机系统支持量 上千个(轻量级,共享内核) 几十个(资源占用高)
隔离性 进程级隔离(通过命名空间/Cgroups限制资源,隔离性较弱但可配置增强) 完全隔离(独立OS,硬件级安全)
资源占用 极低(仅包含应用及依赖项) 高(需分配独立OS、虚拟硬件)
适用场景 微服务、CI/CD、云原生应用、高密度部署 强隔离需求(如多租户、异构OS)、传统应用迁移
代表技术 Docker, Kubernetes, Podman VMware, Hyper-V, KVM

容器技术的优势主要体现在以下几个方面:

优势 具体表现 与传统虚拟化对比 应用场景示例
隔离性 进程级隔离,故障容器不影响其他容器(通过命名空间/Cgroups实现)。 弱于虚拟机的硬件级隔离,但已满足多数应用需求。 多租户SaaS服务、微服务架构
可移植性 一次打包,随处运行(依赖统一镜像格式),避免环境差异问题。 虚拟机需携带完整OS镜像,体积大且环境适配复杂。 跨云平台部署、开发-生产环境一致性保障
资源高效利用 共享宿主机内核,无冗余OS开销,单机可运行上千容器。 虚拟机需为每个实例分配独立OS资源,利用率低(单机通常仅几十个实例)。 高密度计算、边缘计算资源优化
快速部署扩展 秒级启动,支持快速水平扩展和自动伸缩(如K8s HPA)。 虚拟机启动需分钟级,扩展速度慢。 突发流量应对、CI/CD流水线加速
版本控制 镜像分层存储,支持版本回滚和增量更新(通过Dockerfile管理)。 虚拟机快照体积大,回滚效率低。 蓝绿部署、热修复
生态工具链 丰富的编排工具(K8s/Swarm)、监控(Prometheus)、日志(ELK)等开源解决方案。 虚拟机管理工具(如vCenter)多为商业软件,生态封闭。 DevOps全流程自动化

Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而 Docker 容器则是直接在操作系统层面之上实现的虚拟化。图 2是 Docker 与传统虚拟机架构。

3:Docker的应用场景

应用场景 技术优势 实现方式 典型案例
开发环境管理 环境一致性(避免"在我机器上能跑"问题),依赖隔离。 使用 Dockerfile 定义环境,通过镜像共享给团队。 新成员快速搭建开发环境,跨OS团队协作。
CI/CD 流水线 快速构建、测试隔离、版本固化。 在 Jenkins/GitLab CI 中集成 Docker,构建镜像并推送至仓库。 自动化测试、一键回滚。
微服务架构 独立部署、资源隔离、弹性伸缩。 每个微服务打包为容器,通过 Kubernetes 编排。 电商系统、支付服务解耦。
云计算 资源高效利用、秒级部署、多云兼容。 云厂商提供容器服务(如 AWS ECS、阿里云 ACK)。 突发流量自动扩容,混合云部署。
边缘计算 轻量级、低资源占用,适应异构设备。 在边缘节点部署容器化应用(如 IoT 数据处理)。 工厂设备实时监控,CDN 节点优化。
数据科学 环境复现、依赖管理。 JupyterLab 或 ML 模型打包为容器,共享数据集和训练环境。 AI 团队协作训练模型。
遗留应用现代化 无需重构代码即可迁移至云环境。 将传统应用(如 Java WAR 包)容器化,逐步拆分微服务。 银行系统上云改造。

4:Docker核心概念

核心概念 定义 特点 操作示例 类比说明
镜像 只读模板,包含运行容器所需的文件系统结构和依赖项。 - 分层存储(Union FS) - 可复用、版本控制 - 静态不可变 - 构建镜像:docker build -t my-image . - 拉取镜像:docker pull nginx 类似虚拟机的"安装光盘"或"快照"。
容器 镜像的运行实例,包含独立的进程空间、网络和文件系统。 - 轻量级(秒级启停) - 隔离性(命名空间/Cgroups) - 动态可读写 - 启动容器:docker run -d --name my-container nginx - 进入容器:docker exec -it my-container bash 类似"正在运行的虚拟机实例"。
仓库 集中存储和分发镜像的服务,分为公有仓库(Docker Hub)和私有仓库(自建)。 - 支持多标签(tag) - 权限控制(私有仓库) - 镜像版本管理 - 推送镜像:docker push my-repo/my-image:tag - 搜索镜像:docker search mysql 类似"应用商店"或"代码仓库(Git)"。

二:Docker 安装

Docker 支持在主流的操作系统平台上进行使用,包括 Windows 系统、Linux 系统、以及 Macos 系统等。目前最新的 RHEL、Cent 0s 以及 Ubuntu 系统官方软件源中都已经默认自带了 Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。

Centos 系统下安装 Docker 可以有两种方式:一种是使用CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。注意:目前 Docker 只能支持 64 位系统。

本安装方式使用阿里的软件仓库

复制代码
# 步骤 1: 添加软件源信息
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 
# 步骤 2: 安装必要的系统工具
yum install -y yum-utils
 
# 步骤 3: 安装 Docker-CE
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 
# 步骤4:添加国内镜像站
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker-0.unsee-tech",
    "https://docker.hlmirror.com"
  ]
}
EOF
 
# 步骤5:开启Docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker version
 
# 步骤6:优化内核参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
 
sysctl -p

三:Docker 镜像操作

运行 Docker 容器前需要本地存在对应的镜像。如果不存在本地镜像,Docker 就会尝试从默认镜像仓库下载。镜像仓库是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求。用户也可以通过配置来使用自定义的镜像仓库。

1:获取镜像

复制代码
[root@localhost ~]# docker pull nginx

docker pull 是 Docker 里的一个关键命令,其主要功能是从 Docker 镜像仓库(默认是 DockerHub)中拉取镜像到本地 Docker 主机

命令语法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

参数说明:

OPTIONS(可选参数)

-a,--all-tags: 拉取指定仓库中的所有标签的镜像。
--disable-content-trust: 默认值为 true,该选项用于禁用镜像内容验证,也就是不验证镜像的签名。
NAME[ :TAG|@DIGEST]

NAME: 这是要拉取的镜像的名称,它可以包含仓库地址和命名空间信息。例如,在 DockerHub 上的镜像,如果是官方镜像,通常直接写镜像名,如nginx;如果是用户或组织的镜像,则格式为 用户名/镜像名,像 dockerlibrary/redis。
TAG(可选): 指定要拉取的镜像的具体标签,用于区分同一镜像的不同版本。若不指定标签,默认会拉取 latest 标签的镜像。
DIGEST(可选): 通过镜像的摘要信息来精确指定要拉取的镜像版本,这能确保拉取的是特定哈希值对应的精确镜像,避免因标签可能指向不同版本而产生混淆。格式如nginx@sha256:abcdef123456...

对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签,也可通过指定的标签来下载特定版本的某一镜像。这里标签(tag)就是用来区分镜像版本的。

从整个下载的过程可以看出,镜像文件是由若干层(Layer)组成,称之为AUFS(联合文件系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。 用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。

2:查看镜像信息

复制代码
[root@localhost ~]# docker images

docker images 是 Docker 中一个基础且常用的命令,主要用于列出本地 Docker 主机上的镜像信息。docker images 命令会列出本地 Docker 主机上所有可用的镜像,展示镜像的基本信息,帮助用户了解本地镜像的存储情况,包括镜像的仓库名、标签、镜像 ID、创建时间和大小等。

从显示的情况可以读出以下信息:

REPOSITORY: 镜像属于的仓库:
TAG: 镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID: 镜像的唯- ID 号,唯一标识一个镜像;
CREATED: 镜像创建时间:
VIRTUAL SIZE: 镜像大小;

命令语法:docker images [OPTIONS] [REPOSITORY[:TAG]]

参数说明:

OPTIONS(可选参数)

-a, --all: 显示所有镜像(包括中间层镜像)。默认情况下,docker images 只显示顶层镜像。
digests: 显示镜像的摘要信息。
-f,--filter filter: 根据指定的条件过滤输出结果。过滤条件可以是多种类型,例如 dangling=true表示只显示虚悬镜像(没有标签的镜像)。
--format string: 使用 Go 模板语法自定义输出格式。
--no-trunc: 不截断输出信息,完整显示镜像 ID 等较长的字段。
-9,--quiet: 只显示镜像的 ID。
REPOSITORY [:TAG](可选)

REPOSITORY: 指定要显示的镜像仓库名称。
**TAG:**指定要显示的镜像标签。如果不指定标签,默认显示所有标签的镜像。

3:查看镜像的详细信息

复制代码
[root@localhost ~]# docker inspect c15

docker inspect 是 Docker 中一个非常实用的命令,它用于返回 Docker 对象(如容器、镜像、网络、卷等)的底层详细信息,这些信息以 JSON 格式展示,方便用户深入了解 Docker 对象的配置和状态。

命令语法:docker inspect[OPTIONS]NAME|ID [NAME|ID...]参数说明:
**OPTIONS:**可选参数,用于指定输出格式或过滤特定信息,常见的选项有:

• --format,-f:指定输出格式,使用 Go 模板语法。

• --size,-s:在输出中显示容器的文件系统大小(仅适用于容器)
NAME|ID: 要检查的 Docker 对象的名称或 ID,可以指定多个对象。可检查的 Docker 对象

docker inspect 可以检査多种 Docker 对象,常见的包括:
容器(Container): 获取容器的详细信息,如运行状态、网络配置、挂载点等。
镜像(Image): 查看镜像的构建历史、层信息、环境变量等。
网络(Network): 了解网络的配置,如驱动类型、子网信息等。
**卷(Volume):**获取卷的详细信息,如挂载路径、驱动类型等。

4:修改镜像标签(老名字+新名字)

复制代码
[root@localhost ~]# docker tag nginx nginx:v1
[root@localhost ~]# docker images

在 Docker 中,docker tag 命令用于为现有的 Docker 镜像添加一个新的标签(tag)。标签本质上是镜像的一个别名,它可以让你更方便地引用和管理镜像,同时也有助于区分不同版本或用途的镜像。

命令语法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

参数说明:

SOURCE_IMAGE[:TAG]: 指定源镜像的名称和标签。SOURCE IMAGE 是源镜像的名称,「:TAG] 是可选的标签,如果不指定标签,默认使用 latest。
TARGET_IMAGE[:TAG]: 指定目标镜像的名称和标签。这是你要为源镜像添加的新标签。同样,TARGET_IMAGE 是目标镜像的名称,[:TAG]是可选的标签,如果不指定标签,默认使用 latest。

docker tag 命令并不会创建一个新的镜像,它只是为现有的镜像添加一个额外的标签。多个标签可以指向同一个镜像,这些标签只是镜像的不同引用方式。

5:删除镜像

复制代码
# 用镜像名删除
[root@localhost ~]# docker rmi nginx:v1
 
# 用镜像ID删除 
[root@localhost ~]# docker rmi c15

命令语法:docker rmi [OPTIONS] IMAGE [IMAGE...]

参数说明:

OPTIONS(可选参数)

-f,--force: 强制删除镜像。即使有容器正在使用该镜像,也会尝试删除,但不建议轻易使用,因为可能导致容器无法正常运行。
--no-prune: 默认情况下,删除镜像时会同时删除该镜像相关的未使用的父镜像层(虚悬镜像),使用该选项可以禁止删除这些父镜像层。

IMAGE

指定要删除的镜像,可以是镜像的名称、标签、镜像 ID,也可以同时指定多个镜像。例如:nginx:latest、123456789abc 等。

注意事项:

在删除镜像之前,要确保没有正在运行或已停止的容器依赖该镜像。可以使用 docker ps -a命令査看所有容器,使用 docker stop 和 docker rm 命令停止并删除依赖该镜像的容器后,再删除镜像。

镜像的删除是不可逆的操作,删除后无法恢复,所以在执行删除操作前要谨慎确认。

当删除一个有多个标签的镜像时,删除一个标签只是移除该标签的引用,只有当所有标签都被删除后,镜像才会真正从磁盘上删除。

6:存出镜像和载入镜像

bash 复制代码
# (1) 导出镜像
[root@localhost ~]# docker save -o nginx.tar nginx:latest
 
# (2) 删除镜像 
[root@localhost ~]# docker rmi nginx:latest
 
# (3) 导入镜像
[root@localhost ~]# docker load < nginx.tar

注意事项:

文件大小: 保存的镜像文件可能会非常大,尤其是包含多个大型镜像时。在保存和传输这些文件时,要确保有足够的磁盘空间和网络带宽。
镜像版本: 保存的镜像文件中包含的是特定版本(标签)的镜像。在恢复镜像时,要确保使用正确的标签和版本。
跨平台兼容性: 虽然 Docker 镜像是设计为跨平台的,但在不同的操作系统上保存和加载镜像时,可能会遇到一些兼容性问题。尽量在相同或兼容的操作系统版本之间传输和使用镜像。
**镜像依赖:**如果保存的镜像依赖于其他基础镜像,确保在目标环境中也有这些基础镜像,或者将它们一起保存和传输。

四:Docker 容器操作

容器是 Docker 的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、she11 环境等。镜像是只读模板,而容器会给这个只读模板添加一个额外的可写层。

容器的创建与启动

操作类型 命令语法 核心功能 关键参数 示例 适用场景
创建容器 docker create [OPTIONS] IMAGE 从镜像创建容器(不自动启动) -it(交互式终端) -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 --name 容器名 docker create -it --name mycentos -p 80:80 centos:7 预配置容器后再启动
查看容器 docker ps [OPTIONS] 列出容器状态 -a(显示所有容器) -q(仅显示ID) -f "name=xxx"(过滤) `docker ps -a grep nginx`
启动容器 docker start [OPTIONS] CONTAINER 启动已存在的容器 -a(附加输出流) -i(保持交互) docker start -ai mycentos 重新启动已停止的容器
创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] 创建并立即启动容器(镜像不存在时自动拉取) -d(后台运行) --rm(退出后自动删除) -e 环境变量 --network 网络 docker run -d --name web -p 8080:80 -e "ENV=prod" nginx 快速部署服务
后台持续运行 docker run -d IMAGE [COMMAND] 启动守护式容器(需容器内有常驻进程) --cpus 2(限制CPU核心) -m 512m(限制内存) --restart=always(自动重启) docker run -d --cpus=1 -m 1g --restart=always redis 部署数据库、消息队列等持久化服务
停止容器 docker stop [OPTIONS] CONTAINER 优雅停止容器(发送SIGTERM信号) -t(超时时间,默认10秒) docker stop -t 5 mynginx 安全关闭服务
强制停止容器 docker kill [OPTIONS] CONTAINER 强制终止容器(发送SIGKILL信号) -s(指定信号,如SIGKILL docker kill mynginx 容器无响应时强制终止
删除容器 docker rm [OPTIONS] CONTAINER 删除已停止的容器 -f(强制删除运行中的容器) -v(同时删除关联卷) docker rm -fv old_container 清理无用容器释放资源
场景 推荐命令 原因及关键参数 扩展用法
调试容器 docker run -it IMAGE /bin/bash -it:分配交互式终端,直接进入容器内部调试。 /bin/bash:指定启动Shell。 1. 快速排查配置问题:docker run -it --rm alpine sh 2. 检查环境变量:docker run -it python env
批量预配置容器 docker create + docker start 1. create:预先配置网络、卷等参数。 2. start:按需启动,适合批量管理。 结合脚本批量操作: for i in {1..5}; do docker create --name node-$i nginx; done
运行服务类容器 docker run -d IMAGE -d:后台守护进程模式。 自动拉取镜像(若本地不存在)。 1. Web服务:docker run -d -p 80:80 --name web nginx 2. 数据库:docker run -d -e MYSQL_ROOT_PASSWORD=123 mysql
临时测试容器 docker run --rm IMAGE --rm:容器退出后自动删除,避免残留临时容器。 单次命令执行: docker run --rm busybox echo "Hello World"
资源受限环境 docker run -d --cpus=1 -m 512m --cpus:限制CPU核心数。 -m:限制内存,防止资源耗尽。 云原生部署: docker run -d --cpus=0.5 -m 256m --name limit-app my-app
容器网络配置 docker run --network=host/bridge --network:指定网络模式。 - host:共享宿主机网络栈。 - bridge:默认隔离网络。 高性能场景:docker run -d --network=host redis
数据持久化 docker run -v /host/path:/container -v:挂载宿主机目录到容器,数据持久化。 数据库数据存储: docker run -d -v /data/mysql:/var/lib/mysql mysql
操作类型 命令语法 核心功能 关键参数 注意事项 典型场景
优雅停止容器 docker stop [-t N] CONTAINER 发送SIGTERM信号,允许容器完成清理后退出 -t:超时时间(秒,默认10秒) 1. 需确保容器内进程能处理SIGTERM 2. 有依赖关系的容器需按顺序停止 安全关闭数据库、微服务等
强制终止容器 docker kill [-s SIGNAL] CONTAINER 立即发送SIGKILL信号强制终止 -s:指定信号(如SIGKILL/SIGTERM) 1. 可能导致数据损坏 2. 仅用于无响应容器 容器死锁或僵尸进程处理
进入容器 docker exec -it CONTAINER COMMAND 在运行中容器内执行交互式命令 -it:交互式终端 -u user:指定用户 -w /path:设置工作目录 1. 容器必须处于运行状态 2. 注意用户权限(如root操作需谨慎) 调试、日志查看或配置修改
导出容器快照 docker export CONTAINER > file.tar 将容器文件系统导出为tar包(不含元数据) 1. 与docker save区别:不保留镜像层历史 2. 导出前建议先停止容器 迁移容器状态或备份
导入为镜像 docker import file.tar IMAGE:TAG 从tar文件创建新镜像(扁平化无历史层) -c:添加Dockerfile指令(如CMD 生成的镜像无构建历史,体积可能较大 快速构建定制化基础镜像
删除容器 docker rm [-fv] CONTAINER 删除已停止的容器及关联资源 -f:强制删除运行中容器 -v:同时删除匿名卷 1. 数据卷删除不可逆 2. 重要数据需提前备份 清理无用容器释放资源
批量清理 docker container prune 一键删除所有已停止的容器 配合-f跳过确认提示 定期维护
场景 推荐命令 优势与原理 扩展用法
正常停止服务 docker stop -t 20 CONTAINER - 优势 :发送SIGTERM信号,允许应用优雅关闭(如保存数据、释放连接) - 参数-t 20 延长等待时间至20秒 1. 数据库容器:docker stop -t 30 mysql 2. 微服务:docker stop -t 15 order-service
容器无响应时 docker kill CONTAINER - 优势 :立即发送SIGKILL信号强制终止,快速释放资源 - 注意:可能导致数据丢失,慎用 1. 指定信号:docker kill -s SIGKILL hung_container 2. 批量终止:docker kill $(docker ps -q)
调试运行中容器 docker exec -it CONTAINER bash - 优势 :无需重启容器,直接进入交互式终端调试 - 注意:容器需已运行且包含bash/sh 1. 指定用户:docker exec -u root -it nginx bash 2. 执行单命令:docker exec redis redis-cli ping
临时诊断网络问题 docker run --rm -it busybox ping - 优势 :使用轻量镜像快速测试网络,--rm自动清理 - 场景:检查容器间通信或外网连通性 docker run --rm -it alpine ping 8.8.8.8
查看实时日志 docker logs -f CONTAINER - 优势 :动态跟踪日志输出(类似tail -f) - 参数--since 10m 查看最近10分钟日志 docker logs -f --tail 100 web_app
资源监控 docker stats CONTAINER - 优势 :实时显示CPU/内存/网络等资源占用 - 扩展docker top CONTAINER查看进程列表 docker stats --format "table {``{.Name}}\t{``{.CPUPerc}}\t{``{.MemUsage}}"
配置检查 docker inspect CONTAINER - 优势 :获取容器详细配置(网络/IP/卷等) - 技巧 :结合jq解析JSON输出 `docker inspect web

数据持久化建议

  • 重要数据应通过-v挂载数据卷
  • 删除容器时避免使用-v参数,除非确认数据可丢弃
bash 复制代码
# 停止所有运行中的容器
docker stop $(docker ps -q)
 
# 删除所有已停止容器
docker rm $(docker ps -aq)
 
# 导出所有容器
for id in $(docker ps -aq); do docker export $id > $id.tar; done