docker+阿里云镜像服务

安装步骤

  • 一、docker的安装和云端的推送
    • 1.本地安装docker工具
      • ubutun环境下
      • centos环境下
    • 2.创建镜像仓库
    • 3.构建docker镜像,并push到云端
      • 所需文件的准备
      • 镜像的构建和PUSH到云端
  • 二、云端镜像的本地使用
  • 三、附录:docker常用命令的总结
    • 1.镜像的删除
      • 全部删除
      • 部分删除
    • 2.进入无法运行的镜像
    • 3.问题记录
      • docker 运行ImportError: libtinfo.so.5: cannot
      • 查看镜像能否使用GPU
      • dockerfile文件

按照本文的步骤一步一步做完,你就可以实现将本地代码通过docker上传到阿里云镜像上,以及通过docker从阿里云镜像下拉代码到本地中运行。

一、docker的安装和云端的推送

1.本地安装docker工具

ubutun环境下

1输入以下代码以安装docker工具

sudo apt install docker.io

docker+阿里云镜像服务_第1张图片2.安装Nvidia-docker,为自己的docker做GPU服务器环境搭建

# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - 
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit 
sudo systemctl restart docker

centos环境下

注:以下内容部分选取了:linux centos7 docker GPU服务器环境搭建,如果前面安装过程遇到问题,可以按照原文操作从头来一遍。
1.卸载旧版本(如果没有可忽略)

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.下载安装包

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.做相关配置

sudo yum-config-manager --enable docker-ce-nightly
sudo yum-config-manager --enable docker-ce-test

4.安装docker Engine

sudo yum install docker-ce docker-ce-cli containerd.io

5.启动docker

sudo systemctl start docker

6.验证docker是否安装成功

sudo docker run hello-world

按下图所示输出表示安装成功
docker+阿里云镜像服务_第2张图片
7.安装Nvidia-docker
7.1安装依赖

sudo yum install dnf
sudo dnf install -y tar bzip2 make automake gcc gcc-c++ vim pciutils elfutils-libelf-devel libglvnd-devel iptables

7.2安装docker CE

sudo yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo yum repolist -v
sudo yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm
sudo yum install docker-ce -y
sudo systemctl --now enable docker
sudo docker run --rm hello-world
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
sudo yum clean expire-cache
sudo yum install -y nvidia-docker2
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:10.1-base nvidia-smi

以下输出表示docker的NVIDIA驱动安装成功
docker+阿里云镜像服务_第3张图片

2.创建镜像仓库

这里以申请阿里云容器镜像服务(免费),并创建仓库为例,其他仓库如dockerhub、谷歌、亚马逊、腾讯等详见对应产品说明书。我们建议用阿里云容器镜像服务。
阿里云容器服务地址为https://cr.console.aliyun.com,注册开通后产品页面如下:
docker+阿里云镜像服务_第4张图片
第一步切换标签页到命名空间,创建地址唯一的命名空间
docker+阿里云镜像服务_第5张图片docker+阿里云镜像服务_第6张图片在选择地域时,可以按照距离自己最近的地方

docker+阿里云镜像服务_第7张图片
下一步,选择本地仓库,不建议其他选项,完成创建。
docker+阿里云镜像服务_第8张图片点击管理,可查看详情。
在这里插入图片描述详情页如下,有基本的操作命令,仓库地址一般使用公网地址即可。
docker+阿里云镜像服务_第9张图片注意一下 如果是后面docker登录时,用到的用户名就是阿里云帐号,密码要自己在信息中生成,如下图
docker+阿里云镜像服务_第10张图片docker+阿里云镜像服务_第11张图片按照页面的指令在本地完成登陆:

export DOCKER_REGISTRY= your_registry_url<docker registry url> 
docker login $DOCKER_REGISTRY \ 
       --username your_username \ 
       --password your_password

注:上面代码中的your_registry_url是下图中红框部分的内容
your_username是你申请阿里云容器时给你的账号,一般都是:aliyun12435543…形式
your_password是你的密码
docker+阿里云镜像服务_第12张图片

3.构建docker镜像,并push到云端

所需文件的准备

我们需要先把自己的项目生成docker镜像,最后通过push提交到云端。
新建一个目录用来构建docker镜像,这里为了演示,使用’cbc_test’来命名:
①bert.py:自己项目的源代码
②requirement.txt:在bert.py文件所在目录下,使用 pip freeze > requirements.txt 命令将自己项目所依赖的包导出,名字为requirement.txt,打开如下图,
docker+阿里云镜像服务_第13张图片
④Dockerfile文件:首先打开当前目录的终端,输入

vim Dockerfile

然后在Dockerfile文件里输入

