导读
本文是一份全面的 Docker 技术指南,涵盖了从基础概念到高级实践的完整知识体系。文档系统性地介绍了 Docker 的核心技术、安装配置、日常操作、网络与存储管理、安全实践以及生产环境部署等关键内容。
主要特点:
全面性:包含 Docker 全栈技术栈,从入门到进阶实践性:提供大量可直接运行的命令示例和配置片段专业性:涵盖企业级应用场景和安全最佳实践系统性:按照技术逻辑组织内容,便于循序渐进学习适用读者:
开发人员:快速掌握容器化开发技能运维工程师:学习容器编排和集群管理架构师:设计基于容器的分布式系统安全工程师:实施容器安全防护措施详细目录第一部分:基础篇 Docker 简介
核心概念:镜像/容器/仓库镜像分层结构与传输私有仓库搭建与管理 安装 Docker
Linux系统安装指南Windows/Mac安装方法环境验证与配置第二部分:操作篇 常用命令
镜像操作:拉取/查看/删除容器操作:运行/监控/管理资源限制与性能分析 实际应用场景
开发环境容器配置数据库容器部署调试工具与批处理任务第三部分:进阶篇 Dockerfile 编写
基础语法与指令多阶段构建实战安全加固与优化技巧 容器网络
网络模式比较自定义网络配置跨主机网络方案 数据管理
数据卷操作分布式存储方案备份恢复策略第四部分:生产实践篇 最佳实践
安全性建议性能优化指南编排工具选择 安全实践详解
容器安全加固镜像漏洞扫描运行时保护方案 监控与日志
容器监控方案Prometheus集成企业级日志架构第五部分:扩展篇 CI/CD集成
Jenkins/GitLab集成自动化构建流程部署策略 生产环境部署
Kubernetes编排Docker Swarm集群高可用策略 性能调优
资源限制配置存储驱动选择内核参数优化 高级技巧
容器调试方法批量操作命令导入导出技巧附录 常见问题排查
启动失败分析网络连接问题性能瓶颈诊断 进阶主题
多阶段构建详解Docker Compose配置1. Docker 简介Docker 是一个开源的应用容器引擎,基于 Go 语言开发。它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。
核心概念镜像(Image):Docker 镜像是一个只读模板,包含创建 Docker 容器的说明。镜像采用分层存储结构,每一层代表Dockerfile中的一条指令。例如:
以下命令用于管理Docker镜像的分层结构和传输:docker history 查看镜像的构建历史和各层信息docker save 将镜像导出为tar归档文件,便于传输或备份docker load 从tar文件加载镜像到本地仓库代码语言:javascript复制# 查看镜像分层结构
docker history
# 导出镜像为tar文件
docker save -o myimage.tar
# 从tar文件加载镜像
docker load -i myimage.tar 容器(Container):容器是镜像的可运行实例。容器与镜像的关系类似于面向对象编程中对象与类的关系。容器具有以下特点:
轻量级:共享主机系统内核可移植:包含应用及其所有依赖隔离性:使用命名空间和控制组实现资源隔离临时性:默认情况下容器停止后数据不会持久化 实际案例:某电商平台使用容器处理黑色星期五流量高峰,可快速扩展至5000个容器实例。
仓库(Registry):用于存放镜像的地方,如 Docker Hub。企业级应用场景:
私有仓库搭建:使用Docker Registry或Harbor
私有仓库操作命令说明:docker run 启动一个本地registry容器作为私有仓库docker tag 为镜像打上私有仓库地址的标签docker push 将镜像推送到私有仓库注意:默认情况下私有仓库没有认证,生产环境需要配置HTTPS和认证
代码语言:javascript复制# 启动私有仓库
docker run -d -p 5000:5000 --name registry registry:2
# 推送镜像到私有仓库
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage镜像同步策略:定期从公有仓库同步基础镜像访问控制:基于角色的权限管理2. 安装 DockerLinux 系统Docker在不同Linux发行版上的安装命令:
Ubuntu/Debian系统使用apt-get安装CentOS/RHEL系统使用yum安装安装前需要更新软件包索引安装后需要启动docker服务:sudo systemctl start docker代码语言:javascript复制# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.ioWindows/Mac从 Docker 官网下载 Docker Desktop 安装包:
https://www.docker.com/products/docker-desktop
3. 常用命令镜像操作镜像基本操作命令说明:
docker pull 从仓库下载镜像到本地docker images 列出本地已下载的镜像docker rmi 删除本地镜像,释放磁盘空间注意:删除镜像前需确保没有容器在使用该镜像
代码语言:javascript复制# 拉取镜像
docker pull ubuntu:20.04
# 列出本地镜像
docker images
# 删除镜像
docker rmi
容器运行:
docker run 创建并启动容器--cpus 限制CPU核心数--memory 限制内存使用量-it 以交互模式运行 容器查看:
docker ps 查看容器状态--format 自定义输出格式-a 显示所有容器-s 显示容器大小 容器管理:
docker stop 优雅停止容器docker rm 删除容器-f 强制操作运行中的容器 资源监控:
docker stats 实时查看资源使用docker exec 在容器内执行命令top/free/df 查看进程/内存/磁盘 文件操作:
docker cp 容器与主机间文件传输 日志查看:
docker logs 查看容器日志-f 跟踪日志输出-t 显示时间戳 高级功能:
docker update 动态调整资源限制--restart 配置重启策略docker inspect 检查容器健康状态代码语言:javascript复制# 运行容器(带资源限制)
docker run -it --cpus=2 --memory=1g --name myapp ubuntu:20.04 /bin/bash
# 列出运行中的容器(自定义格式)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# 列出所有容器(包括大小信息)
docker ps -as
# 停止容器(优雅停止)
docker stop -t 30
# 删除容器(强制删除运行中的容器)
docker rm -f
# 容器资源使用统计
docker stats --no-stream
# 容器性能分析
docker exec
docker exec
docker exec
# 容器与主机文件互传
docker cp
docker cp /host/path
# 容器日志查看(带时间戳和跟踪)
docker logs -ft
# 容器资源限制更新
docker update --cpus=2 --memory=2g
# 容器重启策略配置
docker run --restart unless-stopped -d myapp
# 容器健康检查
docker inspect --format='{{json .State.Health}}'
实际应用场景示例说明:
开发环境容器:
-v 挂载主机目录到容器-p 映射主机端口到容器适合本地开发调试代码语言:javascript复制# 启动开发容器(挂载代码目录)
docker run -it -v $(pwd):/app -p 3000:3000 node:14 bash数据库容器: -v 使用命名卷持久化数据-e 设置环境变量-d 后台运行适合数据库服务部署代码语言:javascript复制# 启动MySQL容器(持久化数据)
docker run -d --name mysql -v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:5.7临时调试工具: --rm 运行后自动删除容器适合一次性任务使用官方工具镜像代码语言:javascript复制# 使用curl容器测试API
docker run --rm curlimages/curl https://api.example.com批处理任务: 直接执行命令不进入交互适合自动化脚本资源自动回收代码语言:javascript复制# 运行一次性任务容器
docker run --rm python:3 python -c "print('Hello World')"网络诊断: --network=host 使用主机网络专用网络工具镜像适合网络问题排查代码语言:javascript复制# 使用网络工具容器诊断
docker run --network=host --rm nicolaka/netshoot \
ping google.com4. Dockerfile 编写基础示例代码语言:javascript复制FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
WORKDIR /app
CMD ["python3", "app.py"]高级技巧与最佳实践1. 多阶段构建实战代码语言:javascript复制# 第一阶段:构建环境
FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN go build -o /app/myapp .
# 第二阶段:运行环境
FROM alpine:3.13
WORKDIR /app
COPY --from=builder /app/myapp .
COPY --from=builder /src/config.yaml .
RUN chmod +x myapp
USER nobody
CMD ["./myapp"]2. 构建参数与动态配置代码语言:javascript复制ARG APP_VERSION=1.0.0
ENV APP_VERSION=${APP_VERSION}
# 构建时传递参数
# docker build --build-arg APP_VERSION=2.0.0 -t myapp .3. 安全加固措施代码语言:javascript复制# 使用非root用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
# 最小化权限
RUN chmod -R 755 /app && \
chown -R appuser:appuser /app
# 移除不必要的工具
RUN apt-get purge -y curl && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*4. 构建优化技巧代码语言:javascript复制# 合理利用缓存层
COPY package.json .
RUN npm install
COPY . .
# 合并RUN命令
RUN apt-get update && \
apt-get install -y \
python3 \
python3-pip && \
pip install --no-cache-dir -r requirements.txt && \
rm -rf /var/lib/apt/lists/*
# 使用.dockerignore
# 示例内容:
.git
node_modules
*.log
*.md5. 企业级Dockerfile示例代码语言:javascript复制# 第一阶段:依赖安装
FROM node:14 as dependencies
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# 第二阶段:构建应用
FROM node:14 as builder
WORKDIR /app
COPY . .
COPY --from=dependencies /app/node_modules ./node_modules
RUN npm run build
# 第三阶段:生产镜像
FROM node:14-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["node", "dist/main.js"]6. 调试技巧代码语言:javascript复制# 查看构建过程
docker history
# 调试构建失败
docker run -it
# 分析镜像大小
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"5. 容器网络容器网络管理命令说明:
网络模式:
bridge:默认NAT模式,适合单机容器通信host:直接使用主机网络,性能最佳none:无网络连接,安全隔离overlay:多主机网络,适合集群macvlan:MAC直通,直接暴露到物理网络 网络管理:
docker network create 创建自定义网络docker network connect 连接容器到网络docker network inspect 查看网络详情docker network prune 清理未使用网络最佳实践:
生产环境建议使用自定义网络隔离服务高性能场景考虑host或macvlan模式集群环境使用overlay网络网络模式详解1. 网络驱动比较网络模式
特点
适用场景
bridge
默认模式,NAT转发
单机容器通信
host
直接使用主机网络栈
高性能需求
none
无网络连接
安全隔离场景
overlay
多主机网络
Swarm/K8s集群
macvlan
MAC地址直通
需要直接暴露到物理网络
2. 自定义网络高级配置代码语言:javascript复制# 创建带子网和网关的网络
docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--gateway=172.28.0.1 \
--ip-range=172.28.5.0/24 \
my-network
# 指定静态IP运行容器
docker run --network=my-network --ip=172.28.5.10 -d nginx
# 连接多个网络
docker network connect other-network my-container3. 跨主机网络解决方案Overlay网络 (Docker Swarm):代码语言:javascript复制# 初始化Swarm集群
docker swarm init
# 创建Overlay网络
docker network create --driver=overlay my-overlay
# 跨节点服务部署
docker service create --network=my-overlay --name web -p 80:80 nginxMacvlan网络:代码语言:javascript复制# 创建Macvlan网络
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
my-macvlan4. 网络性能优化代码语言:javascript复制# 查看网络吞吐量
docker run --rm --net=host nicolaka/netshoot \
iperf3 -s # 服务端
docker run --rm --net=host nicolaka/netshoot \
iperf3 -c host-ip # 客户端
# 网络QoS限制
docker run --network=my-network \
--blkio-weight=300 \
-d nginx5. 网络诊断工具代码语言:javascript复制# 检查容器网络配置
docker exec -it my-container ip addr
# 网络连通性测试
docker run --rm --net=container:my-container \
nicolaka/netshoot ping google.com
# 抓包分析
docker run --rm --net=container:my-container \
nicolaka/netshoot tcpdump -i eth0 -w capture.pcap6. 实际案例微服务架构:代码语言:javascript复制# 为每个服务创建独立网络
docker network create product-network
docker network create order-network
# 通过网关容器实现网络隔离
docker run -d --name gateway --network=product-network nginx
docker network connect order-network gatewayCI/CD流水线:代码语言:javascript复制# 为每个构建创建临时网络
docker network create build-${BUILD_ID}
docker run --network=build-${BUILD_ID} -d test-db
docker run --network=build-${BUILD_ID} test-runner6. 数据管理数据管理命令说明:
数据卷操作:
docker volume create 创建持久化数据卷docker volume inspect 查看卷详情docker volume prune 清理未使用的卷docker run -v 挂载数据卷到容器 备份恢复:
使用临时容器执行备份命令支持多种存储后端(NFS, Ceph等)可设置定期备份策略最佳实践:
重要数据必须使用命名卷持久化定期测试备份恢复流程生产环境使用分布式存储方案数据管理高级指南1. 数据卷高级用法代码语言:javascript复制# 创建带驱动选项的数据卷
docker volume create \
--driver local \
--opt type=nfs \
--opt device=:/nfs/share \
--opt o=addr=10.0.0.1,rw \
nfs-volume
# 查看数据卷详情
docker volume inspect my-vol
# 清理未使用的数据卷
docker volume prune
# 数据卷备份
docker run --rm -v my-vol:/data -v $(pwd):/backup \
ubuntu tar cvf /backup/backup.tar /data2. 分布式存储方案NFS共享存储:代码语言:javascript复制docker run -d \
--mount 'type=volume,src=nfs-vol,dst=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/nfs/share,"volume-opt=o=addr=10.0.0.1,rw"' \
nginxCeph分布式存储:代码语言:javascript复制docker plugin install --alias ceph \
--grant-all-permissions \
ceph/plugin:latest
docker volume create --driver ceph \
--name my-ceph-volume \
-o size=10GB3. 备份与恢复策略数据库备份:代码语言:javascript复制# MySQL备份
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql
# PostgreSQL备份
docker exec postgres pg_dumpall -U postgres > backup.sql容器数据迁移:代码语言:javascript复制# 导出容器文件系统
docker export
# 导入为镜像
cat container.tar | docker import - migrated-image4. 性能优化技巧代码语言:javascript复制# 使用本地SSD存储
docker run -v /mnt/ssd:/data --mount type=tmpfs,destination=/tmp \
myapp
# 存储驱动选择
# 修改/etc/docker/daemon.json
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}5. 企业级存储方案多主机数据共享:代码语言:javascript复制# GlusterFS配置示例
docker volume create \
--driver=local \
--opt type=glusterfs \
--opt device=10.0.0.1:/gvol \
--opt o=log-level=DEBUG \
gluster-vol云存储集成:代码语言:javascript复制# AWS EBS卷
docker volume create \
--driver=rexray/ebs \
--name=ebs-vol \
--opt=size=506. 数据安全实践代码语言:javascript复制# 加密数据卷
docker volume create \
--driver=local \
--opt type=encrypted \
--opt key=my-secret-key \
secure-vol
# 只读挂载
docker run -v /data:/app:ro \
myapp7. 监控与维护代码语言:javascript复制# 查看存储使用情况
docker system df
# 分析容器存储
docker diff
# 清理无用数据
docker system prune --volumes7. 最佳实践 安全性:
不要以 root 用户运行容器定期更新基础镜像扫描镜像中的漏洞 性能优化:
使用多阶段构建合理使用缓存精简镜像大小 编排工具:
Docker Compose:单机编排Kubernetes:生产级编排Swarm:Docker 原生集群 日志管理:
使用日志驱动集中式日志收集合理的日志轮转策略8. 进阶主题多阶段构建代码语言:javascript复制FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]Docker Compose代码语言:javascript复制version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example9. 常见问题排查 容器启动失败:
检查日志:docker logs
检查网络配置:docker network inspect
监控资源使用:docker stats限制资源:--memory, --cpus 参数分析性能瓶颈:docker exec
docker run -u 1000:1000 myapp
# 限制内核能力
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
# 资源限制
docker run --memory 512m --cpus 1 --pids-limit 100 myapp
# 只读文件系统
docker run --read-only --tmpfs /tmp:rw,size=50m myapp
# 安全配置文件
docker run --security-opt no-new-privileges \
--security-opt seccomp=unconfined \
--security-opt apparmor=docker-default \
myapp2. 镜像安全扫描代码语言:javascript复制# 使用Snyk扫描镜像
docker scan --file Dockerfile myimage
# 漏洞数据库更新
docker scout cves myimage
# 镜像签名验证
docker trust inspect --pretty myimage
# 构建时扫描
docker build --secret id=mysecret,src=secret.txt \
--no-cache -t myimage .3. 运行时安全监控代码语言:javascript复制# 运行时行为监控
docker run --security-opt apparmor=my-profile \
--security-opt seccomp=my-seccomp.json \
myapp
# 审计日志
docker events --filter 'event=container' --since 1h
# 运行时检查
docker container checkpoint create \
--leave-running mycontainer checkpoint14. 网络安全防护代码语言:javascript复制# 网络策略限制
docker network create --internal secure-net
# 容器间TLS加密
docker run --network secure-net \
-e SSL_CERT=/certs/cert.pem \
-e SSL_KEY=/certs/key.pem \
myapp
# 防火墙规则
docker run --network host --cap-add NET_ADMIN \
nicolaka/netshoot iptables -A INPUT -p tcp --dport 80 -j DROP5. 企业级安全方案内容信任:代码语言:javascript复制# 启用Docker内容信任
export DOCKER_CONTENT_TRUST=1
docker push myrepo/myimage安全基准检查:代码语言:javascript复制# 使用CIS基准检查
docker run -it --net host --pid host --userns host --cap-add audit_control \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
aquasec/kube-bench:latest运行时保护:代码语言:javascript复制# Falco实时监控
docker run -d --name falco \
--privileged \
-v /var/run/docker.sock:/host/var/run/docker.sock \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
falcosecurity/falco6. 安全最佳实践清单 镜像构建:
使用最小化基础镜像 (Alpine, Distroless)多阶段构建减少攻击面定期更新基础镜像扫描第三方依赖 运行时:
禁用特权模式限制资源使用启用只读根文件系统使用用户命名空间隔离 网络:
限制容器网络访问使用网络策略加密敏感通信监控网络流量 监控:
集中式日志收集实时异常检测定期安全审计漏洞扫描计划11. 监控与日志全面监控与日志管理指南1. 容器监控深度解析代码语言:javascript复制# 实时监控容器资源
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
# 获取容器指标API
curl --unix-socket /var/run/docker.sock \
http://localhost/containers/
# 使用cAdvisor收集指标
docker run -d \
--name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
gcr.io/cadvisor/cadvisor:v0.47.02. Prometheus监控方案配置示例:代码语言:javascript复制# prometheus.yml
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']关键监控指标:容器CPU使用率: container_cpu_usage_seconds_total容器内存使用: container_memory_usage_bytes网络流量: container_network_receive_bytes_total磁盘IO: container_fs_writes_bytes_total3. 企业级日志架构Fluentd配置示例:代码语言:javascript复制
@type forward
port 24224
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
日志收集命令:代码语言:javascript复制# 使用Fluentd驱动
docker run --log-driver=fluentd \
--log-opt fluentd-address=fluentd:24224 \
--log-opt tag="docker.{{.Name}}" \
nginx4. 告警与事件响应告警规则示例 (Prometheus):代码语言:javascript复制groups:
- name: docker-alerts
rules:
- alert: HighMemoryUsage
expr: container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.name }}"事件响应流程:实时事件监控: docker events --filter 'event=die'自动重启策略: docker run --restart unless-stopped myapp事件触发脚本:代码语言:javascript复制docker events --format '{{json .}}' | while read event; do
echo "Event: $event"
# 触发自定义处理逻辑
done5. 性能瓶颈分析性能分析工具:代码语言:javascript复制# 使用perf分析容器性能
docker run --privileged --pid=host -it \
brendangregg/perf stat -a
# 火焰图生成
docker run --privileged --pid=host -it \
brendangregg/perf record -F 99 -a -g -- sleep 30常见瓶颈指标:CPU限制: Throttled CPU Time内存压力: OOM Kill Count磁盘IO等待: I/O Wait Percentage网络丢包: Packet Drop Rate6. 日志最佳实践结构化日志:代码语言:javascript复制{
"timestamp": "2023-01-01T12:00:00Z",
"level": "ERROR",
"message": "Failed to connect",
"container": "webapp",
"trace_id": "abc123"
}日志轮转策略:代码语言:javascript复制# 配置日志轮转
docker run --log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx敏感信息过滤:代码语言:javascript复制# 使用log-driver过滤敏感数据
docker run --log-driver=syslog \
--log-opt syslog-format=rfc5424 \
--log-opt tag="{{.ImageName}}/{{.Name}}" \
--log-opt env=SECRET_KEY \
myapp12. CI/CD集成基本流程代码提交触发构建运行测试容器构建生产镜像部署到测试环境自动化测试部署到生产环境工具集成 Jenkins:
使用Docker Agent构建管道示例 GitLab CI:
.gitlab-ci.yml 配置使用Docker-in-Docker GitHub Actions:
使用container jobs缓存优化13. 生产环境部署编排选择 Kubernetes:
架构概述部署策略(滚动更新、蓝绿部署) Docker Swarm:
集群搭建服务扩展 ECS:
AWS托管方案Fargate无服务器容器高可用策略多节点部署健康检查配置自动恢复机制14. 性能调优容器层面 资源限制:
CPU份额:--cpu-shares内存限制:--memoryIO限制:--blkio-weight 配置优化:
选择合适的存储驱动调整ulimit内核参数调优镜像层面使用Alpine基础镜像多阶段构建合并RUN指令减少层数15. 高级技巧调试技巧进入运行中容器:
代码语言:javascript复制docker exec -it
代码语言:javascript复制docker top
代码语言:javascript复制docker history
代码语言:javascript复制# 停止所有容器
docker stop $(docker ps -aq)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有镜像
docker rmi $(docker images -q)导出/导入:
代码语言:javascript复制# 导出容器
docker export
# 导入为镜像
cat container.tar | docker import - new-image