docker实现运行环境隔离
为什么要实现环境隔离
防止a用户更改b用户文件,防止root用户更改cuda版本导致python环境失效,实现硬件共享,软件隔离
首先安装docker,nvidia container toolkit,nvidia驱动。
安装docker
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
#添加 Docker 官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#阿里源GPG key
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#Docker官方apt 源:
echo "deb [arch=$(dpkg --print-architecture) 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
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源 sudo apt update sudo apt-get update
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#查看Docker版本
sudo docker version
#查看Docker运行状态
sudo systemctl status docker
安装nvidia container toolkit
#预先更新apt
sudo apt-get update
#配置GPG key
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
#安装nvidia-container-toolkit
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
随后在dockerhub上拉取nvidia/cuda对应的版本镜像
docker pull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 /bin/bash
分配所有gpu
docker run -it -d --gpus all --name nviu nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 /bin/bash
docker exec -it nviu /bin/bash
自定义docker镜像
但是考虑到要深度学习需要使用anaconda,我们可以手动构建一个带anaconda基础配置的镜像
1.考虑到官方源的延迟性,首要工作是换源
这里用的是22.04版本的ubuntu,文件名:sources.list, 在修改之前,建议备份原始的 sources.list 文件,以便在需要时恢复:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo vim /etc/apt/sources.list
清空文件内容后,根据你的 Ubuntu 版本,添加以下国内镜像源之一:
清华大学镜像源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse阿里云镜像源
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse中科大镜像源
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse执行以下命令以更新软件包列表并升级系统:
sudo apt update && sudo apt upgrade -y
anaconda 下载
wget -c https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh-c 中断以后继续下载
如果想构建带conda env环境的镜像还需要考虑使用RUN conda create -n torch -y python=3.9
构建dockerfile
docker build -f Dockerfile -t nvidiascf:v1 .
Dockerfile文件内容如下:
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
ADD sources.list /etc/apt/
ENV PATH /opt/conda/bin:$PATH
# Install basic dependencies
RUN apt-get update && apt-get install -y --no-install-recommends\
bzip2 \
g++ \
git \
graphviz \
libg1l1-mesa-glx \
libhdfs-dev \
openmpi-bin \
vim \
libopencv-dev \
libsnappy-dev \
python-dev \
python-pip \
build-essential \
wget && \
rm -rf /var/lib/apt/lists/*
# Install anaconda for python 3.6
ADD Anaconda3-2024.06-1-Linux-x86_64.sh /home/anaconda.sh
RUN /bin/bash /home/anaconda.sh -b -p /opt/conda && \
In -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
rm -rf /home/anaconda.sh
# Set locale
ENV LANG C.UTF-8 LC_ALL=C.UTF-8
# Initialize workspace
RUN mkdir /workspace
WORKDIR /workspace
CMD ["/bin/bash"]上述Dockerfile中的指令依次为! 1.FROM :指定基础镜像。
2.ADD:添加当前目录文件下的文件到镜像指定目录中
3.RUN :在镜像中执行命令
4.COPY :将本地文件复制到镜像中。
5.WORKDIR :设置工作目录。
6.CMD :定义启动容器后要执行的命令,
评论区