温馨提示×

ubuntu怎样触发容器化部署

小樊
47
2025-10-07 12:21:15
栏目: 智能运维

在Ubuntu上触发容器化部署的完整流程

1. 安装Docker引擎

容器化部署的基础是Docker,需先在Ubuntu系统上安装Docker CE(社区版)。以下是标准安装步骤:

  • 更新软件包索引:sudo apt update
  • 安装依赖项:sudo apt install apt-transport-https ca-certificates curl software-properties-common
  • 添加Docker官方GPG密钥(确保软件源可信):
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • 添加Docker软件源(替换$(lsb_release -cs)为Ubuntu版本代号,如focal):
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 再次更新软件包索引并安装Docker:
    sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io
  • 验证安装(运行测试容器):sudo docker run hello-world
  • (可选)将当前用户加入docker组,避免每次使用docker命令需sudo
    sudo usermod -aG docker ${USER} && newgrp docker

2. 创建Dockerfile定义镜像

Dockerfile是容器镜像的“蓝图”,需根据应用需求编写。以下是常见场景的示例:

  • Python Flask应用
    # 使用官方Python基础镜像( slim版本更轻量)
    FROM python:3.9-slim
    # 设置工作目录(容器内的路径)
    WORKDIR /app
    # 复制当前目录下的所有文件到容器的工作目录
    COPY . /app
    # 安装Python依赖(requirements.txt需提前创建)
    RUN pip install --no-cache-dir -r requirements.txt
    # 暴露应用端口(容器内端口)
    EXPOSE 5000
    # 定义容器启动时执行的命令
    CMD ["python", "app.py"]
    
  • Ubuntu基础应用(如Nginx):
    # 使用官方Ubuntu镜像
    FROM ubuntu:latest
    # 更新软件源并安装应用(如nginx)
    RUN apt-get update && apt-get install -y nginx && rm -rf /var/lib/apt/lists/*
    # 复制自定义配置文件(可选)
    COPY nginx.conf /etc/nginx/nginx.conf
    # 暴露端口
    EXPOSE 80
    # 启动nginx
    CMD ["nginx", "-g", "daemon off;"]
    

3. 构建Docker镜像

在包含Dockerfile的目录下,运行以下命令构建镜像(-t指定镜像名称及标签,.表示当前目录):
docker build -t your-image-name:latest .

  • 示例(构建Python Flask应用镜像):docker build -t flask-app:latest .
  • 构建完成后,可通过docker images查看本地镜像列表。

4. 运行容器化部署

通过docker run命令启动容器,将镜像转化为运行中的实例:

  • 基本命令(后台运行、端口映射、命名容器):
    docker run -d -p host-port:container-port --name container-name image-name
    • 示例(运行Flask应用,将容器5000端口映射到宿主机4000端口):
      docker run -d -p 4000:5000 --name flask-container flask-app:latest
  • 挂载数据卷(持久化数据,如数据库文件):
    docker run -d -p 4000:5000 -v /host/path:/container/path --name flask-container flask-app:latest
  • 设置环境变量(如应用配置):
    docker run -d -p 4000:5000 -e "ENV=production" --name flask-container flask-app:latest

5. 验证部署

  • 查看运行中的容器:docker ps(显示容器ID、名称、镜像、端口等信息)
  • 访问应用:若应用运行在容器内的5000端口且映射到宿主机4000端口,可通过curl http://localhost:4000或浏览器访问http://localhost:4000
  • 查看容器日志(排查问题):docker logs -f container-name-f表示实时跟踪日志)。

6. 可选:使用Docker Compose管理多容器应用

对于包含多个服务(如Web+数据库+缓存)的应用,可使用docker-compose.yml文件简化部署:

  • 编写docker-compose.yml(示例:Nginx+Redis):
    version: '3.8'
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
        volumes:
          - ./nginx.conf:/etc/nginx/nginx.conf
      redis:
        image: redis:latest
        ports:
          - "6379:6379"
    
  • 启动服务docker-compose up -d-d表示后台运行,--build表示重新构建镜像)
  • 停止服务docker-compose down(停止并删除容器、网络)。

7. 自动化触发(CI/CD集成)

通过持续集成/持续部署(CI/CD)工具(如Jenkins、GitHub Actions、GitLab CI)实现代码提交后自动触发容器化部署。以下是GitHub Actions的简单示例:

  • 在项目根目录创建.github/workflows/deploy.yml文件:
    name: Deploy to Ubuntu
    on:
      push:
        branches:
          - main  # 当main分支有推送时触发
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v4
          - name: Login to Docker Hub
            uses: docker/login-action@v3
            with:
              username: ${{ secrets.DOCKER_HUB_USERNAME }}
              password: ${{ secrets.DOCKER_HUB_TOKEN }}
          - name: Build and push image
            run: |
              docker build -t your-dockerhub-username/app-name:${{ github.sha }} .
              docker push your-dockerhub-username/app-name:${{ github.sha }}
          - name: Trigger Ubuntu server deployment
            run: |
              ssh user@your-ubuntu-server "cd /path/to/app && docker pull your-dockerhub-username/app-name:${{ github.sha }} && docker-compose up -d"
    
  • 此配置会在代码推送到main分支时,自动构建镜像、推送到Docker Hub,并通过SSH触发Ubuntu服务器上的容器更新。

通过以上步骤,可在Ubuntu系统上完成从环境准备到镜像构建、容器运行的完整容器化部署流程,并通过自动化工具实现持续部署。

0