温馨提示×

Debian系统中如何实现容器化部署

小樊
35
2025-12-06 21:55:55
栏目: 智能运维

在 Debian 上实施容器化部署的实用指南

一 环境准备与 Docker 安装

  • 更新系统并安装依赖:sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
  • 导入 Docker 官方 GPG 密钥:curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • 添加 APT 源(使用已导入密钥的签名方式):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 > /devref
  • 安装引擎与容器运行时:sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
  • 启动并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
  • 验证:sudo docker run --rm hello-world(首次运行会拉取镜像并输出欢迎信息)

二 构建镜像与 Docker Compose

  • 示例 Dockerfile(基于 Debian Slim,适合生产):
    FROM debian:bookworm-slim
    ENV DEBIAN_FRONTEND=noninteractive
    RUN apt-get update && apt-get install -y --no-install-recommends \
        ca-certificates curl build-essential && \
        rm -rf /var/lib/apt/lists/*
    WORKDIR /app
    COPY . .
    # 示例构建步骤(可按需替换)
    # RUN make && make install
    CMD ["./your-app"]
    
  • 构建与运行:
    • 构建:docker build -t my-debian-app:latest .
    • 运行:docker run -d -p 8080:8080 --name app my-debian-app:latest
  • 使用 Docker Compose(多服务编排,示例含 Nginx + 应用):
    version: "3.8"
    services:
      web:
        build: .
        ports:
          - "8080:8080"
        environment:
          - ENV=prod
      db:
        image: postgres:15-alpine
        environment:
          POSTGRES_PASSWORD: example
        volumes:
          - pg-data:/var/lib/postgresql/data
    volumes:
      pg-data:
    
    • 启动:docker compose up -d(或 docker-compose up -d,取决于安装方式)

三 生产级配置与运维要点

  • 守护进程推荐配置(/etc/docker/daemon.json):
    {
      "storage-driver": "overlay2",
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    
    修改后执行:sudo systemctl daemon-reload && sudo systemctl restart docker
  • 常用运维命令:
    • 查看容器:docker ps -a
    • 查看日志:docker logs -f <容器名或ID>
    • 进入容器:docker exec -it <容器名或ID> /bin/bash
    • 停止/删除:docker stop <容器>;docker rm <容器>;docker rmi <镜像>
  • 安全与最佳实践:
    • 以非 root 用户运行容器内进程(Dockerfile 中用 USER 指令或运行时指定用户)
    • 最小镜像原则(优先使用 -slim 变体,清理缓存与临时文件)
    • 镜像与引擎定期更新;使用可信基础镜像与镜像签名
    • 通过防火墙限制暴露端口,仅开放必要服务

四 自动化交付与扩展

  • CI/CD 方案示例:
    • GitLab CI(.gitlab-ci.yml 片段):
      stages:
        - build
        - test
        - deploy
      build:
        stage: build
        script:
          - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
      test:
        stage: test
        script:
          - docker run --rm $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA /bin/sh -c "your-test-cmd"
      deploy:
        stage: deploy
        script:
          - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
          - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
          # 在目标主机执行滚动更新或拉取并重启
      
    • Jenkins:安装 JenkinsDocker 插件,在 Pipeline 中执行构建、测试、推送与远程部署步骤(如通过 SSH 在目标 Debian 主机上拉取并重启容器)
  • 扩展方向:
    • 编排与集群:在 Debian 主机上部署 Kubernetes(kubelet/kubeadm/kubectl),将应用打包为镜像后通过 Deployment/Service 管理,实现自动扩缩与滚动升级

0