Docker Desktop 部署新项目详细步骤

Docker Desktop 部署新项目详细步骤

我将详细介绍使用 Docker Desktop 部署一个新项目的完整流程,以 Node.js 应用为例。

一、前期准备

1.1 环境检查

bash 复制代码
# 检查 Docker 版本
docker --version
docker-compose --version

# 启动 Docker Desktop
# 确保 Docker Desktop 处于运行状态

1.2 项目结构准备

复制代码
my-app/
├── src/
│   └── app.js
├── package.json
├── Dockerfile
├── docker-compose.yml
├── .dockerignore
└── README.md

二、创建 Docker 配置文件

2.1 编写 Dockerfile

dockerfile 复制代码
# 使用官方 Node.js 镜像作为基础镜像
FROM node:18-alpine AS builder

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm ci --only=production

# 第二阶段:创建生产镜像
FROM node:18-alpine

WORKDIR /app

# 从构建阶段复制 node_modules
COPY --from=builder /app/node_modules ./node_modules

# 复制应用程序代码
COPY src ./src
COPY package.json ./

# 设置非root用户(安全最佳实践)
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001

USER nodejs

# 暴露端口
EXPOSE 3000

# 定义环境变量
ENV NODE_ENV=production

# 启动命令
CMD ["node", "src/app.js"]

2.2 创建 .dockerignore 文件

gitignore 复制代码
node_modules
npm-debug.log
Dockerfile*
docker-compose*
.env
.git
.gitignore
README.md
.vscode
*.md

2.3 创建 docker-compose.yml(可选,用于多容器部署)

yaml 复制代码
version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://user:password@db:5432/mydb
    depends_on:
      - db
    volumes:
      - ./logs:/app/logs
    restart: unless-stopped
    networks:
      - app-network

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - app-network
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app
    networks:
      - app-network

volumes:
  postgres_data:

networks:
  app-network:
    driver: bridge

三、构建和运行容器

3.1 构建 Docker 镜像

bash 复制代码
# 进入项目目录
cd my-app

# 构建镜像(-t 指定标签名)
docker build -t my-app:latest .

# 查看构建的镜像
docker images

# 如果有构建缓存问题,使用 --no-cache
docker build --no-cache -t my-app:latest .

3.2 运行容器

bash 复制代码
# 简单运行
docker run -d -p 3000:3000 --name my-app-container my-app:latest

# 带环境变量运行
docker run -d \
  -p 3000:3000 \
  --name my-app-container \
  -e NODE_ENV=production \
  -e DATABASE_URL=postgres://user:password@localhost:5432/mydb \
  my-app:latest

# 挂载卷运行(用于开发)
docker run -d \
  -p 3000:3000 \
  --name my-app-dev \
  -v $(pwd)/src:/app/src \
  -v /app/node_modules \
  my-app:latest

3.3 使用 Docker Compose(推荐)

bash 复制代码
# 启动所有服务
docker-compose up -d

# 查看运行状态
docker-compose ps

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

# 停止服务
docker-compose down

# 停止并删除卷
docker-compose down -v

四、使用 Docker Desktop GUI 管理

4.1 镜像管理

  1. 打开 Docker Desktop
  2. 点击左侧 Images 标签
  3. 可以看到所有本地镜像
  4. 点击 "Run" 按钮可以图形化配置容器

4.2 容器管理

  1. 点击 Containers 标签
  2. 查看运行中的容器
  3. 可以启动/停止/重启/删除容器
  4. 点击容器名称进入详情页
  5. 查看日志、进入终端、检查配置

4.3 使用 Volumes 标签管理数据卷

  1. 查看所有数据卷
  2. 可以创建、删除数据卷
  3. 检查数据卷使用情况

五、开发工作流

5.1 开发环境热重载配置

yaml 复制代码
# docker-compose.dev.yml
version: '3.8'

services:
  app:
    build:
      context: .
      target: builder  # 使用Dockerfile的多阶段构建
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    volumes:
      - ./src:/app/src
      - /app/node_modules
    command: npm run dev
    stdin_open: true
    tty: true

