Docker 命令完全指南:从入门到实战

Docker 已经成为现代软件开发与部署的事实标准。无论你是开发者、运维工程师,还是刚接触容器技术的小白,掌握 Docker 常用命令都是必备技能。本文将系统性地梳理 Docker 命令的方方面面,从镜像管理到容器生命周期,再到网络与卷,并辅以实战示例,助你快速上手。

一、Docker 基础架构回顾

在开始命令学习之前,简单回顾 Docker 的核心组件:

  • 镜像(Image):只读模板,包含运行应用所需的代码、库、环境变量等。
  • 容器(Container):镜像的运行实例,拥有独立文件系统、网络等资源。
  • 仓库(Registry):存储镜像的地方,如 Docker Hub。
  • 网络(Network):容器间通信的虚拟网络。
  • 卷(Volume):持久化存储,独立于容器生命周期。

理解这些概念后,命令就变得有迹可循。

二、镜像管理命令

镜像是容器的基石,掌握镜像命令是第一步。

1. 拉取镜像

bash 复制代码
# 从 Docker Hub 拉取一个镜像
docker pull nginx:latest

# 拉取指定版本
docker pull ubuntu:20.04

docker pull 会下载镜像到本地。如果不指定标签,默认拉取 latest

2. 列出本地镜像

bash 复制代码
# 列出所有镜像
docker images

# 或
docker image ls

# 只显示镜像 ID
docker images -q

# 查看镜像大小等详细信息
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

3. 构建镜像

bash 复制代码
# 基于当前目录的 Dockerfile 构建
docker build -t myapp:v1 .

# 指定 Dockerfile 路径
docker build -f /path/to/Dockerfile -t myapp:v1 .

-t 为镜像指定名称和标签,. 表示构建上下文路径。

4. 删除镜像

bash 复制代码
# 删除指定镜像
docker rmi nginx:latest
docker image rm ubuntu:20.04

# 强制删除(即使有容器依赖)
docker rmi -f nginx:latest

# 删除所有未使用的镜像(悬空镜像)
docker image prune

5. 给镜像打标签

bash 复制代码
# 为本地镜像添加新标签
docker tag myapp:v1 myusername/myapp:v1

# 通常用于准备推送到远程仓库
docker tag myapp:v1 myregistry.com/myapp:latest

6. 推送镜像到仓库

bash 复制代码
# 登录 Docker Hub
docker login

# 推送镜像
docker push myusername/myapp:v1

三、容器生命周期命令

容器是镜像的运行实例,掌握容器命令是日常操作的核心。

1. 运行容器

bash 复制代码
# 简单运行一个 nginx 容器,并映射端口
docker run -d --name mynginx -p 8080:80 nginx

# 参数说明:
# -d:后台运行(detach)
# --name:给容器命名
# -p:端口映射,主机端口:容器端口

# 交互式运行并进入容器
docker run -it --name ubuntu_test ubuntu:20.04 /bin/bash

# -it:分配交互式终端,常用作调试

# 挂载卷
docker run -v /host/data:/container/data -d myapp

# 设置环境变量
docker run -e MY_ENV=production -d myapp

# 限制资源
docker run --memory="512m" --cpus="1.5" -d myapp

2. 查看容器

bash 复制代码
# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止)
docker ps -a

# 只显示容器 ID
docker ps -q

# 格式化输出
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

3. 启动、停止、重启、暂停、恢复容器

bash 复制代码
# 启动已存在的容器
docker start mynginx

# 停止运行中的容器
docker stop mynginx

# 强制停止(相当于 kill)
docker kill mynginx

# 重启
docker restart mynginx

# 暂停容器进程(保留内存)
docker pause mynginx

# 恢复
docker unpause mynginx

4. 删除容器

bash 复制代码
# 删除已停止的容器
docker rm mynginx

# 强制删除运行中的容器
docker rm -f mynginx

# 删除所有已停止的容器
docker container prune

# 删除所有容器(谨慎!)
docker rm -f $(docker ps -aq)

5. 进入容器内部

bash 复制代码
# 执行新命令(推荐,不会影响主进程)
docker exec -it mynginx /bin/bash

# 如果容器内没有 bash,可用 sh
docker exec -it alpine sh

# 以交互式 shell 进入正在运行的容器
docker exec -it mynginx /bin/bash

6. 查看容器日志

bash 复制代码
# 查看全部日志
docker logs mynginx

# 实时跟踪日志(类似 tail -f)
docker logs -f mynginx

# 查看最后 100 行
docker logs --tail 100 mynginx

7. 容器与主机文件复制

