Ubuntu环境下容器化部署完整流程
Docker是Ubuntu系统实现容器化部署的核心工具,需优先完成安装。以下是推荐的安装步骤:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
若需简化日常使用,可将当前用户加入docker组(避免每次使用sudo):
sudo usermod -aG docker $USER
newgrp docker # 立即生效
Dockerfile是构建自定义镜像的“蓝图”,需根据应用类型编写。以下以Python Flask应用为例:
Dockerfile文件:# 使用官方Python轻量级镜像作为基础
FROM python:3.9-slim
# 设置工作目录(容器内的路径)
WORKDIR /app
# 复制项目文件至工作目录(先复制依赖文件,利用Docker层缓存提高构建效率)
COPY requirements.txt .
# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码至工作目录
COPY . .
# 暴露应用运行端口(与代码中监听端口一致)
EXPOSE 5000
# 定义容器启动时的默认命令(以非root用户运行更安全)
USER 1000
CMD ["python", "app.py"]
注:
USER 1000需替换为项目中存在的非root用户UID(可通过id -u查看),避免容器以root权限运行。
通过Dockerfile生成可复用的镜像,命令格式为:
docker build -t <镜像名称>:<标签> <Dockerfile所在目录>
示例(构建名为my-flask-app、标签为latest的镜像):
docker build -t my-flask-app:latest .
构建过程中,Docker会逐行执行Dockerfile指令,生成多层镜像结构。
将镜像转化为运行中的容器,常用命令:
docker run -d -p <主机端口>:<容器端口> --name <容器名称> <镜像名称>
示例(将主机8080端口映射至容器5000端口,容器名为flask-container):docker run -d -p 8080:5000 --name flask-container my-flask-app:latest
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器(包括已停止的)
docker logs -f <容器名称> # 实时查看日志(-f表示跟随输出)
对于包含多个服务(如Web应用+数据库+缓存)的应用,推荐使用Docker Compose通过docker-compose.yml文件统一管理。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
version: '3.8' # 指定Compose文件格式版本
services:
web:
build: . # 构建当前目录下的Dockerfile
ports:
- "8080:5000" # 映射主机端口至容器端口
environment:
- FLASK_ENV=production # 设置环境变量
volumes:
- .:/app # 持久化代码(主机目录:/容器目录)
depends_on:
- redis # 定义服务依赖(web服务启动前需先启动redis)
redis:
image: redis:alpine # 使用轻量级Redis镜像
ports:
- "6379:6379" # 暴露Redis端口
docker-compose up --build # --build表示重新构建镜像
docker-compose down
docker-compose logs -f web # 查看web服务的实时日志
docker-compose restart web # 重启web服务
docker exec -it <容器名称> /bin/bash # 进入容器内部调试
alpine、slim版本)。volumes指令挂载宿主机目录或命名卷,避免数据丢失(如数据库文件)。USER指令指定非root用户)。docker scan或第三方工具如Trivy)。docker run或docker-compose.yml设置CPU、内存限制(如--cpus="1.0"、--memory="512m"),防止容器占用过多资源。通过以上步骤,可在Ubuntu环境中完成从基础到进阶的容器化部署,满足不同规模应用的需求。