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 镜像管理
- 打开 Docker Desktop
- 点击左侧 Images 标签
- 可以看到所有本地镜像
- 点击 "Run" 按钮可以图形化配置容器
4.2 容器管理
- 点击 Containers 标签
- 查看运行中的容器
- 可以启动/停止/重启/删除容器
- 点击容器名称进入详情页
- 查看日志、进入终端、检查配置
4.3 使用 Volumes 标签管理数据卷
- 查看所有数据卷
- 可以创建、删除数据卷
- 检查数据卷使用情况
五、开发工作流
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 部署新项目的关键步骤:
- 环境准备:安装 Docker Desktop,验证安装
- 项目配置:创建 Dockerfile、.dockerignore、docker-compose.yml
- 镜像构建 :使用
docker build构建应用镜像 - 容器运行 :使用
docker run或docker-compose up启动 - GUI 管理:通过 Docker Desktop 可视化界面管理
- 开发调试:配置热重载,使用日志和终端调试
- 生产优化:实施多阶段构建、健康检查等最佳实践
Docker Desktop 提供了完整的一体化体验,使得容器化应用的开发、部署和管理变得更加简单高效。