# 基于的基础镜像
FROM python:3.8.12
# 将自己的项目文件复制到容器的 /code 目录下
ADD . /code
# 设置code文件夹是工作目录
WORKDIR /code
# 安装支持
RUN pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
RUN pip install -r requirements.txt
# Run hello.py when the container launches
CMD ["python", "bert.py"]

这里的两个RUN pip都是为我们要上传的镜像做环境配置,包括代码运行需要的所有包
⑤model.pth,MASKED_IN.fasta等等:运行代码所需要的所有其他文件

将上面提到的5个文件等复制到cbc_test目录下,如下图所示:
docker+阿里云镜像服务_第14张图片

镜像的构建和PUSH到云端

在刚刚的cbc_test目录的终端下,执行命令

sudo docker build -t [ImageId] .

这里的[ImageId]表示你在本地构建的镜像,比如你希望本地的镜像名是project,那么这段代码就可以改为

sudo docker build -t project .

注:最后有个‘.’不要省略,直接复制我的代码即可。
当按照下文提示完成后,本地镜像就构建好了
docker+阿里云镜像服务_第15张图片输入

sudo docker images

可以查看刚才本地构建的所有镜像
在这里插入图片描述最后将本地的镜像push到云端(阿里云镜像)

sudo docker tag [ImageId] $DOCKER_REGISTRY:[镜像版本号]
sudo docker push $DOCKER_REGISTRY:[镜像版本号]

这里的$DOCKER_REGISTRY我们在前面已经设置过了(创建镜像仓库那里有提到),[ImageId]的设置还是和之前一样(这里指的是你希望上传的本地镜像),镜像版本号可以自己设定(比如你是第一次发布该镜像,那么可以设置为v1.0,第二次就是v2.0。当然你也可以设置成latest,如果不设置好像默认也是latest)
比如我下面的例子

sudo docker tag project $DOCKER_REGISTRY:latest # 为本地的镜像打标签,注意DOCKER_REGISTRY=registry.cn-beijing.aliyuncs.com/sjh_biocode_space/cbc_test 
sudo docker push $DOCKER_REGISTRY:latest	# 将镜像上传到阿里云

push成功之后,可以在阿里云镜像的网站中查看到刚刚推送的镜像:
docker+阿里云镜像服务_第16张图片至此推送就完成了!

二、云端镜像的本地使用

例如我们刚刚推动上去的镜像中有一个bert.py文件,现在我们的本地有一个pull.sh文件,该文件可以调用名为bert.py的文件,现在我们要用这个pull.sh文件调用云端镜像中的bery.py文件,那么可以在该pull.sh文件所在文件目录中进行如下操作:

bash pull.sh your_usename your_password $DOCKER_REGISTRY:latest

如果前面的步骤都正确的话,那么此时会成功运行bert.py这个文件(不需要我们提前配置环境之类的)

三、附录:docker常用命令的总结

1.镜像的删除

注:删除镜像前必须先停用容器

全部删除

#停用全部运行中的容器:
docker stop $(docker ps -q)
#删除全部容器:
docker rm $(docker ps -aq)
#删除所有镜像
docker rmi -f $(docker images -qa)

部分删除

#停用某个运行中的容器:
docker stop 容器id
#删除某个容器:
docker rm 容器id
#删除某个镜像
docker rmi -f 镜像id

2.进入无法运行的镜像

如果一个镜像有问题,那么在启动这个镜像的容器时,会自动抛出异常然后结束容器,我们无法进入容器对这个镜像进行修改,也即如果一个容器已经stop,那么我们无法通过docker exec进入,会提示:Error response from daemon: Container 837ffa1d4…is not running
下面提供一种解决方案:
找到想要进入的容器id, 假设是 837ffa1d4

#如果是构建镜像时失败可以通过日志找到容器id
docker ps -a
#保存"案发现场"为镜像
docker commit 837ffa1d4 user/temp
#这里随便起一个镜像名称就行.
#启动新容器
docker run -it user/temp sh

3.问题记录

docker 运行ImportError: libtinfo.so.5: cannot

运行下面代码

yum update
yum install libgl1-mesa-glx
yum -c /etc/yum.conf --installroot=/usr/local --releasever=/  install love

查看镜像能否使用GPU

运行下面代码

sudo docker run --rm --gpus all nvidia/cuda:10.1-base nvidia-smi

弹出GPU信息则表示可以使用GPU

dockerfile文件

dockerfile文件中的RUN pip后面是主代码运行所需要安装的环境,如果requirement.txt中不全的话,可以自己加入需要的环境对应的包,以及这些包的源,如下所示

RUN pip install -r requirements.txt # 这是安装自动生成的requirement.txt里的包
RUN pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html  # 这是自己补充的包,最后的网站是这些包的源

你可能感兴趣的:(docker,阿里云,linux)