bash 复制代码
# 从容器复制文件到主机
docker cp mynginx:/usr/share/nginx/html/index.html ./index.html

# 从主机复制到容器
docker cp ./myfile.txt mynginx:/tmp/

8. 查看容器详细信息

bash 复制代码
# 输出容器的所有配置、网络、挂载等 JSON 信息
docker inspect mynginx

# 使用格式化提取特定信息(如 IP 地址)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx

四、网络管理命令

Docker 网络让容器间通信成为可能。默认有三种网络:bridge(桥接)、host(主机)、none。

1. 列出网络

bash 复制代码
docker network ls

2. 创建网络

bash 复制代码
# 创建一个自定义桥接网络
docker network create mynet

# 指定子网和网关
docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.1 mynet

3. 将容器连接到网络

bash 复制代码
# 运行容器时指定网络
docker run -d --name app --network mynet nginx

# 将已有容器连接到网络
docker network connect mynet app

# 断开网络
docker network disconnect mynet app

4. 查看网络详情

bash 复制代码
docker network inspect mynet

5. 删除网络

bash 复制代码
# 删除前需断开所有使用该网络的容器
docker network rm mynet

五、卷管理命令

卷用于持久化数据,独立于容器。

1. 列出卷

bash 复制代码
docker volume ls

2. 创建卷

bash 复制代码
docker volume create myvol

3. 查看卷详情

bash 复制代码
docker volume inspect myvol

4. 挂载卷

bash 复制代码
# 运行容器时挂载卷
docker run -d -v myvol:/data --name app myapp

# 使用 --mount 语法(更明确)
docker run -d --mount source=myvol,target=/data myapp

# 绑定挂载主机目录(不推荐用于生产数据卷)
docker run -v /host/path:/container/path myapp

5. 删除卷

bash 复制代码
# 删除指定卷
docker volume rm myvol

# 删除所有未使用的卷
docker volume prune

六、系统信息与清理

1. 查看 Docker 系统信息

bash 复制代码
# 显示系统级信息(版本、内核、镜像数量等)
docker info

# 查看客户端与服务端版本
docker version

2. 查看磁盘使用情况

bash 复制代码
# 类似 df,显示镜像、容器、卷的占用
docker system df

# 详细模式
docker system df -v

3. 清理系统资源

bash 复制代码
# 清理所有未使用资源(镜像、容器、网络、构建缓存)
docker system prune

# 自动确认,并清理卷
docker system prune -a --volumes

# 只清理构建缓存
docker builder prune

七、高级技巧与最佳实践

1. 组合命令(常用操作)

bash 复制代码
# 停止并删除所有容器
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

# 删除所有悬空镜像
docker rmi $(docker images -f "dangling=true" -q)

# 批量删除包含特定关键词的容器
docker rm $(docker ps -aq --filter "name=myapp")

2. 使用别名提高效率

将常用命令添加到 ~/.bashrc~/.zshrc

bash 复制代码
alias d='docker'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dexec='docker exec -it'
alias dlogs='docker logs -f'

3. 容器自动重启策略

bash 复制代码
docker run -d --restart=always --name myapp myapp
# 可选策略:no / on-failure / unless-stopped / always

4. 限制容器日志大小

防止容器日志占满磁盘:

bash 复制代码
docker run -d --log-opt max-size=10m --log-opt max-file=3 myapp

5. 使用 Docker Compose(进阶)

虽然本文聚焦于单机命令,但多容器应用推荐使用 Compose。它基于 YAML 文件管理服务、网络、卷,命令更简洁:

bash 复制代码
docker-compose up -d
docker-compose down

八、总结


立即进入

相关推荐
繁星星繁2 小时前
Docker(一)
java·c语言·数据结构·c++·docker·容器·eureka
xin_yao_xin2 小时前
Linux 下 Docker 安装教程(2026)
linux·运维·docker
Riu_Peter2 小时前
【技术】Docker 释放空间
运维·docker·容器
杨浦老苏3 小时前
可视化Docker Compose构建器VCompose
运维·docker·开发·可视化·群晖
爱学习的程序媛3 小时前
【Day2】WSL2+Docker配置全攻略
运维·docker·容器·wls2
me8323 小时前
【Linux】解决Docker-Compose拉取Jenkins时失败问题。
linux·docker·jenkins
m0_694845574 小时前
marimo搭建教程:替代Jupyter的交互式开发工具
服务器·ide·python·docker·jupyter·github
超级小的大杯柠檬水4 小时前
docker
运维·docker·容器
冷色系里的一抹暖调4 小时前
Dify 插件离线打包完整指南(Windows + Docker 版)
docker·ai·dify