1. 准备Debian环境
在开始自动化部署前,需确保Debian系统为最新状态,以避免依赖冲突。执行以下命令更新系统:
sudo apt update && sudo apt upgrade -y
这是后续安装Docker及自动化工具的基础。
2. 安装Docker CE(社区版)
Docker是容器化部署的核心,需先通过官方源安装:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
bookworm)的稳定仓库。sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
安装完成后,通过docker run hello-world验证Docker是否正常运行。
3. 编写Shell自动化部署脚本
Shell脚本可实现基础的Docker容器自动化管理(如拉取镜像、启动容器、检查状态)。以下是一个示例脚本(deploy_docker.sh):
#!/bin/bash
# 定义容器与镜像名称
CONTAINER_NAME="my_nginx"
IMAGE_NAME="nginx:latest"
PORT="80"
# 检查容器是否已运行,若未运行则启动
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "Container ${CONTAINER_NAME} not found. Starting new container..."
docker run -d --name ${CONTAINER_NAME} -p ${PORT}:80 ${IMAGE_NAME}
echo "Container ${CONTAINER_NAME} started successfully."
else
echo "Container ${CONTAINER_NAME} is already running."
fi
deploy_docker.sh,赋予执行权限(chmod +x deploy_docker.sh),运行即可自动部署Nginx容器。4. 结合CI/CD工具实现全流程自动化
CI/CD工具(如GitHub Actions、GitLab CI/CD)可将代码提交、构建、测试、部署串联成自动化流水线,适用于团队协作或生产环境。
.github/workflows目录下新建deploy-docker.yml,定义触发条件(如push到main分支)及步骤:name: Deploy Docker to Debian Server
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. 拉取代码
- name: Checkout code
uses: actions/checkout@v4
# 2. 登录Docker Hub(替换为你的用户名/令牌)
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# 3. 构建并推送镜像
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: your-dockerhub-username/your-image:latest
# 4. 部署到Debian服务器(通过SSH执行远程脚本)
- name: Deploy to Debian server
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} 'bash -s' < ./deploy_on_server.sh
deploy_on_server.sh,用于在Debian服务器上拉取最新镜像并重启容器:#!/bin/bash
CONTAINER_NAME="my_nginx"
IMAGE_NAME="your-dockerhub-username/your-image:latest"
# 拉取最新镜像
docker pull ${IMAGE_NAME}
# 重启容器(若容器存在则停止后重新启动)
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
docker stop ${CONTAINER_NAME} && docker rm ${CONTAINER_NAME}
fi
docker run -d --name ${CONTAINER_NAME} -p 80:80 ${IMAGE_NAME}
Settings > Secrets中添加DOCKERHUB_USERNAME、DOCKERHUB_TOKEN(Docker Hub个人访问令牌)、SERVER_USER(Debian服务器用户名)、SERVER_HOST(服务器IP/域名)。Ansible是无代理的配置管理工具,可通过Playbook自动化Docker安装与部署:
sudo apt update && sudo apt install -y ansible
inventory.ini,指定Debian服务器的IP地址:[debian_servers]
your_server_ip ansible_user=your_username ansible_ssh_private_key_file=~/.ssh/id_rsa
docker_deploy.yml,定义Docker安装与容器部署任务:- hosts: debian_servers
become: yes
tasks:
# 1. 安装Docker依赖
- name: Install required packages
apt:
name: "{{ item }}"
state: present
update_cache: yes
loop:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
# 2. 添加Docker GPG密钥
- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/debian/gpg
state: present
# 3. 添加Docker APT源
- name: Add Docker APT repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
state: present
# 4. 安装Docker CE
- name: Install Docker CE
apt:
name: "{{ item }}"
state: present
update_cache: yes
loop:
- docker-ce
- docker-ce-cli
- containerd.io
# 5. 启动Docker服务
- name: Start Docker service
service:
name: docker
state: started
enabled: yes
# 6. 部署Docker容器
- name: Deploy Docker container
docker_container:
name: my_nginx
image: nginx:latest
ports:
- "80:80"
state: started
recreate: yes
ansible-playbook -i inventory.ini docker_deploy.yml
Ansible的优势在于无需在目标服务器上安装额外代理,通过SSH即可完成管理,适合大规模服务器集群。
注意事项
docker logs命令或日志工具(如ELK)监控容器运行状态,及时排查问题。