DOCKER配置之DOCKERFILE

要跑深度学习,就要有环境,要有环境就要有虚拟环境管理

一般python管理都会用ANACONDA或者MINICONDA,这个时候使用conda就直接结了,不需要再关心其他事情。

然而部分数据集Ubuntu18.04的环境实在是过于逆天(不是针对某个数据集或代码,只能说大部分数据集和代码都在18.04以及python3.8的远古环境上),所以最后还是只能用docker来进行配置

目前接触到的docker构建镜像的方法包括两类:

1、sudo docker pull:从网上直接拉取镜像,这样拉取到的镜像存放在本地,可以认为是打包成了文件存了起来。

2、sudo docker build:从本地的DOCKERFILE文件直接构建镜像。基本相当于本地直接运行终端指令来给镜像粗布配置一个环境。

下面是一个配置Matterport3DSimulator数据集的例子:

复制代码
# Matterport3DSimulator
# Requires nvidia gpu with driver 396.37 or higher
 

FROM nvidia/cudagl:9.2-devel-ubuntu18.04
 
# Install cudnn
ENV CUDNN_VERSION 7.6.4.38
LABEL com.nvidia.cudnn.version="${CUDNN_VERSION}"

# 切换源
RUN sed -i "s@/archive.ubuntu.com/@/mirrors.ustc.edu.cn/@g" /etc/apt/sources.list \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean \
    && apt-get update --fix-missing -o Acquire::http::No-Cache=True

RUN apt-get install -y --no-install-recommends \
    libcudnn7=$CUDNN_VERSION-1+cuda9.2 \
libcudnn7-dev=$CUDNN_VERSION-1+cuda9.2 \
&& \
    apt-mark hold libcudnn7 && \
    rm -rf /var/lib/apt/lists/*
 

# Install a few libraries to support both EGL and OSMESA options
ENV DEBIAN_FRONTEND=noninteractive

# 切换源
RUN sed -i "s@/archive.ubuntu.com/@/mirrors.ustc.edu.cn/@g" /etc/apt/sources.list \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean \
    && apt-get update --fix-missing -o Acquire::http::No-Cache=True

RUN apt-get install -y wget doxygen curl libjsoncpp-dev libepoxy-dev libglm-dev libosmesa6 libosmesa6-dev libglew-dev libopencv-dev python-opencv python3-setuptools python3-dev python3-pip
RUN pip3 install -i https://pypi.mirrors.ustc.edu.cn/simple opencv-python==4.1.0.25 torch==1.1.0 torchvision==0.3.0 numpy==1.13.3 pandas==0.24.1 networkx==2.2
 
#install latest cmake
ADD https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.sh /cmake-3.12.2-Linux-x86_64.sh
RUN mkdir /opt/cmake
RUN sh /cmake-3.12.2-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
RUN cmake --version

ENV PYTHONPATH=/root/mount/Matterport3DSimulator/build:$PYTHONPATH
复制代码

可以看到整个镜像的配置流程大概是选取一个基底,安装依赖,最后配置环境变量。

 

其中的一些基础的操作说明如下:

1、RUN:执行拉取系统镜像本身的终端指令,是最通用的一种指令。

2、ADD:将网上的文件下载到本地,前为链接后为下载名。

3、ENV:环境变量设置。这里是设置的PYTHON库的变量所在位置。环境变量像这样最后在后方加一个$PYTHONPATH就是把以前有的环境变量也以列表的形式加进来。

 

先用这些指令,Dockerfile大概就可以派上用场了

 

更为完整的指令集如下:

 

Dockerfile 指令说明
FROM 指定基础镜像,用于后续的指令构建。
MAINTAINER 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL 添加镜像的元数据,使用键值对的形式。
RUN 在构建过程中在镜像中执行命令。
CMD 指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT 设置容器创建时的主要命令。(不可被覆盖)
EXPOSE 声明容器运行时监听的特定网络端口。
ENV 在容器内部设置环境变量。
ADD 将文件、目录或远程URL复制到镜像中。
COPY 将文件或目录复制到镜像中。
VOLUME 为容器创建挂载点或声明卷。
WORKDIR 设置后续指令的工作目录。
USER 指定后续指令的用户上下文。
ARG 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD 当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL 设置发送给容器以退出的系统调用信号。
HEALTHCHECK 定义周期性检查容器健康状态的命令。
SHELL 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

 

 

哦,另外最后如果要运行的话,请使用这一句命令:

nvidia-docker run -it --mount type=bind,source=$MATTERPORT_DATA_DIR,target=/root/mount/Matterport3DSimulator/data/v1/scans --volume `pwd`:/root/mount/Matterport3DSimulator mattersim:9.2-devel-ubuntu18.04

其中--mount作用是挂载本地目录到虚拟机目录,也就是创建了一个映射。

挂载一个主机目录作为数据卷(--mount type=bind,source=,target=)source是数据集源目录,target是虚拟机文件目录。

pwd则是设置进入镜像的初始位置。

这样一个matterpord3d数据集的docker就配好了

不用nvidia-docker run 也可以

 docker run --runtime=nvidia -it --mount type=bind,source=$MATTERPORT_DATA_DIR,target=/root/mount/Matterport3DSimulator/data/v1/scans --volume `pwd`:/root/mount/Matterport3DSimulator mattersim:9.2-devel-ubuntu18.04

另外这次nvidia-docker跑不起来但是docker可以直接跑,初步判断是由于nvidia版本过高,不能适配ubuntu18.04的原因。

posted @   Thaudmin  阅读(220)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示