Docker 和 Docker Compose 使用指南:从安装到管理全流程实战
发布日期:2026年6月10日
如果你在做私有部署、搭建开发环境、或者运维任何服务,Docker 几乎是绑不开的工具。
这篇文章按照安装 → 启动 → 管理的递进顺序,带你从零掌握 Docker 和 Docker Compose 的核心使用方法,最后附上常用命令速查表,方便日常翻阅。
🐳 Docker 到底好在哪?
在 Docker 出现之前,部署一个应用的典型流程是这样的:
- 买一台服务器
- 安装操作系统
- 安装运行环境(JDK、Python、Node.js……)
- 安装数据库(MySQL、Redis……)
- 上传代码,配置环境变量
- 祈祷环境配置和开发机一致,不要出幺蛾子
这套流程每换一台服务器就要重复一遍,而且经常遇到"在我电脑上能跑,在服务器上报错"的经典问题。
Docker 解决了这个问题——它把你的应用和所有依赖打包成一个"容器",在任何机器上都能以相同的方式运行。
用个比喻来说,比如家里人来一个亲戚,需要给这个亲戚门口准备拖鞋,卫生间准备洗漱用品,房间准备新的褥子床单被套等。等亲戚走了,再挨个收拾整理,即琐碎又麻烦。 而docker类似在家里单独开了一个标准间,里面一切按照设定的要求铺设布置好,并且跟原来家里的环境隔离。当亲戚走了,可以把这个标准间整个收起来,如果里面东西有需要的可以提前收起来,然后整个标间都回收了。 而在软件层面这种技术就是docker,这个标准间可以看作是一个容器,里面装的是亲戚这个应用和所有依赖。
三个核心概念
镜像(Image) → 应用的"安装包",包含了运行环境和代码
容器(Container)→ 镜像运行起来的"实例",可以理解为一台轻量级虚拟机
仓库(Registry) → 存放镜像的"应用商店",如 Docker Hub类比理解:
- 镜像 = 手机的 App 安装包(.apk / .ipa)
- 容器 = 安装到手机上正在运行的 App
- 仓库 = 应用商店(App Store / 应用商店)
📦 Docker 篇:安装 → 启动 → 管理
一、安装 Docker
Linux(CentOS / Ubuntu)
Ubuntu / Debian:
# 更新包索引
sudo apt-get update
# 安装必要的依赖
sudo apt-get install -y ca-certificates curl gnupg
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 并设为开机自启
sudo systemctl start docker
sudo systemctl enable dockerCentOS / RHEL:
# 安装依赖
sudo yum install -y yum-utils
# 添加 Docker 软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 并设为开机自启
sudo systemctl start docker
sudo systemctl enable docker配置国内镜像加速(重要且推荐):
由于国内访问 Docker Hub 较慢,建议配置镜像加速:
# 编辑 Docker 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart dockerWindows / macOS
Windows 和 macOS 用户需要使用 Docker Desktop:
- 访问 https://www.docker.com/products/docker-desktop 下载安装包
- 运行安装程序,按提示完成安装
- 安装完成后,Docker Desktop 会自动启动
- 打开终端,运行
docker --version验证安装
验证安装
# 检查 Docker 版本
docker --version
# 检查 Docker 服务状态
docker info
# 运行测试容器(Hello World)
docker run hello-world如果看到 Hello from Docker! 的输出,说明安装成功。
将当前用户加入 docker 组(Linux,可选)
# 避免每次使用 docker 都要 sudo
sudo usermod -aG docker $USER
# 重新登录终端后生效二、启动容器
安装好 Docker 之后,就可以拉取镜像并启动容器了。
拉取镜像
# 拉取nginx 镜像
docker pull nginx
# 拉取指定版本的镜像
docker pull mysql:8.0
docker pull redis:7.0
docker pull nginx:1.25
# 拉取私有仓库的镜像(需要先 docker login)
docker pull registry.example.com/myapp:latest
# 查看本地已有的镜像
docker images运行容器(启动程序)
# 最简单的运行方式(后台模式,映射端口) 启动一个nginx
docker run -d --name my-nginx -p 80:80 nginx
# 高级一些的启动方式:运行容器并设置环境变量
docker run -d --name my-app \
-e DB_HOST=localhost \
-e DB_PORT=3306 \
-e DB_PASSWORD=secret \
myapp:latest
# 更高级一些的启动方式,运行容器并挂载数据卷(持久化数据)
docker run -d --name my-app \
-v /host/data:/app/data \
-v /host/logs:/app/logs \
-p 8080:3000 \
myapp:latest
# 启动容器并限制资源
docker run -d --name my-app \
--memory="512m" \
--cpus="1.0" \
myapp:latest💡 常用参数说明:
-d:后台运行(detached 模式)--name:给容器起个名字,方便后续管理-p 宿主机端口:容器端口:端口映射,让外部访问容器内的服务-v 宿主机路径:容器路径:数据卷挂载,持久化容器内的数据-e KEY=VALUE:设置环境变量--network:指定网络--restart=always:容器退出时自动重启--memory/--cpus:限制容器使用的内存和 CPU
三、管理容器
容器跑起来之后,日常运维就靠这些命令了。
查看容器状态
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看容器的资源使用情况(CPU、内存)
docker stats
# 查看容器的详细信息
docker inspect my-nginx
# 查看容器内进程
docker top my-nginx
# 查看容器的端口映射
docker port my-nginx查看日志
# 实时跟踪容器日志(最常用)
docker logs -f my-nginx
# 查看最近 100 行日志
docker logs --tail 100 my-nginx
# 查看指定时间之后的日志
docker logs --since "2026-06-10T10:00:00" my-nginx容器生命周期管理
# 启动已停止的容器
docker start my-nginx
# 停止容器(优雅停止,发送 SIGTERM)
docker stop my-nginx
# 强制停止容器(发送 SIGKILL)
docker kill my-nginx
# 重启容器
docker restart my-nginx
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 停止并删除所有已停止的容器
docker container prune进入容器内部
# 进入容器的交互式终端(最常用)
docker exec -it my-nginx /bin/bash
# 如果容器没有 bash,用 sh
docker exec -it my-nginx /bin/sh
# 在容器内执行单条命令(不需要交互)
docker exec my-nginx cat /etc/nginx/nginx.conf
# 进入 MySQL 容器的命令行
docker exec -it my-mysql mysql -uroot -p镜像管理
# 查看本地所有镜像
docker images
# 查看镜像的详细信息
docker inspect nginx:latest
# 删除镜像
docker rmi nginx:latest
# 强制删除镜像
docker rmi -f nginx:latest
# 清理所有未使用的镜像(释放磁盘空间)
docker image prune -a数据卷管理
# 创建数据卷
docker volume create my-data
# 查看所有数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect my-data
# 删除数据卷
docker volume rm my-data
# 清理所有未使用的数据卷
docker volume prune💡 最佳实践: 重要数据(如数据库文件)一定要用命名数据卷或绑定挂载来持久化,不要依赖容器的可写层。容器一删,数据全丢。
系统清理
Docker 使用一段时间后会积累大量无用资源,占用磁盘空间:
# 查看 Docker 磁盘使用情况
docker system df
# 查看详细信息
docker system df -v
# 一键清理所有未使用的资源(镜像、容器、网络、缓存)
docker system prune
# 清理所有未使用的资源 + 未使用的镜像
docker system prune -a
# 清理所有未使用的资源 + 数据卷(⚠️ 会删除未挂载的数据卷)
docker system prune -a --volumes⚠️ 注意:
docker system prune -a --volumes会删除所有未被运行中容器使用的数据卷,执行前请确认重要数据已备份。
🐙 Docker Compose 篇:
Docker 解决了单个应用的部署问题,但现实中一个项目往往需要多个服务协同工作——应用 + 数据库 + 缓存 + 反向代理……
Docker Compose 就是用来一次性管理多个容器的工具。 一个 YAML 文件定义所有服务,一条命令全部启动。
一般来说,docker-compose 都不在需要用户再额外配置,最多改改某些服务的端口号(防止端口冲突),然后直接启动即可,非常的便捷
一、安装 Docker Compose
一般按照docker的时候,会自动带上 compose 组件,如果你按照的时候,没有勾选docker compose ,可以重新安装,或者使用下面的方法单独安装。
Linux
# 下载 Docker Compose(选择最新版本)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --versionWindows / macOS
如果安装了 Docker Desktop,Docker Compose 已经包含在内,无需单独安装。
# 验证安装
docker-compose --version二、启动服务
获取 docker-compose.yml
获取你所使用的项目的 docker-compose.yml 文件 或者自行编写docker-compose.yml 文件 (限于篇幅,本文章不提供编写docker-compose.yml的部分,如果有感兴趣的朋友请自行搜索对应教程)
启动
# 后台启动所有服务
docker-compose up -d
# 前台启动(可以看到实时日志,Ctrl+C 停止)
docker-compose up
# 重新构建镜像并启动
docker-compose up -d --build
# 强制重新创建所有容器
docker-compose up -d --force-recreate验证启动状态
# 查看服务状态
docker-compose ps
# 查看所有服务的日志
docker-compose logs -f三、管理服务
查看日志
# 查看所有服务的日志(实时跟踪)
docker-compose logs -f
# 查看指定服务的日志
docker-compose logs -f mysql
docker-compose logs -f app
# 查看最近 200 行日志
docker-compose logs --tail 200 app管理单个服务
# 只启动指定服务
docker-compose up -d mysql
# 只停止指定服务
docker-compose stop mysql
# 只重启指定服务
docker-compose restart mysql
# 在指定服务中执行命令
docker-compose exec mysql mysql -uroot -p
# 进入指定服务的 shell
docker-compose exec -it app /bin/bash服务生命周期
# 停止所有服务
docker-compose down
# 停止并删除数据卷(⚠️ 会清除数据)
docker-compose down -v
# 重启所有服务
docker-compose restart
# 暂停所有服务
docker-compose pause
# 恢复暂停的服务
docker-compose unpause扩展和更新
# 扩展某个服务的实例数量
docker-compose up -d --scale app=3
# 拉取最新镜像并更新服务(最常用的升级方式)
docker-compose pull
docker-compose up -d
# 验证 docker-compose.yml 语法
docker-compose config
# 查看服务使用的镜像
docker-compose images🔧 常见问题排查
容器启动失败
# 第一步:查看容器状态
docker ps -a
# 看 STATUS 列,是 Exited 还是 Created
# 第二步:查看日志
docker logs my-app
# 90% 的问题都能从日志里找到答案
# 第三步:检查配置
docker inspect my-app
# 看环境变量、挂载路径、端口映射是否正确常见原因:
- 端口被占用 → 换个端口或停掉占用端口的服务
- 配置文件路径错误 → 检查
-v挂载路径 - 环境变量缺失 → 检查
.env文件 - 内存不足 →
docker stats查看资源使用
网络不通
# 检查容器是否在同一个网络
docker network inspect my-network
# 测试容器之间的连通性
docker exec my-app ping my-mysql
# 检查端口是否正确映射
docker port my-app数据丢失
# 检查数据卷是否正确挂载
docker volume ls
docker inspect my-volume
# 进入容器查看数据目录
docker exec -it my-mysql ls -la /var/lib/mysql📋 命令速查表
Docker 常用命令
| 场景 | 命令 | 说明 |
|---|---|---|
| 安装验证 | docker --version | 查看 Docker 版本 |
docker run hello-world | 运行测试容器 | |
| 镜像操作 | docker pull <镜像>:<标签> | 拉取镜像 |
docker images | 查看本地镜像 | |
docker rmi <镜像> | 删除镜像 | |
docker image prune -a | 清理未使用的镜像 | |
| 启动容器 | docker run -d --name 名字 -p 端口:端口 镜像 | 后台运行容器 |
docker run -d -v 宿主机路径:容器路径 ... | 挂载数据卷 | |
docker run -d -e KEY=VALUE ... | 设置环境变量 | |
docker run -it 镜像 /bin/bash | 前台交互模式 | |
| 查看状态 | docker ps | 查看运行中的容器 |
docker ps -a | 查看所有容器(含已停止) | |
docker stats | 查看资源使用(CPU/内存) | |
docker inspect <容器> | 查看容器详情 | |
| 日志排查 | docker logs -f <容器> | 实时跟踪日志 |
docker logs --tail 100 <容器> | 查看最近 100 行 | |
| 生命周期 | docker start <容器> | 启动容器 |
docker stop <容器> | 停止容器 | |
docker restart <容器> | 重启容器 | |
docker rm <容器> | 删除容器 | |
| 进入容器 | docker exec -it <容器> /bin/bash | 进入容器终端 |
docker exec <容器> 命令 | 在容器内执行命令 | |
| 文件拷贝 | docker cp <源> <目标> | 宿主机和容器之间拷贝文件 |
| 网络 | docker network ls | 查看网络列表 |
docker network create 名字 | 创建网络 | |
| 数据卷 | docker volume ls | 查看数据卷列表 |
docker volume create 名字 | 创建数据卷 | |
| 系统清理 | docker system df | 查看磁盘占用 |
docker system prune -a | 清理所有无用资源 |
Docker Compose 常用命令
| 场景 | 命令 | 说明 |
|---|---|---|
| 安装验证 | docker-compose --version | 查看版本 |
| 启动服务 | docker-compose up -d | 后台启动所有服务 |
docker-compose up | 前台启动(看日志) | |
docker-compose up -d --build | 重新构建并启动 | |
| 查看状态 | docker-compose ps | 查看服务状态 |
docker-compose images | 查看使用的镜像 | |
docker-compose config | 验证 YAML 语法 | |
| 日志排查 | docker-compose logs -f | 实时查看所有日志 |
docker-compose logs -f <服务名> | 查看指定服务日志 | |
docker-compose logs --tail 200 <服务> | 查看最近 200 行 | |
| 生命周期 | docker-compose down | 停止并删除所有服务 |
docker-compose down -v | 停止并删除数据卷(⚠️ 慎用) | |
docker-compose restart | 重启所有服务 | |
docker-compose pause / unpause | 暂停 / 恢复 | |
| 管理单服务 | docker-compose up -d <服务名> | 启动指定服务 |
docker-compose stop <服务名> | 停止指定服务 | |
docker-compose restart <服务名> | 重启指定服务 | |
| 进入容器 | docker-compose exec <服务名> /bin/sh | 进入服务容器 |
docker-compose exec mysql mysql -uroot -p | 进入 MySQL 命令行 | |
| 扩展更新 | docker-compose pull | 拉取最新镜像 |
docker-compose up -d | 重新创建容器 | |
docker-compose up -d --scale 服务=3 | 扩展实例数 |
🐟 实战:用 Docker Compose 部署摸鱼看板
来看一个真实案例——用 Docker Compose 一键部署摸鱼看板,包含应用服务、MySQL 数据库和 Redis 缓存。
前置要求
- Docker 20.10+
- Docker Compose 2.0+
部署步骤
1. 获取部署包
联系技术支持获取 Docker Compose 部署包(微信号:moyu-boby,添加时备注"Docker Compose 部署")
2. 启动服务
docker-compose up -d4. 访问系统
浏览器打开 http://localhost:8080,默认账号:admin / 12345678
升级方式
docker-compose pull
docker-compose up -d是不是比传统部署方式简单了很多?过去需要几个小时配置环境的工作,现在几条命令就搞定了。
🏁 总结
Docker 和 Docker Compose 已经成为现代软件部署的标配工具。掌握它们不需要理解底层原理,只需要记住常用命令 + 理解核心概念 + 多用多练。
给初学者的三条建议:
- 先用再学:不要试图一次记住所有命令,先跑通一个容器,再逐步学习高级用法
- 善用日志:遇到问题先
docker logs,90% 的问题都能在日志中找到答案 - 数据持久化:重要数据一定要用数据卷挂载,否则容器一删数据全丢
给有经验用户的三条建议:
- 统一用 Docker Compose:管理多个服务比手写 docker run 命令高效得多
- 环境变量外置:用
.env文件管理配置,不要把密码写死在 YAML 里 - 日志轮转 + 资源限制:防止日志撑爆磁盘、容器吃掉所有内存
希望这篇文章能成为你日常使用 Docker 时的速查手册,遇到问题随时翻出来看看。
🔗 相关阅读