dockerfile文档编写(1):基础命令
目录
- Modelscope-agent
- ARG
- FROM
- WORKDIR
- COPY
- RUN
- ENV
- CMD
- run_loopy
Modelscope-agent
ARG BASE_IMAGE=registry.cn-beijing.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.1.2-tf2.14.0-1.12.0
FROM $BASE_IMAGE
WORKDIR /home/workspace
COPY . /home/workspace/
RUN pip install -r requirements.txt
RUN pip install -r apps/agentfabric/requirements.txt
ENV PYTHONPATH="${PYTHONPATH}:/home/workspace"
CMD ["python", "apps/agentfabric/app.py"]
ARG
- ARG 指令,用于定义构建 Docker 镜像时可以使用的变量.
这个参数设置了一个基础镜像地址,指向阿里云(registry.cn-beijing.aliyuncs.com)的 ModelScope 仓库
这个基础镜像包含了以下主要组件:
Ubuntu 22.04 操作系统
CUDA 12.1.0(用于 GPU 支持)
Python 3.10
PyTorch 2.1.2
TensorFlow 2.14.0
ModelScope 1.12.0
FROM
- FROM 指令指定了构建新镜像所基于的基础镜像
WORKDIR
- 设置容器内的默认工作目录为 /home/workspace
如果该目录不存在,Docker 会自动创建它
这条指令之后的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令都会以这个目录为基准执行
类似于在容器中执行 cd /home/workspace
这是一个常见的做法,可以让容器内的文件操作更加清晰和可控,而不是都堆积在根目录下。
COPY
- 简单来说,这条命令会把构建 Docker 镜像时的上下文(通常是项目根目录)中的所有内容,复制到容器内的 /home/workspace/ 目录中。
RUN
- 这是一个在Docker构建过程中非常常见的步骤,用于确保容器中安装了应用程序所需的所有Python依赖包。requirements.txt文件通常包含了项目所需的所有Python包及其版本号。
且要注意不同目录下的requirements,都需要run
ENV
- ENV 是 Dockerfile 的指令,用于设置环境变量
PYTHONPATH 是 Python 用来查找模块和包的路径
${PYTHONPATH} 保留了原有的 PYTHONPATH 值
:/home/workspace 将 /home/workspace 目录添加到 Python 的模块搜索路径中
CMD
这是 Dockerfile 中的 CMD 指令,用于指定容器启动时要执行的默认命令
run_loopy
# 使用支持GPU的基础镜像
FROM python:3.8
# ARG BASE_IMAGE=registry.cn-beijing.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.1.2-tf2.14.0-1.12.0
# FROM $BASE_IMAGE
# 设置工作目录
WORKDIR /home/workspace
# 将当前目录下的所有文件复制到容器中的/home/workspace目录下
COPY . /home/workspace/
# 配置pip使用多个镜像源
RUN pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/simple
COPY ./wheels /home/workspace/wheels
RUN pip install /home/workspace/wheels/tf_estimator_nightly-2.8.0.dev2021122109-py2.py3-none-any.whl
RUN pip install --upgrade pip
RUN pip install -r requirements1.txt
# 设置Python路径
ENV PYTHONPATH="${PYTHONPATH}:/home/workspace"
# 运行脚本
CMD ["python", "run_loop.py"]
使用说明:
-
将此Dockerfile放在项目根目录下
-
构建镜像:
docker build -t drl_tcv .
- 运行容器:
docker run drl_tcv
build完之后,run运行跑起来了
觉得这种构建环境镜像的方式,一方面不会改动本地的环境,另一方面比sftp传输快好多,因为文件特别大,中途要是断了还得重下,下载的话可以用镜像源其实还是挺快的。
大文件的传输中断很浪费时间