⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议
Skip to content

10.2.2 部署到底要填什么——配置要素:镜像/启动命令/端口/卷/环境变量

Docker 配置看起来复杂,其实就五个核心要素。

五大核心配置要素

1. 镜像(Image)

镜像是容器的"安装包",包含了运行应用所需的一切:代码、运行时、库、配置文件。

镜像命名规则

[仓库地址/]镜像名[:标签]
示例说明
node:18Docker Hub 官方 Node.js 18
node:18-alpine轻量版,体积更小
postgres:15PostgreSQL 15
my-app:v1.0.0自定义应用指定版本

镜像选择建议

场景推荐镜像理由
Node.js 应用node:18-alpine体积小(~120MB vs ~1GB)
Python 应用python:3.11-slim精简版,够用
生产数据库postgres:15稳定版本

2. 端口映射(Port Mapping)

端口映射让外部能够访问容器内的服务。

格式说明

宿主机端口:容器端口
配置含义
3000:3000用 3000 访问容器的 3000 端口
8080:3000用 8080 访问容器的 3000 端口
127.0.0.1:3000:3000只允许本机访问

常见端口规划

服务容器端口建议宿主机端口
Next.js30003000
NestJS30013001
PostgreSQL54325432
Redis63796379
Nginx80/44380/443

端口冲突

同一宿主机端口只能被一个容器占用。如果端口已被占用,需要修改映射端口。

3. 卷挂载(Volume Mount)

容器删除后,里面的数据默认会丢失。卷挂载将数据保存到宿主机。

格式说明

宿主机路径:容器路径[:权限]
配置含义
/data/postgres:/var/lib/postgresql/data数据库文件持久化
/app/logs:/app/logs日志文件持久化
/config:/app/config:ro只读挂载配置文件

必须挂载的数据

服务容器路径数据类型
PostgreSQL/var/lib/postgresql/data数据库文件
MySQL/var/lib/mysql数据库文件
Redis/data持久化数据
应用/app/uploads用户上传文件
应用/app/logs日志文件

4. 环境变量(Environment Variables)

环境变量是传递配置给应用的标准方式,比硬编码更安全、更灵活。

常用环境变量

变量名作用示例值
NODE_ENV运行环境production
DATABASE_URL数据库连接串postgresql://user:pass@host:5432/db
REDIS_URLRedis 连接串redis://localhost:6379
JWT_SECRETJWT 密钥your-secret-key
PORT应用监听端口3000

环境变量安全实践

安全警告

绝对不要在代码仓库中提交真实的数据库密码、API 密钥等敏感信息!

5. 启动命令(Command)

启动命令决定容器启动后执行什么操作。

常见启动命令

应用类型启动命令
Next.js 生产npm run startnode server.js
NestJS 生产node dist/main.js
开发调试npm run dev(不推荐生产使用)

Dockerfile 中的 CMD vs ENTRYPOINT

指令特点
CMD可被运行时命令覆盖
ENTRYPOINT固定执行,运行时参数追加

完整配置示例

以 Next.js 应用为例:

yaml
# docker-compose.yml 等效配置
services:
  nextjs:
    image: node:18-alpine
    container_name: my-nextjs-app
    ports:
      - "3000:3000"
    volumes:
      - ./app:/app
      - /app/node_modules  # 排除 node_modules
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:pass@postgres:5432/mydb
    command: npm run start
    restart: always

对应 1Panel 配置:

配置项
镜像node:18-alpine
容器名my-nextjs-app
端口3000:3000
挂载./app:/app
环境变量NODE_ENV=production
命令npm run start
重启策略always

配置验证清单

部署前检查:

  • [ ] 镜像版本是否正确
  • [ ] 端口是否冲突
  • [ ] 数据目录是否挂载
  • [ ] 敏感信息是否使用环境变量
  • [ ] 重启策略是否设置为 always