0%

浅试docker:为 AI 项目构建高可维护的开发环境

浅试docker:为 AI 项目构建高可维护的开发环境

我的需求是一个带cuda驱动的python容器,redis容器、psql容器、minio容器,因此,我指定docker-compose和dockerfile,他们之间的区别如下表:

方面 Dockerfile Docker Compose
核心作用 定义单个镜像的构建过程,描述从基础镜像开始,安装软件、拷贝文件、配置环境等步骤,生成自定义镜像。 定义多个容器的编排和运行,指定哪些镜像或 Dockerfile 要启动,容器之间如何连接、挂载卷、端口映射等。
工作方式 通过 docker build 从 Dockerfile 构建镜像。 通过 docker-compose up 根据配置启动一个或多个容器。
是否拉取镜像 可以基于已有镜像(FROM xxx),也可以从头开始构建。 可以使用已有镜像(image: xxx)或基于 Dockerfile 构建镜像(build: xxx)。
功能范围 只负责镜像构建(静态),镜像里包含运行环境和文件。 负责多容器应用的启动与管理(动态),包括网络、依赖关系、环境变量等。
示例 写一个 Python 镜像,安装依赖,拷贝代码。 启动数据库、缓存、Python 服务容器,并让它们协同工作。

编写Docker-compose:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
version: '3.8'

services:
app:
build: .
runtime: nvidia
container_name: labsecurity_app
depends_on:
- redis
- postgres
- minio
volumes:
- ./app:/app
working_dir: /app
ports:
- "8888:8888"
command: ["tail", "-f", "/dev/null"]

redis:
image: redis:7
container_name: labsecurity_redis
ports:
- "6379:6379"
restart: always

minio:
image: minio/minio
container_name: labsecurity_minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
restart: always

postgres:
image: postgres:17
container_name: labsecurity_postgres
environment:
POSTGRES_DB: labdb
POSTGRES_USER: labuser
POSTGRES_PASSWORD: labpass
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
restart: always

volumes:
pgdata:
minio_data:

编写Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM nvidia/cuda:12.8.0-cudnn-runtime-ubuntu22.04

RUN apt-get update && apt-get install -y python3 python3-pip

WORKDIR /app

COPY requirements.txt .

RUN pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu126
RUN pip install --no-cache-dir -r requirements.txt

COPY ./app /app

CMD ["python3", "main.py"]

例如,在python中通过minio:9000,在本机中可以通过http://localhost:9001/访问。

docker快速构建

  1. 下载docker desktop,对于分盘的windows电脑,建议迁移一下docker位置
  2. 换源,我这里修改配置文件为:
1
2
3
4
5
6
7
8
9
10
11
12
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.xuanyuan.me"
]
}
  1. 构建镜像:docker compose build

  2. 启动容器服务:docker compose up -d 没有下载过dockert-compose中的容器的会先下载

  3. 查看服务状态:docker ps -a

  4. 进入python容器:docker exec -it labsecurity_app bash

  5. 测试一下cuda环境是否可用,运行脚本:

1
2
3
import torch
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0))
  1. 结束所有服务: docker-compose stop 开始所有服务:docker-compose start
  2. 我在docker-compose里面挂载了:
1
2
volumes:
- ./app:/app

容器能看到本机的 ./app 目录,点击vscode左下方的><,选择Attach to Running Container,进入python容器,就可以愉快的开发了