Ubuntu Docker自动化部署常见方法
Shell脚本是最基础的自动化方式,通过编写脚本自动完成Docker镜像构建、容器启停、旧资源清理等操作。
步骤:
deploy.sh),包含镜像存在性检查、镜像构建、容器启停逻辑。示例如下:#!/bin/bash
IMAGE_NAME="your-image-name"
CONTAINER_NAME="your-container-name"
if ! docker image inspect $IMAGE_NAME &> /dev/null; then
echo "Building Docker image..."
docker build -t $IMAGE_NAME .
fi
if ! docker ps -a | grep $CONTAINER_NAME &> /dev/null; then
echo "Starting Docker container..."
docker run -d --name $CONTAINER_NAME $IMAGE_NAME
else
echo "Docker container is already running."
fi
echo "Deployment completed."
chmod +x deploy.sh。./deploy.sh。Docker Compose通过docker-compose.yml文件定义多容器服务的配置(如网络、卷、端口映射),实现一键启动、停止、重启多容器应用。
步骤:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose.yml文件:定义服务、镜像、端口等配置。示例如下:version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./app:/usr/share/nginx/html
docker-compose up -d(后台运行);停止服务:docker-compose down。Ansible是基于SSH的自动化运维工具,通过Playbook定义部署流程,实现远程Ubuntu服务器上的Docker安装、配置及应用部署。
步骤:
sudo apt install ansible -y。inventory):定义目标服务器(托管节点)。示例如下:[docker]
ubuntu ansible_ssh_host=192.168.1.100
deploy.yml):定义Docker安装、服务启动等任务。示例如下:---
- name: Deploy Docker on Ubuntu
hosts: docker
become: yes
tasks:
- name: Install Docker
apt:
name: docker.io
state: present
- name: Start Docker service
systemd:
name: docker
state: started
enabled: yes
ansible-playbook -i inventory deploy.yml。CI/CD工具(如Jenkins、GitLab CI/CD、GitHub Actions)可实现代码提交、构建、测试、部署的全流程自动化,适用于DevOps场景。
以GitHub Actions为例:
.github/workflows/deploy.yml文件:定义部署流程。示例如下:name: Docker Deployment
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build and push image
run: |
docker build -t your-dockerhub-username/your-image-name:${{ github.sha }} .
docker push your-dockerhub-username/your-image-name:${{ github.sha }}
- name: Deploy to Ubuntu server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
docker pull your-dockerhub-username/your-image-name:${{ github.sha }}
docker stop your-container-name || true
docker rm your-container-name || true
docker run -d --name your-container-name -p 80:80 your-dockerhub-username/your-image-name:${{ github.sha }}
优势:实现代码变更自动触发部署,减少人工干预,提高交付效率。
第三方工具提供了可视化界面和更多高级功能(如项目管理、日志监控、定时任务),适合中小团队快速搭建自动化部署平台。
sudo docker run -d --restart=always --name=spug -p 80:80 -v /spug:/data registry.aliyuncs.com/openspug/spug。sudo docker exec spug init_spug admin spug.dev,访问http://IP:80登录。docker pull jpom/jpom。docker run -p 2122:2122 --name jpom-server jpom/jpom。