Skip to content

Docker 部署入门

🎯 Docker 是什么?

一句话理解

Docker 就是一个「打包神器」

它可以把你的代码 + 运行环境(Node.js、Java、数据库…)打包成一个「箱子」(容器),这个箱子在任何电脑上都能一模一样地运行。

🤔 为什么需要 Docker?

以前的痛点Docker 怎么解决
"在我电脑能跑,你电脑不行"打包成容器,在哪都一样
安装环境要半天一条命令搞定
几个项目依赖冲突容器相互隔离,互不干扰
部署步骤一大堆一条命令启动所有服务

🎬 类比理解

想象你做了一道菜想分享给朋友:

  • 以前:给他菜谱,让他自己买菜、调配料、掌握火候... 结果味道可能完全不一样
  • Docker:直接把做好的菜真空包装寄过去,他只需要加热就能吃到一模一样的味道

📋 第一步:安装 Docker

Docker 已安装
Docker Compose 已安装(通常随 Docker 一起安装)

检查是否安装

bash
        $
        docker --version
      
bash
        $
        docker compose version
      

如果显示版本号,说明已安装。如果没安装,参考下面链接:

Windows 用户注意

安装 Docker Desktop 后,需要重启电脑。确保 WSL2 已启用。

🚀 快速体验

运行一个现成的容器

来,运行一个 Nginx 服务器试试:

bash
        $
        docker run -d -p 8080:80 nginx
      

然后打开 http://localhost:8080,你会看到 Nginx 的欢迎页面!

发生了什么?

  1. Docker 从网上下载了 Nginx 镜像
  2. 创建了一个容器并在后台运行
  3. 把容器的 80 端口映射到你电脑的 8080 端口

停止并删除它:

bash
        $
        docker stop $(docker ps -q) && docker rm $(docker ps -aq)
      

📦 核心概念(只需要理解三个)

概念通俗理解例子
镜像 (Image)安装包/模板node:20postgres:15
容器 (Container)运行中的程序你启动的那个 Nginx
Compose批量管理工具一次启动前端+后端+数据库

📁 生成的 Docker 文件

我们生成的项目已经包含了 Docker 配置:

project/
├── backend/
│   └── Dockerfile          # 后端打包配置
├── frontend/
│   └── Dockerfile          # 前端打包配置
└── docker-compose.yml      # 一键启动配置

🎮 一键启动项目

进入项目目录,运行:

bash
        $
        docker compose up -d
      

就这一条命令,前端、后端、数据库全部启动了!

启动成功后
  • 前端:http://localhost:80
  • 后端:http://localhost:3000
  • 数据库:自动在容器内运行

其他常用命令

我想...命令
看服务运行状态docker compose ps
看日志docker compose logs -f
停止所有服务docker compose down
重新构建docker compose up -d --build

📄 docker-compose.yml 解读

这是一个典型的配置,每一行我都加了注释

yaml
services:
  # 后端服务
  backend:
    build: ./backend          # 用 backend 目录下的 Dockerfile 构建
    ports:
      - "3000:3000"           # 把容器的 3000 端口映射到本机的 3000
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/app
    depends_on:
      - db                    # 等数据库启动后再启动后端

  # 前端服务  
  frontend:
    build: ./frontend
    ports:
      - "80:80"               # 映射到 80 端口

  # 数据库
  db:
    image: postgres:15        # 使用官方 PostgreSQL 镜像
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: app
    volumes:
      - pgdata:/var/lib/postgresql/data  # 数据持久化

volumes:
  pgdata:                     # 定义一个数据卷,防止数据丢失

☁️ 部署到云服务器

步骤概览

1. 买一台云服务器(阿里云/腾讯云,几十元/月起)

2. SSH 连接服务器

3. 安装 Docker

4. 把代码上传到服务器

5. 运行 docker compose up -d

6. 配置域名(可选)

7. 完成!

服务器安装 Docker

SSH 连接到服务器后,运行:

bash
        $
        curl -fsSL https://get.docker.com | sh
      
bash
        $
        sudo systemctl start docker
      

上传代码

方式一:用 Git

bash
        $
        git clone https://github.com/你的用户名/你的项目.git
      

方式二:用 scp 上传

bash
        $
        scp -r ./你的项目 root@你的服务器IP:/home/app
      

启动服务

bash
        $
        cd /home/app && docker compose up -d --build
      

❓ 常见问题

构建失败/很慢

国内访问 Docker Hub 可能很慢,配置镜像加速:

bash
# 创建配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF

# 重启 Docker
sudo systemctl restart docker

端口被占用

修改 docker-compose.yml 中的端口:

yaml
ports:
  - "3001:3000"   # 改成 3001

容器内连接数据库

容器里访问其他容器,用服务名而不是 localhost:

yaml
# ✅ 正确
DATABASE_URL=postgresql://postgres:password@db:5432/app

# ❌ 错误
DATABASE_URL=postgresql://postgres:password@localhost:5432/app

查看日志排错

bash
        $
        docker compose logs backend --tail 100
      

进入容器调试

bash
        $
        docker compose exec backend sh
      

💡 小贴士

最佳实践
  1. 敏感信息用 .env 文件:密码、密钥不要写在 docker-compose.yml 里
  2. 数据要持久化:用 volumes,否则容器删了数据就没了
  3. 定期备份数据库docker compose exec db pg_dump ...
  4. 用多阶段构建:镜像更小,启动更快

📚 学习资源

⏭️ 下一步

Released under the MIT License.