docker配置入门知识

1. ${NODE_ENV:-production} 语法解释

这是Docker Compose的环境变量替换语法:

  • ${NODE_ENV:-production} 表示:如果环境变量 NODE_ENV 存在且不为空,则使用 NODE_ENV 的值;否则使用默认值 production
  • :- 是默认值操作符
  • 等价于:NODE_ENV=${NODE_ENV:-production}

示例:

bash 复制代码
# 如果 .env 文件中有 NODE_ENV=development
# 则实际值为 development

# 如果 .env 文件中没有 NODE_ENV 或为空
# 则使用默认值 production

2. Docker服务重启和更新

Docker不会自动监听文件变化,需要手动重启:

修改docker-compose.yaml后:

bash 复制代码
# 停止所有服务
docker-compose down

# 重新构建并启动
docker-compose up --build -d

# 或者只重启特定服务
docker-compose restart app

修改Dockerfile后:

bash 复制代码
# 强制重新构建镜像
docker-compose build --no-cache app

# 然后启动
docker-compose up -d

修改应用代码后(如果使用卷挂载):

bash 复制代码
# 代码修改会自动同步到容器,但需要重启应用进程
docker-compose restart app

# 或者进入容器手动重启
docker-compose exec app pnpm run start:dev

3. restart: unless-stopped 含义

这是Docker容器的重启策略:

策略 说明
no 不自动重启(默认)
always 总是重启,无论退出状态如何
on-failure 只在非零退出状态时重启
unless-stopped 总是重启,除非手动停止

unless-stopped 的优势:

  • 容器异常退出时自动重启
  • 系统重启后自动启动容器
  • 手动停止后不会自动重启(避免干扰调试)

4. 完整的重启流程示例

bash 复制代码
# 1. 停止所有服务
docker-compose down

# 2. 查看当前状态
docker-compose ps

# 3. 重新构建并启动
docker-compose up --build -d

# 4. 查看日志
docker-compose logs -f app

# 5. 检查服务状态
docker-compose ps

5. 开发环境建议

对于开发环境,建议使用卷挂载来避免频繁重建:

yaml 复制代码
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app                    # 代码同步
      - /app/node_modules         # 避免覆盖依赖
    command: pnpm run start:dev   # 开发模式,支持热重载

这样代码修改后,只需要重启应用进程,不需要重新构建镜像。

相关推荐
YIAN2 小时前
Docker + Nginx 核心原理扫盲:从环境隔离到反向代理,运维面试必考点
后端·docker·面试
IT大白鼠4 小时前
Docker 实战 ELKF 日志监控:容器日志全栈收集分析方案
运维·docker·容器
小张同学a.16 小时前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
NJCloud17 小时前
Docker 容器技术入门:部署、核心概念与基础命令
运维·docker·容器
2601_9620723317 小时前
docker自建rustdesk-server远程桌面
运维·docker·容器
pnoker18 小时前
从零部署 IoT DC3:四步快速启动实录
物联网·docker·部署
虎王物联18 小时前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux
缘友一世21 小时前
GLM-5.3-NVFP4 部署实战系列[二]Docker 镜像选择与补丁镜像构建:纯 Python overlay,不重编一行 CUDA
python·docker·容器·vllm
数字化小张1 天前
Docker镜像优化——从1GB到100MB的瘦身实践
docker
java_logo1 天前
Docker 部署 MinIO:轻松搭建 S3 兼容对象存储平台
运维·docker·容器·对象存储·minio·轩辕镜像·minio部署