sudo-iのBlog

  • 🍟首页
  • 🍊目录
    • 技术分享
    • vps教程
    • 软件分享
    • 干货分享
  • 🍎链接
  • 🍓工具
    • 🌽IP路由追踪
    • 域名被墙检测
    • KMS激活
    • 域名whois查询
  • 🍕联系
  • 🍌登录
Sudo-i
关注互联网,生活,音乐,乐此不疲
  1. 首页
  2. 干货分享
  3. 正文

Docker容器化部署实战:从入门到生产环境

22 2 月, 2026 25点热度 0人点赞 0条评论

Docker容器化部署实战:从入门到生产环境

在现代软件开发和运维中,Docker已经成为不可或缺的工具。本文将带你从Docker基础概念出发,逐步掌握容器化部署的实战技巧,最终实现生产环境的稳定部署。

一、Docker核心概念解析

1.1 什么是Docker容器

Docker容器是一种轻量级的虚拟化技术,它将应用程序及其依赖项打包到一个标准化的单元中。与传统的虚拟机相比,容器具有以下优势:

  • 轻量级:容器共享主机操作系统内核,启动速度快,资源占用少
  • 可移植性:一次构建,随处运行,消除"在我机器上能跑"的问题
  • 隔离性:每个容器拥有独立的文件系统、网络空间和进程空间
  • 可扩展性:可以快速创建和销毁容器实例,便于水平扩展

1.2 镜像与容器的关系

理解镜像和容器的关系是掌握Docker的关键:

  • 镜像(Image):只读的模板,包含运行应用程序所需的代码、库、环境变量和配置文件
  • 容器(Container):镜像的运行实例,可以被创建、启动、停止、删除

可以将镜像理解为"类",容器则是"实例"。一个镜像可以创建多个容器。

二、Docker环境搭建

2.1 安装Docker(Ubuntu系统)

# 更新包索引
sudo apt-get update

# 安装必要的依赖包
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 验证安装
docker --version
docker run hello-world

2.2 配置Docker权限

为了避免每次使用docker命令都需要sudo,可以将当前用户添加到docker组:

# 创建docker组(如果不存在)
sudo groupadd docker

# 将当前用户添加到docker组
sudo usermod -aG docker $USER

# 使组变更生效(需要重新登录或执行以下命令)
newgrp docker

# 验证无需sudo即可运行docker
docker run hello-world

三、Dockerfile编写实战

3.1 Dockerfile基础指令

Dockerfile是构建Docker镜像的蓝图,以下是常用指令:

指令 说明
FROM 指定基础镜像
RUN 执行命令并创建新层
COPY 复制文件到镜像
WORKDIR 设置工作目录
EXPOSE 声明容器运行时监听的端口
CMD 容器启动时执行的默认命令
ENTRYPOINT 配置容器启动时执行的可执行文件

3.2 Node.js应用Dockerfile示例

# 使用官方Node.js镜像作为基础
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

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

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

# 复制应用源代码
COPY . .

# 暴露应用端口
EXPOSE 3000

# 设置环境变量
ENV NODE_ENV=production

# 启动应用
CMD ["node", "server.js"]

3.3 Python应用Dockerfile示例

# 使用Python官方镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动应用
CMD ["python", "app.py"]

四、Docker Compose多容器编排

4.1 Docker Compose简介

Docker Compose是用于定义和运行多容器Docker应用程序的工具。通过一个YAML文件来配置应用程序的服务,然后使用一个命令创建并启动所有服务。

4.2 完整的Web应用编排示例

以下是一个包含Web应用、数据库和Redis缓存的完整docker-compose.yml配置:

version: '3.8'

services:
  # Web应用服务
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis
    networks:
      - app-network
    restart: unless-stopped
    volumes:
      - ./logs:/app/logs

  # PostgreSQL数据库
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - app-network
    restart: unless-stopped

  # Redis缓存
  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    networks:
      - app-network
    restart: unless-stopped

  # Nginx反向代理
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - web
    networks:
      - app-network
    restart: unless-stopped

networks:
  app-network:
    driver: bridge

volumes:
  postgres-data:
  redis-data:

4.3 Docker Compose常用命令

# 启动所有服务(后台运行)
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 重启某个服务
docker-compose restart web

# 停止所有服务
docker-compose down

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

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

五、生产环境部署最佳实践

5.1 镜像优化技巧

生产环境的镜像应该尽可能小且安全:

# 使用多阶段构建减小镜像大小
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 生产阶段使用更小的基础镜像
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY package.json .
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "dist/server.js"]

5.2 安全配置

  • 使用非root用户运行容器:
# 创建非root用户
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001
USER nodejs
  • 扫描镜像漏洞:
# 使用Docker Scout扫描
docker scout cve myapp:latest

# 或使用Trivy
trivy image myapp:latest

5.3 日志管理

配置Docker日志驱动和轮转策略:

# daemon.json配置
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

5.4 健康检查配置

# 在Dockerfile中添加健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1

六、CI/CD集成示例

6.1 GitHub Actions自动构建部署

name: Docker Build and Deploy

on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: myuser/myapp:latest,myuser/myapp:${{ github.sha }}
          cache-from: type=registry,ref=myuser/myapp:buildcache
          cache-to: type=registry,ref=myuser/myapp:buildcache,mode=max

      - name: Deploy to server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /opt/myapp
            docker-compose pull
            docker-compose up -d
            docker system prune -f

七、常见问题排查

7.1 容器无法启动

# 查看容器日志
docker logs 

# 进入容器调试
docker exec -it  /bin/sh

# 查看容器详细信息
docker inspect 

7.2 端口冲突

# 查看端口占用
netstat -tlnp | grep :3000

# 修改docker-compose中的端口映射
ports:
  - "3001:3000"  # 主机3001映射到容器3000

7.3 磁盘空间不足

# 查看Docker磁盘使用
docker system df

# 清理未使用的资源
docker system prune -a

# 删除悬空镜像
docker image prune

八、总结

Docker容器化部署是现代DevOps实践的核心技能。通过本文的学习,你应该掌握了:

  1. Docker的核心概念和工作原理
  2. Dockerfile的编写和优化技巧
  3. 使用Docker Compose编排多容器应用
  4. 生产环境的安全配置和最佳实践
  5. CI/CD集成和自动化部署
  6. 常见问题排查方法

容器化技术正在快速发展,建议持续关注Docker官方文档和社区动态,不断学习和实践。记住,最好的学习方式就是动手实践——从今天开始,将你的下一个项目容器化吧!

延伸阅读:

  • Docker官方文档:https://docs.docker.com/
  • Kubernetes入门指南
  • 容器安全最佳实践

无关联文章

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:22 2 月, 2026

李炫炫

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2025 sudo-iのBlog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2024054662号

鲁公网安备37108102000450号