Skip to content

Latest commit

 

History

History
140 lines (97 loc) · 4.71 KB

image_build.md

File metadata and controls

140 lines (97 loc) · 4.71 KB

自定义镜像

我们可以在集群里从自定义镜像拉起 POD,以支持快速的实验环境配置。自定义镜像的思路是ubuntu-tensorflowubuntu-pytorchorion-client-2.4.2的基础上,配置自己的环境�

信任集群 Harbor

自定义镜像需要从 Harbor 拉取,因此我们需要在 Docker 中添加对集群 Harbor 的信任。在Mac下用 Docker Desktop 可以直接在客户端里加入insecure-registries项:

Mac docker config

若未使用 Docker Desktop,则在/etc/docker/daemon.json中添加(若该文件不存在则创建):

{
  ...
  "insecure-registries": [
    "harbor.iiis.co"
  ]
}

添加完毕后,重启 Docker。

制作镜像

制作镜像的方式有基于 Dockerfile 和 docker commit命令两种形式。我们这里推荐基于 Dockerfile 方式,docker commit方式请参考官方文档

NOTE:这里可以找到我们在这一节所使用的例子。

我们假设在ubuntu-pytorch的基础上,我们还需要配置一系列环境:

  1. 安装一系列 Python 依赖库,在requirements.txt中指明。
  2. 将某个 Python 包的 Git 仓库放入镜像,并从仓库源码安装该 Python 包。
  3. 创建workspace工作目录。

其他的操作可以参考这几个任务。我们假设我们在build目录下工作,我们使用navdeep-G/samplemod作为 Python Package 的例子。

环境准备

假设我们需要 Python 支持一系列的库,例如画图的matplotlib和交互式的jupyter等,我们将这些写在build目录下:

# requirements.txt
numpy >= 1.19
matplotlib
pandas >= 1.0
jupyter

我们也希望pod能安装我们自己的一个私有代码仓库中的某个 Python Package,我们以navdeep-G/samplemod为例:

# PWD: build/
git clone https://github.com/navdeep-G/samplemod

整个工作目录为:

build
├── samplemod
│   ├── docs/
│   ├── sample/
│   ├── tests/
│   ├── .gitignore
│   ├── LICENSE
│   ├── MANIFEST.in
│   ├── Makefile
│   ├── README.rst
│   ├── requirements.txt
│   └── setup.py
└── requirements.txt

编写 Dockerfile 制作镜像

我们从harbor.iiis.co/library/下的镜像出发,安装requirements.txt中的依赖,并安装数据。我们这里不赘述 Dockerfile 的语法。实例的 Dockerfile 如下:

# Dockerfile
FROM harbor.iiis.co/library/ubuntu-pytorch:1.5.0
COPY . build
RUN pip install -r build/requirements.txt && cd build/samplemod; pip install . && mkdir -p workspace && rm -rf build

NOTE: 这里用单行命令是为了让制作后的镜像历史中不会存在build文件夹(类似于git,即使删去的文件也会在历史中存储,以备未来可能的恢复)。

之后利用docker按照 Dockerfile 制作镜像,并标记为sample:v0

docker build . -t sample:v0

最后确认镜像已经成功创建:

$ docker images | grep sample
sample          v0         707ab1c88146        30 seconds ago       11.3GB

从自定义镜像创建 Pod

从刚才我们制作的镜像创建 Pod 分为两步,首先需要将镜像推送到集群镜像仓库 Harbor,再从 Harbor 对应的镜像拉起 Pod。

在连接 VPN 后,访问harbor.iiis.co,用户名密码同 VPN。

NOTE: 注意这里的用户名不需要加入域名信息,即只需要username而不是username@iiis.co

连接到 Harbor 后新建项目:

NOTE: 注意这里需要勾选公开,原因是私有集群物理机的 docker 并没有登录用户个人的 Harbor 账户,因此无法拉取私有仓库中的镜像。

假设我们的项目名为 zhangsan,则我们之后的镜像均要 push 到harbor.iiis.co/zhangsan/下,首先 tag 我们做好的镜像:

docker tag sample:v0 harbor.iiis.co/zhangsan/sample:v0

之后将镜像 push 到 Harbor 中,我们需要先在 docker 中登录我们在 Harbor上的账号:

$ docker logout harbor.iiis.co
Removing login credentials for harbor.iiis.co
$ docker login harbor.iiis.co
Username: zhangsan
Password:
Login Succeeded

最后将镜像推送到 Harbor 中:

docker push harbor.iiis.co/zhangsan/sample:v0

创建好镜像后,拉起 Pod 流程和标准镜像一样。