5.2 启动开发环境

bash 复制代码
# 使用开发配置
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

# 进入容器进行调试
docker-compose exec app sh

六、调试和故障排除

6.1 常用调试命令

bash 复制代码
# 查看容器日志
docker logs my-app-container
docker logs -f my-app-container  # 实时日志

# 进入容器内部
docker exec -it my-app-container sh

# 检查容器状态
docker ps
docker ps -a  # 查看所有容器(包括停止的)

# 查看容器资源使用
docker stats

# 查看容器详细信息
docker inspect my-app-container

6.2 常见问题解决

端口被占用
bash 复制代码
# 查看端口使用情况
netstat -an | grep 3000

# 或使用 Docker Desktop 修改端口映射
# 停止容器 -> 修改 docker-compose.yml -> 重新启动
镜像构建缓存问题
bash 复制代码
# 清除构建缓存
docker builder prune

# 强制重新构建
docker-compose build --no-cache
权限问题
dockerfile 复制代码
# 在 Dockerfile 中正确处理权限
RUN chown -R nodejs:nodejs /app
USER nodejs

七、生产部署最佳实践

7.1 多阶段构建优化

dockerfile 复制代码
# 第一阶段:构建
FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 第二阶段:生产运行
FROM node:18-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
COPY package.json .
EXPOSE 3000
CMD ["node", "dist/main.js"]

7.2 使用 .env 文件管理环境变量

bash 复制代码
# .env 文件
NODE_ENV=production
DATABASE_URL=postgres://user:password@db:5432/production_db
REDIS_URL=redis://redis:6379
yaml 复制代码
# docker-compose.yml 中引用
services:
  app:
    env_file:
      - .env

7.3 健康检查配置

dockerfile 复制代码
# 在 Dockerfile 中添加
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1
yaml 复制代码
# 或在 docker-compose.yml 中添加
services:
  app:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

八、清理和维护

bash 复制代码
# 停止并删除所有容器
docker-compose down

# 删除未使用的镜像
docker image prune

# 删除未使用的卷
docker volume prune

# 删除所有未使用的 Docker 对象
docker system prune -a

总结

使用 Docker Desktop 部署新项目的关键步骤:

  1. 环境准备:安装 Docker Desktop,验证安装
  2. 项目配置:创建 Dockerfile、.dockerignore、docker-compose.yml
  3. 镜像构建 :使用 docker build 构建应用镜像
  4. 容器运行 :使用 docker rundocker-compose up 启动
  5. GUI 管理:通过 Docker Desktop 可视化界面管理
  6. 开发调试:配置热重载,使用日志和终端调试
  7. 生产优化:实施多阶段构建、健康检查等最佳实践

Docker Desktop 提供了完整的一体化体验,使得容器化应用的开发、部署和管理变得更加简单高效。

相关推荐
PH = 72 小时前
解决Docker Hub无法访问的问题二
运维·docker·容器
两点王爷2 小时前
Ubuntu 机器安装解压软件和ip工具
linux·运维·ubuntu
在深圳搬砖2 小时前
使用Qemu安装Ubuntu教程
linux·运维·ubuntu
IT大师兄吖2 小时前
Qwen3 ASR 流式转写 Docker 懒人整合包
docker·容器·eureka
FORCECON12 小时前
力控SCADA城市轨道交通综合监控系统,综合调度,智慧运维,全景一体化监控,保障安全高效运营
运维·监控·scada·报警·轨道交通·供电·综合调度
源图客2 小时前
Linux系统部署Postgres数据库(ubuntu22.04)
linux·运维·数据库
齐齐大魔王2 小时前
linux-进程通信
linux·运维·服务器
明月夜&2 小时前
Ubuntu 20.04 Docker 部署 Ollama + DeepSeek-Coder:本地 AI 编程助手实战
git·vscode·ubuntu·docker·大语言模型·智能体
Fanfanaas3 小时前
Linux 系统编程 进程篇 (二)
linux·运维·服务器·c语言·开发语言·学习