目录

  • 一. Ubuntu系统中安装Docker
  • 二. Docker中配置Ubuntu18.04镜像
  • 安装版本查看
  • Step 1: 登录Docker
  • Step 2: 拉取Ubuntu18.04镜像
  • Step 3: 查看已有镜像
  • Step 4: 在容器中运行带有`GPU`组件的`Ubuntu18.04`镜像并设置容器名称(名称以`transformers`为例)
  • Step 5: 配置容器
  • 5.1 安装Python3.8.12
  • 5.2 导出原环境python库
  • 5.3 将`requirements.txt`文件移入`transformers`容器中
  • 5.4 在`transformers`容器中使用`pip`指令安装依赖包
  • 5.5 上传容器至`Docker Hub`
  • 5.5.1 为了不变动原容器,使用`export`指令导出原容器
  • 5.5.2 将导出的容器快照导入作为新镜像
  • 5.5.3 镜像规范化命名(用户名/镜像名)
  • 5.5.4 上传至`Docker Hub`
  • 5.5.5 [登录 Docker Hub 官网](https://hub.docker.com/)验证上传成功
  • 5.6 镜像介绍
  • 补充:容器常用指令


一. Ubuntu系统中安装Docker

官网安装Docker

适用于

  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Impish 21.10
  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)

二. Docker中配置Ubuntu18.04镜像

安装版本查看

docker --version

显示 docker 安装版本为20.10.18

Step 1: 登录Docker

sudo docker login

docker laqu ubuntu docker拉取ubuntu18.04_ubuntu

Step 2: 拉取Ubuntu18.04镜像

sudo docker pull ubuntu:18.04

docker laqu ubuntu docker拉取ubuntu18.04_容器_02

Step 3: 查看已有镜像

sudo docker images

docker laqu ubuntu docker拉取ubuntu18.04_ubuntu_03


发现ubuntu镜像已经出现在目录中

注:如果安装错误版本可以使用下面指令强制删除镜像

sudo docker rmi -f image-id

image-id表示镜像的ID(上一条指令中第三个属性显示IMAGE ID)

docker laqu ubuntu docker拉取ubuntu18.04_docker laqu ubuntu_04

Step 4: 在容器中运行带有GPU组件的Ubuntu18.04镜像并设置容器名称(名称以transformers为例)

sudo docker run -it -e NVIDIA_DRIVER_CAPABILITIES=compute,utility --gpus all --name transformers ubuntu:18.04

2023.8.15更新日志:

由于docker容器下调用nvidia-smi显示CUDA Version:N/A,因此在定义容器时加入下面属性:

-e NVIDIA_DRIVER_CAPABILITIES=compute,utility

docker laqu ubuntu docker拉取ubuntu18.04_docker_05

-t表示为容器重新分配一个伪输入终端,通常与 -i 同时使用
-i表示以交互模式运行容器
更多run指令介绍

Step 5: 配置容器

此处以在容器中ubuntu18.04系统配置深度学习开发环境为例给出配置方法

5.1 安装Python3.8.12
apt update
apt install sudo
apt install vim
apt install module-init-tools kmod  # NVIDIA驱动依赖包
apt install wget
wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz  # 安装指定版本
tar -zxvf Python-3.8.12.tgz -C ~
cd ~/Python-3.8.12
apt install zlib1g-dev libbz2-dev libssl-dev libpcre3-dev libncurses5-dev  libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev   liblzma-dev libffi-dev  libc6-dev    # Python依赖包
6  # 选择地区亚洲
19 # 选择城市重庆
./configure --prefix=/usr/
make          # 3 min
make test     # 2 min 30 sec
make install  # 10 sec
ln -s /usr/bin/python3 /usr/bin/python
ln -s /usr/bin/pip3 /usr/bin/pip
mkdir /home/Documents	# 新建Documents文件夹用于后面存一些交互文件
mkdir /home/Downloads   # 新建Downloads文件夹用于存取下载文件
5.2 导出原环境python库

在原环境下激活conda环境后导出包, pip导出命令如下

pip list --format=freeze > requirements.txt

会导出当前环境conda中安装的包以及包的版本,并在当前目录生成requirements.txt文件

5.3 将requirements.txt文件移入transformers容器中
sudo docker  cp  /home/lab501/文档/requirements.txt  transformers:/home/Documents/requirements.txt

