Docker命令指南
🐳 Docker命令指南
本文提供了Docker的完整命令参考与实战案例,包括容器生命周期管理、镜像构建优化、网络配置、数据持久化和多容器编排等全面指南,适合初学者入门和专业开发者进阶使用。
关键词: Docker命令大全, Docker教程, 容器技术入门, Docker镜像优化, Docker网络配置, Docker数据卷, Dockerfile最佳实践, Docker Compose配置, Docker Swarm集群, 容器编排, 微服务部署, Docker故障排除
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux、Windows 或云平台上运行。
📝 文章摘要
本Docker指南涵盖了从基础到高级的所有核心命令和实战用例,专为中国开发者设计。无论您是刚接触容器化的新手,还是寻找特定命令参考的资深用户,本文都能满足您的需求。您将学习如何高效管理容器生命周期、构建和优化镜像、配置复杂网络、实现数据持久化,以及使用Docker Compose和Docker Swarm进行多容器应用管理和集群部署。本文同时提供常见问题诊断和最佳实践,助您在实际开发和生产环境中驾驭Docker技术。
🚢 从入门到精通的Docker实战指南 🚢
💡 命令复制提示: 点击每个命令代码块右上角的复制按钮,即可快速复制命令到剪贴板。所有命令均已格式化,可直接粘贴到终端中执行。
前言:如果您不想在本站观看,可前往另一个博客继续更舒适的阅读:https://blog.lqza.cn/article/9
📑 目录
- 基础命令
- 容器生命周期管理
- 镜像管理命令
- 容器构建指南
- 容器更新与回滚
- 网络管理
- 数据卷管理
- 系统与监控命令
- Docker Compose命令
- Docker Swarm命令
- Docker安全管理
- 故障排除与诊断
- 快速查找常用命令
- Docker最佳实践
- 常见问题解答(FAQ)
- 有用的资源
🔰 基础命令
掌握这些基础命令是使用Docker的第一步,它们是所有Docker操作的基础。
命令 | 语法 | 描述 |
---|---|---|
🏷️ docker --version | docker --version | 显示Docker版本信息 |
ℹ️ docker info | docker info | 显示系统范围的Docker信息,包括容器数量、镜像数量、服务器版本等 |
🆘 docker help | docker help [COMMAND] | 显示Docker命令帮助信息,如不指定具体命令则显示所有可用命令 |
🔄 docker login | docker login [OPTIONS] [SERVER] | 登录到Docker镜像仓库,默认为Docker Hub |
🚪 docker logout | docker logout [SERVER] | 从Docker镜像仓库注销,默认为Docker Hub |
💡 新手提示: 初次使用Docker,建议先运行docker version
检查安装是否成功,然后使用docker info
了解系统配置。
🔄 容器生命周期管理
容器生命周期管理是Docker的核心功能,掌握这些命令让您能够创建、启动、停止和管理容器。
🚀 docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 这是一个示例代码块
docker run -d --name my-container -p 8080:80 nginx
详细说明 (点击展开)
⏹ docker stop 和 docker start
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker start [OPTIONS] CONTAINER [CONTAINER...]
详细说明 (点击展开)
docker stop 选项:
-t, --time
: 等待停止的秒数,默认为10秒
docker start 选项:
-a, --attach
: 附加到容器的标准输出/标准错误-i, --interactive
: 附加到容器的标准输入
常用示例:
# 停止单个容器
docker stop my-container
# 停止多个容器
docker stop container1 container2
# 设置超时时间停止容器
docker stop -t 5 my-container
# 启动容器
docker start my-container
# 交互式启动容器
docker start -i my-container
🔄 docker restart
docker restart [OPTIONS] CONTAINER [CONTAINER...]
详细说明 (点击展开)
常用选项:
-t, --time
: 等待停止的秒数,默认为10秒
常用示例:
# 重启单个容器
docker restart my-container
# 重启多个容器
docker restart container1 container2
# 设置超时时间重启容器
docker restart -t 5 my-container
🛑 docker kill
docker kill [OPTIONS] CONTAINER [CONTAINER...]
详细说明 (点击展开)
常用选项:
-s, --signal
: 发送到容器的信号,默认为KILL
常用示例:
# 终止容器
docker kill my-container
# 使用SIGTERM信号终止容器
docker kill -s SIGTERM my-container
🗑️ docker rm
docker rm [OPTIONS] CONTAINER [CONTAINER...]
详细说明 (点击展开)
常用选项:
-f, --force
: 强制删除正在运行的容器-v, --volumes
: 删除与容器关联的匿名卷-l, --link
: 删除指定的链接
常用示例:
# 删除容器
docker rm my-container
# 强制删除正在运行的容器
docker rm -f my-container
# 删除容器及其关联的匿名卷
docker rm -v my-container
# 删除所有已停止的容器
docker rm $(docker ps -a -q -f status=exited)
🖼️ 镜像管理命令
镜像是Docker的核心组件,这些命令帮助您获取、创建、管理和优化Docker镜像。
⬇️ docker pull
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
详细说明 (点击展开)
常用选项:
-a, --all-tags
: 下载仓库中的所有标签镜像,获取镜像的所有版本--platform
: 如果服务器支持多平台,则设置平台,如linux/amd64
,linux/arm64
等-q, --quiet
: 静默模式,只显示镜像ID--disable-content-trust
: 跳过镜像验证(默认为true)
常用示例:
# 拉取最新版本的nginx镜像
docker pull nginx:latest
# 拉取指定版本的镜像
docker pull ubuntu:20.04
# 拉取镜像的所有版本
docker pull -a mysql
# 拉取特定平台的镜像
docker pull --platform linux/arm64 nginx
# 根据摘要拉取镜像(保证获取精确版本)
docker pull redis@sha256:a5a7e303b3b24b74df127756d8ebd6c2b965e2b670bdda309c22d5610b179c9a
国内镜像加速:
# 使用阿里云镜像加速
docker pull registry.cn-hangzhou.aliyuncs.com/public/nginx:latest
⬆️ docker push
docker push [OPTIONS] NAME[:TAG]
详细说明 (点击展开)
常用选项:
--disable-content-trust
: 跳过镜像签名(默认为true)--all-tags, -a
: 推送镜像的所有标签
常用示例:
# 推送镜像到Docker Hub(需要先docker login)
docker push myusername/myimage:tag
# 推送镜像到私有仓库
docker push registry.example.com:5000/myapp:1.0
# 推送镜像的所有标签
docker push -a myusername/myrepo
# 推送到国内仓库(如阿里云)
docker push registry.cn-hangzhou.aliyuncs.com/myspace/myapp:1.0
📋 docker images
docker images [OPTIONS] [REPOSITORY[:TAG]]
详细说明 (点击展开)
常用选项:
-a, --all
: 显示所有镜像(默认隐藏中间镜像)--digests
: 显示摘要信息--format
: 使用Go模板格式化输出-f, --filter
: 根据条件过滤镜像--no-trunc
: 不截断输出-q, --quiet
: 只显示镜像ID
常用示例:
# 列出所有镜像
docker images
# 列出包括中间层镜像在内的所有镜像
docker images -a
# 只显示镜像ID
docker images -q
# 按名称过滤镜像
docker images nginx
# 按标签过滤镜像
docker images nginx:1.19
# 使用过滤器过滤镜像
docker images --filter "dangling=true"
# 使用格式化输出
docker images --format "{{.Repository}}:{{.Tag}}: {{.Size}}"
🔍 docker search
docker search [OPTIONS] TERM
详细说明 (点击展开)
常用选项:
--filter, -f
: 根据条件过滤结果--format
: 使用Go模板格式化输出--limit
: 限制搜索结果数量--no-trunc
: 不截断输出
常用示例:
# 搜索nginx镜像
docker search nginx
# 限制搜索结果数量
docker search --limit 5 nginx
# 搜索星标超过100的镜像
docker search --filter stars=100 nginx
# 搜索官方镜像
docker search --filter is-official=true nginx
# 搜索自动构建的镜像
docker search --filter is-automated=true nginx
🗑️ docker rmi
docker rmi [OPTIONS] IMAGE [IMAGE...]
详细说明 (点击展开)
常用选项:
-f, --force
: 强制删除--no-prune
: 不删除未标记的父镜像
常用示例:
# 删除指定镜像
docker rmi nginx:latest
# 强制删除镜像
docker rmi -f nginx:latest
# 删除多个镜像
docker rmi nginx:latest redis:alpine
# 删除所有未使用的镜像
docker rmi $(docker images -q -f "dangling=true")
# 删除所有镜像
docker rmi $(docker images -q)
🏷️ docker tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
详细说明 (点击展开)
常用示例:
# 为镜像添加新标签
docker tag nginx:latest mynginx:v1
# 为镜像添加仓库前缀
docker tag nginx:latest username/nginx:latest
# 为镜像添加私有仓库地址
docker tag nginx:latest registry.example.com:5000/nginx:latest
# 为镜像添加版本标签
docker tag nginx:latest nginx:1.19.10
📝 docker history
docker history [OPTIONS] IMAGE
详细说明 (点击展开)
常用选项:
--format
: 使用Go模板格式化输出--human, -H
: 以人类可读的格式打印大小和日期--no-trunc
: 不截断输出-q, --quiet
: 只显示提交ID
常用示例:
# 显示镜像的构建历史
docker history nginx
# 不截断命令输出
docker history --no-trunc nginx
# 只显示提交ID
docker history -q nginx
🔄 docker save 和 docker load
docker save [OPTIONS] IMAGE [IMAGE...]
docker load [OPTIONS]
详细说明 (点击展开)
docker save 选项:
-o, --output
: 写入到文件,而不是STDOUT
docker load 选项:
-i, --input
: 从文件读取,而不是STDIN-q, --quiet
: 静默模式
常用示例:
# 将镜像保存为tar文件
docker save -o nginx.tar nginx:latest
# 将多个镜像保存到一个tar文件
docker save -o images.tar nginx:latest redis:alpine
# 从tar文件加载镜像
docker load -i nginx.tar
# 静默加载镜像
docker load -i nginx.tar -q
🏗️ 容器构建指南
Docker容器构建是将应用代码转换为可部署容器的过程,掌握构建技巧可大幅提高开发效率。
📝 基本Dockerfile构建
使用Dockerfile构建镜像
Dockerfile是一个文本文件,其中包含了一系列指令,用于描述如何构建一个Docker镜像。通过编写Dockerfile,可以自定义镜像的内容和配置,并将其用于部署应用程序。优秀的Dockerfile可以大幅减小镜像体积,提高构建速度和运行效率。
Dockerfile基本指令:
# 官方基础镜像,推荐使用特定版本
FROM node:14-alpine
# 设置维护者信息
LABEL maintainer="your-email@example.com"
# 设置工作目录
WORKDIR /app
# 复制package.json和package-lock.json
COPY package*.json ./
# 安装依赖 (利用Docker缓存优化构建过程)
RUN npm ci --production && \
# 清理npm缓存减小镜像体积
npm cache clean --force && \
# 删除不必要的文件进一步减小体积
rm -rf /tmp/*
# 复制应用程序代码
COPY . .
# 设置环境变量
ENV NODE_ENV=production \
PORT=8080
# 暴露应用程序端口
EXPOSE 8080
# 设置容器健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -q -O - http://localhost:8080/health || exit 1
# 启动应用程序
CMD ["node", "server.js"]
构建和运行镜像:
# 构建镜像
docker build -t myapp:1.0 .
# 指定Dockerfile路径构建
docker build -t myapp:1.0 -f Dockerfile.prod .
# 添加构建参数
docker build -t myapp:1.0 --build-arg NODE_ENV=production .
# 使用BuildKit加速构建
DOCKER_BUILDKIT=1 docker build -t myapp:1.0 .
# 运行容器
docker run -d --name myapp-container -p 8080:8080 myapp:1.0
Dockerfile最佳实践:
- 使用特定版本标签 - 避免使用
latest
标签,确保构建可重现 - 减少层数 - 合并RUN命令减少镜像层数
- 合理排序指令 - 将不常变更的指令放在前面,利用缓存
- 使用.dockerignore - 排除不需要的文件,加快构建速度
- 清理临时文件 - 在同一层中清理临时文件和缓存
- 使用多阶段构建 - 隔离编译环境和运行环境,减小最终镜像大小
- 安装生产环境必需的依赖 - 只安装必需的依赖,减小镜像体积
- 设置健康检查 - 确保服务可用性,避免容器启动失败
- 合理组织Dockerfile - 让常变更的内容放在后面,利用缓存
- 使用.dockerignore排除不必要文件 - 加快构建速度,减小镜像大小
🔁 容器更新与回滚
容器更新与回滚策略
良好的容器更新与回滚策略是确保生产环境可靠性和可维护性的关键。Docker提供了多种机制来管理应用程序的版本变更,从简单的单容器更新到复杂的集群滚动部署。本节将介绍从开发到生产的各种更新策略和回滚技术。
💡 命令复制提示: 您可以点击每个命令代码块右上角的复制按钮,快速复制命令到剪贴板。所有命令均已格式化,可直接粘贴到终端中执行。
📦 基于标签的更新策略
完整的标签更新流程:
构建并标记新版本镜像
# 构建新版本镜像并添加版本标签 docker build -t myapp:2.0 . # 同时添加latest标签(可选) docker tag myapp:2.0 myapp:latest
推送新版本镜像到仓库
# 推送特定版本标签 docker push myapp:2.0 # 推送latest标签(如果使用) docker push myapp:latest
部署前备份旧容器配置(可选但推荐)
# 导出旧容器配置(用于回滚) docker inspect myapp-container > myapp-container-config-backup.json
更新容器
# 方法1: 停止并删除旧容器,然后用新镜像创建 docker stop myapp-container docker rm myapp-container docker run -d --name myapp-container [OPTIONS] myapp:2.0 # 方法2: 使用docker-compose(如果使用compose) # 修改docker-compose.yml后执行: docker-compose up -d
验证新版本是否正常工作
# 检查容器状态 docker ps -a # 检查容器日志 docker logs -f myapp-container # 检查健康状态(如果配置了健康检查) docker inspect --format='{{.State.Health.Status}}' myapp-container
版本回滚流程:
如果新版本出现问题,可以使用以下步骤快速回滚:
# 停止有问题的容器
docker stop myapp-container
# 删除有问题的容器
docker rm myapp-container
# 使用旧版本镜像重新启动容器
docker run -d --name myapp-container [OPTIONS] myapp:1.0
🔔 最佳实践: 总是为每个版本使用具体的版本号标签(如1.0.1
,2.3.5
),而不仅仅依赖latest
标签。这能确保你知道哪个版本正在运行,并能够准确回滚。
🔄 使用Docker Compose进行更新与回滚
docker-compose.yml
文件中的镜像标签,然后重新部署,可以轻松更新整个应用堆栈。
使用Docker Compose更新的详细步骤:
备份当前的docker-compose.yml文件
# 备份配置文件 cp docker-compose.yml docker-compose.yml.backup
修改docker-compose.yml中的镜像版本
services: webapp: image: myapp:2.0 # 从1.0更新到2.0 # 其他配置保持不变
使用up命令更新服务(多种方法)
# 方法1: 更新所有服务 docker-compose up -d # 方法2: 只更新特定服务,不重启依赖服务 docker-compose up -d --no-deps webapp # 方法3: 强制重新创建容器,即使配置没有变化 docker-compose up -d --force-recreate webapp
检查更新结果
# 查看服务状态 docker-compose ps # 查看更新后的日志 docker-compose logs -f webapp
使用Docker Compose回滚的详细步骤:
如果更新后发现问题,可以通过以下方式回滚:
使用备份的配置文件恢复
# 恢复之前的配置文件 cp docker-compose.yml.backup docker-compose.yml
或者手动编辑docker-compose.yml恢复到旧版本
services: webapp: image: myapp:1.0 # 回滚到1.0版本 # 其他配置不变
重新部署
# 重新部署服务 docker-compose up -d # 或者强制重新创建容器 docker-compose up -d --force-recreate webapp
💡 高级提示: 使用环境变量或.env
文件管理镜像标签,而不是硬编码在Compose文件中,可以简化更新和回滚流程。
# docker-compose.yml示例
services:
webapp:
image: myapp:${APP_VERSION:-latest}
# 更新版本
APP_VERSION=2.0 docker-compose up -d
# 回滚
APP_VERSION=1.0 docker-compose up -d
🔀 使用Docker Swarm进行滚动更新与回滚
在Swarm中创建服务并配置更新策略:
# 创建带更新配置的服务
docker service create \
--name myservice \
--replicas 3 \
--update-delay 10s \
--update-parallelism 1 \
--update-failure-action rollback \
--update-monitor 30s \
--update-order start-first \
myapp:1.0
参数解释:
--replicas 3
: 运行3个实例--update-delay 10s
: 更新每个任务之间等待10秒--update-parallelism 1
: 一次更新1个任务--update-failure-action rollback
: 更新失败时自动回滚--update-monitor 30s
: 监控每个更新任务30秒以检测失败--update-order start-first
: 先启动新任务再停止旧任务(零停机)
执行Swarm服务更新:
# 更新到新版本
docker service update \
--image myapp:2.0 \
myservice
# 更新时可以修改更新策略
docker service update \
--image myapp:2.0 \
--update-delay 20s \
--update-parallelism 2 \
myservice
监控更新进度:
# 查看服务状态和更新进度
docker service ps myservice
Swarm服务回滚:
# 手动回滚到之前的版本
docker service update --rollback myservice
# 查看回滚状态
docker service ps myservice
📋 高级更新策略与最佳实践
Docker Swarm更新选项完整参考
参数 | 描述 | 示例 |
---|---|---|
--update-parallelism |
同时更新的任务数 | --update-parallelism 2 |
--update-delay |
任务更新之间的延迟 | --update-delay 20s |
--update-failure-action |
更新失败时的操作 | --update-failure-action [continue|pause|rollback] |
--update-max-failure-ratio |
更新期间允许的失败率 | --update-max-failure-ratio 0.3 |
--update-monitor |
更新后监控的持续时间 | --update-monitor 30s |
--update-order |
更新顺序 | --update-order [start-first|stop-first] |
完整的服务更新示例:
docker service update \
--image myapp:2.0 \
--update-parallelism 2 \
--update-delay 20s \
--update-failure-action rollback \
--update-max-failure-ratio 0.3 \
--update-monitor 30s \
--update-order start-first \
--health-cmd "curl -f http://localhost:8080/health || exit 1" \
--health-interval 5s \
--health-retries 3 \
--health-timeout 2s \
--health-start-period 10s \
myservice
💾 保持数据持久性与状态
更新过程中的数据持久化
在更新容器时,确保状态和数据不会丢失是至关重要的。使用数据卷和 Docker Config/Secrets 可以帮助管理持久数据和配置。
使用命名卷保存数据:
# 创建命名卷
docker volume create app-data
# 使用卷部署容器(数据在更新过程中保留)
docker run -d \
--name myapp \
-v app-data:/app/data \
myapp:1.0
使用配置和密钥:
# 创建配置
docker config create app-config ./config.json
# 创建密钥
docker secret create app-secret ./secret.txt
# 在服务中使用配置和密钥
docker service create \
--name myservice \
--config app-config \
--secret app-secret \
myapp:1.0
🧪 蓝绿部署与金丝雀发布
蓝绿部署(Blue-Green Deployment)
同时维护两个生产环境,一个活跃(蓝),一个待发布(绿)。更新时,将流量从蓝环境切换到绿环境,可实现零停机部署和快速回滚。
蓝绿部署实现步骤:
部署"绿"版本(新版本)
# 部署新版本但暂不对外提供服务 docker run -d --name myapp-green -p 8081:80 myapp:2.0
- 测试"绿"版本
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »