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 提供了完整的一体化体验,使得容器化应用的开发、部署和管理变得更加简单高效。

相关推荐
量子炒饭大师12 小时前
【Linux系统编程:进程概念】——【从 冯诺依曼系统体系结构 到 操作系统】
linux·运维·服务器·操作系统·冯诺依曼
00后程序媛13 小时前
ubuntu安装qemu和xv6
linux·运维·ubuntu
阿狸猿13 小时前
论系统负载均衡设计方法
运维·负载均衡
ZzzZZzzzZZZzzzz…13 小时前
Docker + K8s集群搭建实战:1 Master+2 Node,含Harbor私有仓库与软路由
docker·云原生·容器·kubernetes·容器编排·集群部署·cri-dockerd
minji...14 小时前
Linux 高级IO(四)多路转接之epoll,epoll 模型及原理
linux·运维·服务器·多路转接·epoll·epoll模型·红黑树/就绪队列/回调
bitbrowser14 小时前
2026年Facebook广告账户频频“连坐”被封?聊聊出海投流
运维·服务器·facebook
汽车仪器仪表相关领域14 小时前
Kvaser Hybrid CAN/LIN 单通道三合一总线分析仪:高性价比CAN FD/LIN集成测试利器
运维·服务器·网络·数据挖掘·数据分析·单元测试·集成测试
志栋智能14 小时前
超自动化安全:实现安全运营现代化的关键
大数据·运维·网络·安全·自动化
xier_ran14 小时前
【infra之路】模块三:Kubernetes (下) — 阶段一毕业项目:在集群里跑 PyTorch 训练
pytorch·容器·kubernetes
zzipeng14 小时前
Linux 并发与竞争
java·linux·运维