Debian Docker自动化如何配置
导读:Debian Docker自动化配置 一 目标与总体思路 在 Debian 上把 Docker 的安装、配置、服务自启与容器自启做成可重复、可无人值守的流程,覆盖三类场景: 本机一键安装与初始化;2 多机批量编排(配置管理工具);3 ...
Debian Docker自动化配置
一 目标与总体思路
- 在 Debian 上把 Docker 的安装、配置、服务自启与容器自启做成可重复、可无人值守的流程,覆盖三类场景:
- 本机一键安装与初始化;2) 多机批量编排(配置管理工具);3) 代码变更触发的 CI/CD 自动构建与部署。
- 关键关注点:安装源与 GPG、服务自启、容器重启策略、可选镜像加速、非 root 使用与权限、可重复脚本化与幂等性。
二 本机一键安装与初始化脚本
- 使用官方仓库安装(推荐,便于后续升级与维护),脚本具备幂等检查与基础验证:
#!/usr/bin/env bash
set -Eeuo pipefail
# 0) 参数与常量
: "${
DOCKER_GPG_URL:=https://download.docker.com/linux/debian/gpg}
"
: "${
DOCKER_REPO:=https://download.docker.com/linux/debian}
"
: "${
DOCKER_PKG:=docker-ce docker-ce-cli containerd.io}
"
: "${
DOCKER_GROUP:=docker}
"
# 1) 仅 root 执行
if [ "$(id -u)" -ne 0 ];
then
echo "请使用 root 或 sudo 执行此脚本。" >
&
2
exit 1
fi
# 2) 安装依赖
apt-get update -qq
apt-get install -y --no-install-recommends \
apt-transport-https ca-certificates curl gnupg lsb-release
# 3) 添加 Docker GPG 与 APT 源(幂等)
if [ ! -f /usr/share/keyrings/docker.gpg ];
then
curl -fsSL "$DOCKER_GPG_URL" | gpg --dearmor -o /usr/share/keyrings/docker.gpg
fi
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] $DOCKER_REPO $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list >
/dev/null
# 4) 安装 Docker
apt-get update -qq
apt-get install -y --no-install-recommends $DOCKER_PKG
# 5) 开机自启
systemctl enable --now docker
# 6) 可选:配置镜像加速(按需取消注释)
# mkdir -p /etc/docker
# cat >
/etc/docker/daemon.json <
<
'EOF'
# {
# "registry-mirrors": ["https://<
你的加速器地址>
"]
# }
# EOF
# systemctl restart docker
# 7) 验证
docker version
docker run --rm hello-world
# 8) 可选:将当前用户加入 docker 组(重新登录后生效)
# if ! getent group "$DOCKER_GROUP" >
/dev/null;
then
# groupadd -r "$DOCKER_GROUP"
# fi
# usermod -aG "$DOCKER_GROUP" "$(logname)"
- 使用方式:保存为 install_docker.sh,执行 chmod +x install_docker.sh & & ./install_docker.sh。上述流程等价于官方安装步骤:更新索引、安装依赖、导入 GPG、添加仓库、安装 docker-ce、启动并验证 hello-world。
三 批量自动化与配置管理
- 使用 Ansible 做多机一致化部署(示例 playbook 片段,具备幂等与可复用性):
---
- name: Install and configure Docker on Debian
hosts: docker_hosts
become: yes
vars:
docker_pkgs:
- docker-ce
- docker-ce-cli
- containerd.io
docker_gpg: https://download.docker.com/linux/debian/gpg
docker_repo: https://download.docker.com/linux/debian
tasks:
- name: Install prerequisites
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
state: present
update_cache: yes
- name: Add Docker GPG key
ansible.builtin.apt_key:
url: "{
{
docker_gpg }
}
"
state: present
keyring: /usr/share/keyrings/docker.gpg
- name: Add Docker APT repository
ansible.builtin.apt_repository:
repo: "deb [arch={
{
ansible_architecture }
}
signed-by=/usr/share/keyrings/docker.gpg] {
{
docker_repo }
}
{
{
ansible_distribution_release }
}
stable"
state: present
filename: docker
- name: Install Docker packages
apt:
name: "{
{
docker_pkgs }
}
"
state: present
update_cache: yes
- name: Enable and start Docker service
ansible.builtin.systemd:
name: docker
enabled: yes
state: started
- name: Add user to docker group
ansible.builtin.user:
name: "{
{
ansible_user }
}
"
groups: docker
append: yes
- 适用场景:大规模主机初始化、统一配置(如 /etc/docker/daemon.json)、滚动升级与回滚。上述思路与步骤与官方安装流程一致,适合用 Ansible 编排落地。
四 容器自启动与常用自动化场景
- 容器随系统启动:使用 Docker 的 重启策略,例如 always/on-failure/unless-stopped。示例:
docker rm -f mynginx 2>
/dev/null || true
docker run -d --name mynginx --restart always -p 80:80 nginx:latest
docker ps -a --filter name=mynginx
- 说明:–restart 策略可确保容器在 崩溃 或 系统重启 后自动拉起,是实现“开机即服务可用”的关键配置。
五 CI/CD 自动构建与部署示例
- 使用 GitHub Actions 在代码变更时自动构建镜像并部署到 Debian 主机(需提前配置 SSH 免密或 Runner):
name: Build and Deploy Docker
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${
{
secrets.DOCKERHUB_USER }
}
password: ${
{
secrets.DOCKERHUB_TOKEN }
}
- name: Build and push
run: |
docker build -t ${
{
secrets.DOCKERHUB_USER }
}
/myapp:${
{
github.sha }
}
.
docker push ${
{
secrets.DOCKERHUB_USER }
}
/myapp:${
{
github.sha }
}
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${
{
secrets.HOST }
}
username: ${
{
secrets.USER }
}
key: ${
{
secrets.SSH_KEY }
}
script: |
docker pull ${
{
secrets.DOCKERHUB_USER }
}
/myapp:${
{
github.sha }
}
docker rm -f myapp 2>
/dev/null || true
docker run -d --name myapp --restart always -p 80:80 \
${
{
secrets.DOCKERHUB_USER }
}
/myapp:${
{
github.sha }
}
- 说明:该流程覆盖从 拉取代码 → 构建镜像 → 推送仓库 → 远程部署 的完整链路,适合生产级交付;也可替换为 Jenkins/GitLab CI 等工具实现同样效果。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian Docker自动化如何配置
本文地址: https://pptw.com/jishu/787375.html
