温馨提示×

Debian中如何使用Docker进行应用部署

小樊
41
2025-12-12 20:50:20
栏目: 智能运维

在 Debian 上使用 Docker 部署应用的完整流程

一 安装与准备

  • 更新系统并安装依赖
    • 执行:sudo apt update && sudo apt upgrade -y
    • 安装:sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
  • 添加 Docker 官方仓库与密钥(推荐方式,适用于 Debian 12
    • 导入密钥:curl -fsSL https://download.docker.com/linux/debian/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/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 安装 Docker 引擎与 CLI
    • 执行:sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
  • 启动并设置开机自启
    • 执行:sudo systemctl start docker && sudo systemctl enable docker
  • 验证安装
    • 执行:sudo docker versionsudo docker run --rm hello-world
  • 可选 安装 Docker Compose
    • 执行:sudo apt install -y docker-compose
  • 说明
    • 某些教程使用 apt install docker.io(Debian 仓库打包版本),功能可用;若需最新特性与更新节奏,优先使用上面的官方仓库方式。

二 构建镜像与运行容器

  • 示例一 静态站点或 Nginx
    • Dockerfile
      FROM nginx:stable-alpine
      COPY . /usr/share/nginx/html
      EXPOSE 80
      CMD ["nginx","-g","daemon off;"]
      
    • 构建与运行
      • 构建:docker build -t my-nginx .
      • 运行:docker run -d --name web -p 80:80 my-nginx
  • 示例二 Python Flask
    • 目录结构
      .
      ├── app.py
      ├── requirements.txt
      └── Dockerfile
      
    • app.py
      from flask import Flask
      app = Flask(__name__)
      @app.route("/")
      def hello(): return "Hello, Docker on Debian"
      if __name__ == "__main__": app.run(host="0.0.0.0", port=5000)
      
    • requirements.txt
      Flask==2.3.*
      gunicorn==21.*
      
    • Dockerfile
      FROM python:3.11-slim
      WORKDIR /app
      COPY requirements.txt .
      RUN pip install --no-cache-dir -r requirements.txt
      COPY . .
      EXPOSE 5000
      CMD ["gunicorn","-b","0.0.0.0:5000","app:app"]
      
    • 构建与运行
      • 构建:docker build -t my-flask .
      • 运行:docker run -d --name flask -p 5000:5000 my-flask
  • 常用运行参数
    • 端口映射:-p 主机端口:容器端口
    • 环境变量:-e KEY=VALUE
    • 挂载数据卷:-v 主机路径:容器路径
    • 重启策略:--restart=always
    • 后台运行:-d

三 多容器应用与 Compose

  • 示例 docker-compose.yml(Flask + PostgreSQL)
    version: "3.8"
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        environment:
          - DATABASE_URL=postgresql://postgres:example@db:5432/appdb
        depends_on:
          - db
      db:
        image: postgres:15-alpine
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: example
          POSTGRES_DB: appdb
        volumes:
          - pgdata:/var/lib/postgresql/data
    
    volumes:
      pgdata:
    
  • 常用命令
    • 启动:docker-compose up -d
    • 查看日志:docker-compose logs -f
    • 停止:docker-compose down
    • 生产建议:使用镜像仓库管理版本,执行 docker tagdocker push 推送镜像,线上 docker-compose pull && docker-compose up -d --force-recreate 滚动更新。

四 网络与反向代理

  • 使用 Nginx 作为反向代理到容器
    • 安装 Nginx:sudo apt install -y nginx
    • 站点配置 /etc/nginx/sites-available/app.conf
      server {
        listen 80;
        server_name app.example.com;
        location / {
          proxy_pass http://127.0.0.1:5000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
        }
      }
      
    • 启用站点并热重载
      • 启用:sudo ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/
      • 校验:sudo nginx -t
      • 重载:sudo systemctl reload nginx
  • 防火墙放行
    • UFW:sudo ufw allow 80,443/tcp
  • DNS 解析
    • 添加 A 记录:将域名指向服务器 IPv4 地址,完成后可通过域名访问应用。

五 生产实践与安全建议

  • 镜像与构建
    • 使用多阶段构建轻量基础镜像(如 alpine/slim)减小体积
    • 为镜像打语义化标签(如 app:1.2.3),便于回滚与审计
  • 数据与持久化
    • 数据库等状态使用 Docker Volume 或外部存储,避免容器重建导致数据丢失
  • 配置与密钥
    • 通过 环境变量Docker Secrets 管理敏感信息,避免硬编码
  • 运行与编排
    • 设置重启策略 --restart=always,保障高可用
    • 使用 Docker Compose 管理服务依赖与网络,生产可用 docker-compose up -d 后台运行
  • 监控与日志
    • 集中收集容器日志,结合 Prometheus + Grafana 做资源与应用监控
  • 安全加固
    • 定期更新 Docker 与镜像,以修复漏洞
    • 非 root 用户运行容器内进程,最小化容器权限。

0