Docker 部署教程 2026 实战版:从镜像构建到 Compose 编排,一篇讲透项目上线
Docker Docker部署教程|2026最新版
Docker 已经成为现代应用部署的基础工具之一。无论你是开发者、运维工程师,还是想快速搭建个人项目,Docker 都能帮助你把“环境配置、依赖管理、应用交付”这三件事统一起来,让部署更轻、更快、更稳定。
这篇文章将以2026年常见实践为 기준,系统讲解 Docker 的核心概念、安装方式、镜像与容器使用、Docker Compose 编排、项目部署流程、数据持久化、网络配置、日志查看、常见问题排查,以及生产环境建议。你可以把它当作一篇从入门到实战的 Docker 部署教程。
一、Docker 是什么?为什么大家都在用它?
Docker 本质上是一个容器化平台。它可以把应用程序及其依赖打包成一个“镜像”,然后基于这个镜像启动多个“容器”。
1.1 容器和虚拟机的区别
很多初学者会把 Docker 和虚拟机混淆,其实两者差别很大:
- 虚拟机:模拟完整操作系统,资源开销大,启动慢。
- Docker 容器:共享宿主机内核,轻量、启动快、资源占用低。
1.2 Docker 的核心价值
Docker 的优势主要体现在:
- 环境一致:开发、测试、生产尽量一致,减少“我本地能跑”的问题。
- 部署快速:一个镜像可在不同机器上快速启动。
- 隔离性强:每个容器相对独立,互不干扰。
- 便于扩展:可配合 Compose、K8s 做服务编排。
- 版本可控:镜像可打标签,方便回滚。
二、Docker 的核心概念
在正式部署前,先认识几个关键概念。
2.1 镜像(Image)
镜像可以理解为“应用模板”。它包含:
- 操作系统基础环境
- 运行时依赖
- 应用代码
- 启动命令
镜像是只读的,类似安装包。
2.2 容器(Container)
容器是镜像运行后的实例。你可以把它理解为“启动后的应用进程”。
特点:
- 可启动、停止、删除
- 可以映射端口
- 可以挂载数据卷
- 有自己的文件系统视图
2.3 Dockerfile
Dockerfile 是构建镜像的脚本文件。你可以在里面定义:
- 基础镜像
- 工作目录
- 复制文件
- 安装依赖
- 暴露端口
- 启动命令
2.4 Docker Compose
如果一个项目不止一个容器,比如:
- Web 服务
- MySQL 数据库
- Redis 缓存
- Nginx 反向代理
那就需要 Compose 来统一管理。它可以通过一个 docker-compose.yml 文件完成多容器编排。
三、Docker 安装教程
不同系统安装方式略有区别,下面以主流平台为例说明。
3.1 Linux 安装 Docker
以 Ubuntu 为例,常见安装步骤如下:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
添加 Docker 官方源:
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
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
验证安装:
docker --version
docker compose version
3.2 Windows / macOS 安装
推荐直接安装 Docker Desktop,安装后即可使用 Docker CLI 和 Compose。
安装完成后执行:
docker version
docker compose version
如果能看到版本信息,说明安装成功。
四、Docker 常用命令速查
下面是日常最常用的一些命令。
4.1 查看镜像
docker images
4.2 拉取镜像
docker pull nginx:latest
4.3 运行容器
docker run -d --name mynginx -p 8080:80 nginx:latest
参数说明:
-d:后台运行--name:容器名称-p 8080:80:端口映射,宿主机 8080 对应容器 80nginx:latest:使用的镜像
4.4 查看运行中的容器
docker ps
查看所有容器:
docker ps -a
4.5 进入容器
docker exec -it mynginx sh
如果容器支持 bash,也可以:
docker exec -it mynginx bash
4.6 停止和删除容器
docker stop mynginx
docker rm mynginx
4.7 删除镜像
docker rmi nginx:latest
4.8 查看日志
docker logs -f mynginx
五、使用 Dockerfile 构建自己的应用镜像
下面以一个简单的 Node.js 项目为例,说明如何构建镜像。
5.1 项目结构
myapp/
├── app.js
├── package.json
└── Dockerfile
5.2 示例代码
app.js:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello Docker!\n');
});
server.listen(3000, () => {
console.log('Server running on port 3000');
});
package.json:
{
"name": "myapp",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
}
}
5.3 编写 Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
5.4 构建镜像
docker build -t myapp:1.0 .
5.5 运行容器
docker run -d --name myapp -p 3000:3000 myapp:1.0
浏览器访问:
http://localhost:3000
如果看到 Hello Docker!,说明部署成功。
六、Docker Compose:多容器项目的最佳搭档
如果你的项目包含 Web 服务、数据库、缓存,那么单靠 docker run 会非常麻烦。Docker Compose 可以统一管理多个服务。
6.1 示例:Node.js + MySQL + Redis
项目目录:
project/
├── app/
├── Dockerfile
└── docker-compose.yml
6.2 compose 文件示例
version: "3.9"
services:
web:
build: .
container_name: webapp
ports:
- "3000:3000"
depends_on:
- mysql
- redis
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: 123456
MYSQL_DATABASE: demo
REDIS_HOST: redis
mysql:
image: mysql:8.4
container_name: mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: demo
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:7-alpine
container_name: redis7
restart: always
ports:
- "6379:6379"
volumes:
mysql_data:
6.3 启动服务
docker compose up -d
查看状态:
docker compose ps
停止服务:
docker compose down
如果你想连同数据卷一起删除:
docker compose down -v
七、Docker 部署实战流程
下面给出一个通用部署流程,适用于大多数 Web 项目。
7.1 第一步:准备项目代码
确认项目可以在本地正常运行,至少要做到:
- 依赖安装无错误
- 配置文件明确
- 端口可启动
- 日志输出正常
7.2 第二步:编写 Dockerfile
按照应用语言选取基础镜像,例如:
- Java:
openjdk - Node.js:
node - Python:
python - Go:
golang - Nginx:
nginx
7.3 第三步:构建镜像
docker build -t yourapp:1.0 .
7.4 第四步:启动容器
docker run -d \
--name yourapp \
-p 8080:80 \
--restart unless-stopped \
yourapp:1.0
7.5 第五步:检查运行情况
docker ps
docker logs -f yourapp
7.6 第六步:更新部署
当你修改代码后,只需重新构建镜像并重启容器:
docker build -t yourapp:1.1 .
docker stop yourapp
docker rm yourapp
docker run -d --name yourapp -p 8080:80 yourapp:1.1
八、数据持久化:生产环境必须重视
Docker 容器默认是临时的,容器删除后,容器内数据可能丢失。因此生产部署时必须重视数据持久化。
8.1 数据卷(Volume)
推荐使用 Docker Volume 保存数据库或上传文件。
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql_data:/var/lib/mysql \
mysql:8.4
8.2 绑定挂载(Bind Mount)
也可以把宿主机目录挂载进容器:
docker run -d \
--name webapp \
-p 8080:80 \
-v /data/webapp/logs:/app/logs \
yourapp:1.0
8.3 使用建议
- 数据库优先使用 Volume
- 日志和上传文件可使用 挂载目录
- 不要把重要数据只放在容器内部
九、Docker 网络配置
容器之间通信通常依赖 Docker 网络。
9.1 默认网络
同一个 Compose 项目中的服务通常可以直接通过服务名访问,比如:
mysqlredisweb
这也是为什么在 Compose 中常用服务名做 host。
9.2 自定义网络
docker network create mynet
启动容器时加入网络:
docker run -d --name app --network mynet yourapp:1.0
9.3 端口映射
外部访问容器通常要通过 -p 参数:
-p 宿主机端口:容器端口
例如:
-p 8080:80
表示访问宿主机 8080 时转发到容器 80。
十、日志、调试与排错
部署中最常见的问题就是“启动了但访问不了”“数据库连不上”“容器秒退”。这时需要学会排查。
10.1 查看容器日志
docker logs -f container_name
10.2 查看容器详细信息
docker inspect container_name
10.3 进入容器排查
docker exec -it container_name sh
10.4 常见问题
1. 端口冲突
如果启动时报错端口被占用,说明宿主机端口已被其他程序占用。换一个端口即可。
2. 容器立即退出
常见原因:
- 启动命令错误
- 应用崩溃
- 配置文件缺失
- 环境变量没传入
3. 数据库无法连接
检查:
- 服务是否启动
- host 是否写对
- 端口是否开放
- 用户名密码是否正确
- 网络是否在同一个 Docker 网络中
4. 镜像构建失败
可检查:
- Dockerfile 语法
- 基础镜像是否存在
- 依赖下载是否超时
.dockerignore是否排除了必要文件
十一、生产环境部署建议
如果你要在服务器上正式部署 Docker 项目,下面这些建议非常重要。
11.1 使用固定版本标签
不要总用 latest,建议明确版本号:
nginx:1.27
mysql:8.4
node:20-alpine
这样便于回滚和排查问题。
11.2 加入重启策略
常见选项:
--restart unless-stopped
这样服务器重启后容器会自动恢复。
11.3 限制资源
避免单个容器占满服务器资源:
docker run -d \
--memory="512m" \
--cpus="1.0" \
yourapp:1.0
11.4 使用非 root 运行
尽量避免容器内进程长期以 root 身份运行,减少安全风险。
11.5 定期清理无用资源
docker system prune
注意:这个命令会清理无用资源,执行前要确认是否会误删重要内容。
11.6 配合反向代理
生产环境通常会让 Nginx 或 Caddy 作为入口,统一处理:
- HTTPS
- 域名
- 反向代理
- 静态资源
- 负载均衡
十二、一个典型的 Docker 部署架构
一个较常见的部署方式如下:
- Nginx:对外暴露 80/443
- Web 应用容器:处理业务逻辑
- MySQL 容器:存储业务数据
- Redis 容器:缓存、会话、队列
- Volume:保存数据库和持久化文件
这种架构的好处是:
- 结构清晰
- 组件解耦
- 易于迁移
- 易于扩容
十三、Docker 与 CI/CD 的结合
到了 2026 年,Docker 已经不仅仅是“打包工具”,更是 CI/CD 流水线的重要组成部分。
典型流程如下:
- 代码提交到 Git
- CI 自动执行测试
- 构建 Docker 镜像
- 推送到镜像仓库
- 服务器拉取新镜像
- 重启容器完成发布
这样可以实现:
- 自动化部署
- 减少人工失误
- 统一发布流程
- 更容易回滚
十四、总结
Docker 的核心思想并不复杂:把应用和环境一起打包,做到一次构建,多处运行。对于开发者来说,它可以显著减少环境差异带来的问题;对于运维来说,它能提升部署效率和可维护性;对于团队协作来说,它让交付流程更标准化。
如果你刚开始学习 Docker,建议按下面顺序掌握:
- 理解镜像和容器的区别
- 学会
docker run、docker ps、docker logs等基本命令 - 掌握 Dockerfile 构建镜像
- 学会 Docker Compose 管理多服务
- 了解数据卷、网络、日志和排错
- 结合 Nginx 和 CI/CD 做生产部署
如果你愿意,我还可以继续帮你补充这篇文章的:
- SEO优化版标题和摘要
- 适合公众号/博客发布的排版版本
- 配套的 Docker 实战案例:Java、Node.js、Python、Nginx、MySQL
- 一套可直接上线的 Docker Compose 生产部署模板