如何将Docker部署至指定服务器并实现快速迁移?
解决方案:基于Docker的一键部署与迁移方案
核心工具选型
1. Ansible + Docker Compose
这是最贴合需求的组合,完全满足单命令部署/迁移、配置文件驱动的要求:
- Ansible:负责远程服务器的Docker环境初始化、服务部署与迁移,支持通过YAML配置文件定义所有操作逻辑
- Docker Compose:将所有服务(grabber、网站、Zabbix等)的容器编排规则集中写在
docker-compose.yml中,统一管理服务依赖、端口映射、数据卷挂载等配置
具体实现步骤
1. 配置文件准备
创建三个核心配置文件,全部提交到Git仓库进行版本管理:
inventory.yml:定义目标服务器的连接信息target_servers: hosts: prod-server-01: ansible_host: 10.0.0.10 ansible_port: 22 ansible_user: ops ansible_become: yes prod-server-02: ansible_host: 10.0.0.11 ansible_port: 22 ansible_user: ops ansible_become: yesdeploy.yml:Ansible Playbook,定义完整的部署流程- name: 批量部署Docker服务集群 hosts: target_servers tasks: - name: 安装Docker基础依赖(Debian/Ubuntu) apt: name: [apt-transport-https, ca-certificates, curl, software-properties-common] state: present update_cache: yes - name: 添加Docker官方GPG密钥 apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: 注册Docker软件源 apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable state: present - name: 安装Docker与Docker Compose apt: name: [docker-ce, docker-compose] state: present - name: 启动Docker服务并设置开机自启 service: name: docker state: started enabled: yes - name: 创建服务部署目录 file: path: /opt/docker-services state: directory mode: '0755' - name: 同步Docker Compose配置到目标服务器 copy: src: ./docker-compose.yml dest: /opt/docker-services/docker-compose.yml - name: 启动所有服务容器 command: docker-compose up -d args: chdir: /opt/docker-servicesdocker-compose.yml:定义所有业务服务的容器配置version: '3.8' services: zabbix-server: image: zabbix/zabbix-server-mysql:latest ports: - "10051:10051" volumes: - zabbix-server-data:/var/lib/zabbix environment: DB_SERVER_HOST: zabbix-db MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix123 depends_on: - zabbix-db zabbix-db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix123 volumes: - zabbix-db-data:/var/lib/mysql grabber-service: image: your-custom-grabber:v1.0 volumes: - grabber-log:/var/log/grabber - ./grabber-config:/app/config web-service: image: your-web-app:v2.1 ports: - "80:80" - "443:443" volumes: - web-static:/app/static volumes: zabbix-server-data: zabbix-db-data: grabber-log: web-static:
2. 一键部署命令
本地安装Ansible后,执行以下命令即可完成批量部署:
ansible-playbook -i inventory.yml deploy.yml
3. 快速迁移到新服务器
- 在
inventory.yml中添加新服务器的连接信息 - 再次执行上述部署命令,Ansible会自动在新服务器完成Docker环境初始化、服务启动
- 数据卷迁移(可选):
- 原服务器打包数据卷:
docker run --rm -v zabbix-db-data:/data -v $(pwd):/backup busybox tar cvzf /backup/zabbix-db-backup.tar.gz /data - 传输备份包到新服务器:
scp zabbix-db-backup.tar.gz ops@new-server-ip:/opt/docker-services/ - 新服务器恢复数据卷:
docker run --rm -v zabbix-db-data:/data -v $(pwd):/backup busybox tar xvzf /backup/zabbix-db-backup.tar.gz -C /data --strip-components=1
- 原服务器打包数据卷:
替代方案:Docker Swarm集群管理
如果需要多服务器集群的高可用能力,可采用Docker Swarm:
- 初始化Swarm管理节点:
docker swarm init - 将新服务器加入集群:
docker swarm join --token <集群令牌> <管理节点IP>:2377 - 一键部署服务栈:
docker stack deploy -c docker-compose.yml service-stack - 迁移时只需将新节点加入集群,重新执行部署命令即可同步服务
关键优势
- 所有配置文件均纳入Git版本管理,支持按需编辑、追溯变更
- 单命令完成跨服务器部署/迁移,完全符合“一键或数键”的操作需求
- 标准化部署流程,避免手动操作的环境差异与失误
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

