上一篇 下一篇 分享链接 返回 返回顶部

Docker 部署教程 2026 实战版:从镜像构建到 Compose 编排,一篇讲透项目上线

发布人:慈云数据-客服中心 发布时间:8小时前 阅读量:1

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 对应容器 80
  • nginx: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 项目中的服务通常可以直接通过服务名访问,比如:

  • mysql
  • redis
  • web

这也是为什么在 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 流水线的重要组成部分。

典型流程如下:

  1. 代码提交到 Git
  2. CI 自动执行测试
  3. 构建 Docker 镜像
  4. 推送到镜像仓库
  5. 服务器拉取新镜像
  6. 重启容器完成发布

这样可以实现:

  • 自动化部署
  • 减少人工失误
  • 统一发布流程
  • 更容易回滚

十四、总结

Docker 的核心思想并不复杂:把应用和环境一起打包,做到一次构建,多处运行。对于开发者来说,它可以显著减少环境差异带来的问题;对于运维来说,它能提升部署效率和可维护性;对于团队协作来说,它让交付流程更标准化。

如果你刚开始学习 Docker,建议按下面顺序掌握:

  1. 理解镜像和容器的区别
  2. 学会 docker rundocker psdocker logs 等基本命令
  3. 掌握 Dockerfile 构建镜像
  4. 学会 Docker Compose 管理多服务
  5. 了解数据卷、网络、日志和排错
  6. 结合 Nginx 和 CI/CD 做生产部署

如果你愿意,我还可以继续帮你补充这篇文章的:

  • SEO优化版标题和摘要
  • 适合公众号/博客发布的排版版本
  • 配套的 Docker 实战案例:Java、Node.js、Python、Nginx、MySQL
  • 一套可直接上线的 Docker Compose 生产部署模板
目录结构
全文