浅试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 RUN pip install
COPY ./app /app
CMD ["python3", "main.py"]
|
例如,在python中通过minio:9000
,在本机中可以通过http://localhost:9001/
访问。
docker快速构建
- 下载docker desktop,对于分盘的windows电脑,建议迁移一下docker位置
- 换源,我这里修改配置文件为:
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" ] }
|
-
构建镜像:docker compose build
-
启动容器服务:docker compose up -d
没有下载过dockert-compose中的容器的会先下载
-
查看服务状态:docker ps
-a

-
进入python容器:docker exec -it labsecurity_app bash
-
测试一下cuda环境是否可用,运行脚本:
1 2 3
| import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))
|
- 结束所有服务:
docker-compose stop
开始所有服务:docker-compose start
- 我在docker-compose里面挂载了:
容器能看到本机的 ./app
目录,点击vscode左下方的><,选择Attach to Running Container,进入python容器,就可以愉快的开发了