技术杂烩·
· 发布于 2026-01-22 18:07:37
Docker 部署全流程硬核教程:从环境搭建到多容器编排
一、 核心概念速览
在动手之前,请记住这三个核心概念:
Dockerfile:镜像的“配方”,定义了你的应用环境。
Image(镜像):封装好的“软件包”,包含运行应用所需的一切。
Container(容器):镜像运行时的实例,相互隔离。
Docker Compose:同时管理多个容器(如 Web 服务 + 数据库)的工具。
二、 环境安装 (以 Linux 服务器为例)
如果你使用的是宝塔面板,可以直接在软件商店安装“Docker管理器”。如果是原生 Linux,建议使用官方脚本:
# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 自动安装脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 3. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker三、 实战:部署一个 Node.js (TypeScript) + Redis 项目
假设你的项目目录结构如下:
my-app/
├── src/
├── package.json
├── Dockerfile # 你的镜像构建文件
└── docker-compose.yml # 你的容器编排文件- 编写 Dockerfile
在项目根目录创建 Dockerfile。针对 TS 项目,我们通常采用多阶段构建以缩小镜像体积:
# 第一阶段:构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build # 编译 TS 为 JS
# 第二阶段:运行阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm install --production
EXPOSE 3000
CMD ["node", "dist/index.js"]
- 编写 docker-compose.yml
这是最关键的一步,它能让你一键启动 Web 服务和数据库。
version: '3.8'
services:
app:
build: .
ports:
- "8080:3000" # 将服务器 8080 端口映射到容器 3000
environment:
- NODE_ENV=production
- REDIS_HOST=redis_db
depends_on:
- redis_db
redis_db:
image: redis:7-alpine
restart: always
volumes:
- ./redis_data:/data # 数据持久化
四、 部署与运维常用命令
进入项目目录后,执行以下命令:
操作,命令,说明
一键启动,docker-compose up -d,后台运行所有服务
查看日志,docker-compose logs -f app,实时查看 Web 服务的报错日志
停止并删除,docker-compose down,停止运行并移除容器
重新构建,docker-compose up -d --build,最常用:修改代码后重新部署
查看状态,docker ps -a,查看所有容器的运行状态
进入容器,docker exec -it [容器ID] sh,进入容器内部排查问题(如查看文件)
五、 进阶:如何保障论坛/网站的安全性?
数据挂载(Volumes):永远不要把数据库数据放在容器内部,必须挂载到宿主机,防止容器删除后数据丢失。
环境变量:不要在 Dockerfile 里写死 API Key 或数据库密码,应通过 .env 文件配合 docker-compose 注入。
资源限制:在 compose 文件中限制内存(例如 mem_limit: 512m),防止某个容器内存泄漏导致服务器宕机。
暂无回复