注:从transformers容器将文件移入主机的命令将上述路径调换即可,例如:

sudo docker  cp   transformers:/home/Documents/requirements.txt   /home/lab501/文档/requirements.txt
5.4 在transformers容器中使用pip指令安装依赖包
pip install -r /home/Documents/requirements.txt

注:

  • conda指令导出包,使用pip安装会报错,原因在于condapip导出的txt文件中包的表述形式不同
conda list -e > requirements.txt

例如conda导出包的表述形式为

scipy=1.4.1=pypi_0

pip导出包的表述形式为

scipy==1.4.1
  • pip导出包使用pip安装时也会出错,原因在于这些发生安装错误的包在原环境中都是从外链下载的,requirements.txt文件中没有指出这些链接因此找不到对应版本。解决办法为先在requirements.txt中删除这些发生错误的包,如果不需要安装这些包就不用重新安装,需要安装的话再单独安装这些包,或者将版本改为pip源中存在的版本(前提是版本之间互相兼容)。

至此,使用cp指令传入模型代码和数据到transformers容器中即可正常运行和测试

5.5 上传容器至Docker Hub
5.5.1 为了不变动原容器,使用export指令导出原容器
sudo docker export transformers > transformers.tar
5.5.2 将导出的容器快照导入作为新镜像
sudo cat transformers.tar | sudo docker import - deeplearning

docker laqu ubuntu docker拉取ubuntu18.04_Docker_06


注:导入命令中importdeeplearning之间有一个-deeplearning为新镜像的名字(可自定义但是不能含有大写字母)

5.5.3 镜像规范化命名(用户名/镜像名)
sudo docker tag deeplearning:latest boxuguan/deeplearning
5.5.4 上传至Docker Hub
sudo docker push boxuguan/deeplearning:latest

docker laqu ubuntu docker拉取ubuntu18.04_容器_07

5.5.5 登录 Docker Hub 官网验证上传成功

docker laqu ubuntu docker拉取ubuntu18.04_容器_08


完结撒花,做一下镜像介绍,有需要的可以直接使用

V1.0 版本

系统: Ubuntu 18.04 (GPU版)
Python版本: Python3.8.12
配置: Pytorch 1.10.0, transformers4.10.0, NLTK3.7, tensorflow-cpu2.3.0, scipy1.4.1, scikit-learn0.24.1, pandas1.4.0, numpy1.18.5, codalab1.5.10

V2.0版本(最新NLP开发镜像)

docker laqu ubuntu docker拉取ubuntu18.04_docker laqu ubuntu_09

5.6 镜像介绍
  • System:Ubuntu18.04
  • Python
  • 原始环境3.10.12
  • conda-base环境 3.11.4
  • conda-guanbx环境 3.10.12
  • Anaconda:Anaconda3-2023.07-2-Linux-x86_64 (conda:23.7.2)
  • cuda:release 11.3, V11.3.109
  • cudnn:8.9.4
  • python库(conda-guanbx环境下):











  • torch 2.0.0+cu117

  • transformers 4.30.2

补充:容器常用指令

  • Docker镜像索引方式
    IMAGE_REPOSITORY:TAG (例如ubuntu:18.04)
    IMAGE_ID
  • Docker容器索引方式
    CONTAINER_NAMES (例如transformers)
    CONTAINER_ID
  • 强制删除容器CONTAINER_NAMES
sudo docker rm -f CONTAINER_NAMES

docker laqu ubuntu docker拉取ubuntu18.04_Docker_10

  • 终端键入exit或者使用Ctrl+D退出并关闭容器
  • 使用Ctrl+Q+P退出容器,但不关闭容器
  • 使用如下指令查看正在运行的容器
sudo docker ps
sudo docker ps -a # 查看所有容器包括停止运行的容器

docker laqu ubuntu docker拉取ubuntu18.04_容器_11

  • 运行容器但不进入该容器
sudo docker start CONTAINER_NAMES

docker laqu ubuntu docker拉取ubuntu18.04_ubuntu_12

  • 进入容器(前提是该容器已经在后台运行)
sudo docker attach CONTAINER_NAMES

docker laqu ubuntu docker拉取ubuntu18.04_Docker_13

  • 重启容器
sudo docker restart CONTAINER_NAMES
  • 停止运行容器
sudo docker kill CONTAINER_NAMES
sudo docker stop CONTAINER_NAMES