容器化部署的基础是Docker,需先在Ubuntu系统上安装Docker CE(社区版)。以下是标准安装步骤:
sudo apt updatesudo apt install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg$(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/nullsudo apt update && sudo apt install docker-ce docker-ce-cli containerd.iosudo docker run hello-worlddocker组,避免每次使用docker命令需sudo:sudo usermod -aG docker ${USER} && newgrp dockerDockerfile是容器镜像的“蓝图”,需根据应用需求编写。以下是常见场景的示例:
# 使用官方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镜像
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;"]
在包含Dockerfile的目录下,运行以下命令构建镜像(-t指定镜像名称及标签,.表示当前目录):
docker build -t your-image-name:latest .
docker build -t flask-app:latest .docker images查看本地镜像列表。通过docker run命令启动容器,将镜像转化为运行中的实例:
docker run -d -p host-port:container-port --name container-name image-name
docker run -d -p 4000:5000 --name flask-container flask-app:latestdocker run -d -p 4000:5000 -v /host/path:/container/path --name flask-container flask-app:latestdocker run -d -p 4000:5000 -e "ENV=production" --name flask-container flask-app:latest。docker ps(显示容器ID、名称、镜像、端口等信息)curl http://localhost:4000或浏览器访问http://localhost:4000docker logs -f container-name(-f表示实时跟踪日志)。对于包含多个服务(如Web+数据库+缓存)的应用,可使用docker-compose.yml文件简化部署:
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(停止并删除容器、网络)。通过持续集成/持续部署(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系统上完成从环境准备到镜像构建、容器运行的完整容器化部署流程,并通过自动化工具实现持续部署。