自分のPCでdockerを作りあげ、それを他の閉鎖系システムに運んで運用してみる.
「移行」としては下記のような区分かなと思っている
区分 | From(export) | To(他のシステムへimport) | 作業としては |
コンテナで作った環境 | docker image | docker load | dockerイメージにしてtarでまとめて他で展開 |
docker container ->imageへ | docker load | containerからimageにcommitさせてdocker saveでtarにして他へ展開 | |
docker image -> Singularity | Singularity | docker imageをSingularity imageに変換して他へ展開 | |
conda環境 | conda pack | tar xf , conda-unpack | conda環境をpackしてtarファイルを作り、それを他へ展開 |
condaの場合FromのOSとToのOSが同じか互換があるものが望ましい
出発点は docker image、もしくはimageから起こしたコンテナにいろいろ手を加えたものとします。
まずは export です. すでに閉鎖系で使用したいdocker imageがあるなら「docker save」でimageをtarファイルに纏めます
dockerでdocker環境が構築済みであるとします.
[saber@rockylinux9 ~]$ docker pull trinityctat/starfusion
[saber@rockylinux9 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
trinityctat/starfusion latest ab3ba205d827 4 weeks ago 5.69GB
:
[saber@rockylinux9 ~]$
(コンテナを移設したいなら commit してdocker image にします)
[saber@rockylinux9 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[saber@rockylinux9 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60beb1135263 nvidia/cuda:11.8.0-runtime-ubuntu22.04 "/opt/nvidia/nvidia_…" About a minute ago Exited (0) 8 seconds ago bold_noyce
[saber@rockylinux9 ~]$ docker commit 60beb1135263 cuda-ubuntu
[saber@rockylinux9 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cuda-ubuntu latest 9ff7c95eaa89 3 seconds ago 2.65GB <--コンテナをimageにしました
:
[saber@rockylinux9 ~]$
これをtarファイルに纏めます「docker save -o nvidia」
[saber@rockylinux9 ~]$ docker save -o trinityctat-starfusion-latest.tar trinityctat/starfusion:latest
[saber@rockylinux9 ~]$ docker save -o cuda-ubuntu-latest.tar cuda-ubuntu:latest
[saber@rockylinux9 ~]$ ls -lh
total 7.9G
-rw-------. 1 saber saber 2.5G Jun 8 12:19 cuda-ubuntu-latest.tar
-rw-------. 1 saber saber 5.4G Jun 8 12:15 trinityctat-starfusion-latest.tar
[saber@rockylinux9 ~]$
っでこれらできた tar ファイルを閉鎖系に持っていきます
閉鎖系のdockerを使って
docker load -i trinityctat-starfusion-latest.tar
とすればdockerがそこに植えられます
rootless dockerとして使えるならいいけど、/etc/group の docker でdockerを利用可能にしてるなら他者に自分のdockerが見られてしまいます
まずは環境整備でSingularityを入れます
[root@rockylinux9 ~]# dnf install epel-release
[root@rockylinux9 ~]# dnf --enablerepo=epel install apptainer apptainer-suid -y
[root@rockylinux9 ~]# singularity config fakeroot --add saber
っで変換してみる
[saber@rockylinux9 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
trinityctat/starfusion latest ab3ba205d827 5 weeks ago 5.69GB
nvidia/cuda 11.8.0-runtime-ubuntu22.04 d8fb74ecc8b2 19 months ago 2.65GB
[saber@rockylinux9 ~]$
[saber@rockylinux9 ~]$ singularity build trinityctat-starfusion-last.sif docker-daemon://trinityctat/starfusion:latest
[saber@rockylinux9 ~]$ ls -lh
total 2.0G
-rwxr-xr-x. 1 saber saber 2.0G Jun 9 22:07 trinityctat-starfusion-last.sif
[saber@rockylinux9 ~]$
[saber@rockylinux9 ~]$ singularity shell trinityctat-starfusion-last.sif
Apptainer>
Apptainer> STAR-Fusion
############################################################################################
#
# _________________________ __________ ___________ .__
# / _____/\__ ___/ _ \\______ \ \_ _____/_ __ _____|__| ____ ____
# \_____ \ | | / /_\ \| _/ ______ | __)| | \/ ___/ |/ _ \ / \
# / \ | |/ | \ | \ /_____/ | \ | | /\___ \| ( <_> ) | \
# /_______ / |____|\____|__ /____|_ / \___ / |____//____ >__|\____/|___| /
# \/ \/ \/ \/ \/ \/
#
#
############################################################################################
#
:
:
Apptainer>
Apptainer> exit
exit
[saber@rockylinux9 ~]$
一方で既にコンテナになっているdockerは一旦docker imageにします。それから変換します
[saber@rockylinux9 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60beb1135263 nvidia/cuda:11.8.0-runtime-ubuntu22.04 "/opt/nvidia/nvidia_…" 34 hours ago Exited (0) 34 hours ago bold_noyce
[saber@rockylinux9 ~]$ docker commit 60beb1135263 cuda-ubuntu
sha256:df4751cd472f93c04fe2dc701376f4e115bef7b1c5d1c4519867452322706197
[saber@rockylinux9 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cuda-ubuntu latest df4751cd472f 8 seconds ago 2.65GB
trinityctat/starfusion latest ab3ba205d827 5 weeks ago 5.69GB
nvidia/cuda 11.8.0-runtime-ubuntu22.04 d8fb74ecc8b2 19 months ago 2.65GB
[saber@rockylinux9 ~]$
[saber@rockylinux9 ~]$ singularity build nvidia-cuda.sif docker-daemon://cuda-ubuntu:latest
[saber@rockylinux9 ~]$ ls -lh
total 3.4G
-rwxr-xr-x. 1 saber saber 1.4G Jun 9 22:14 nvidia-cuda.sif
-rwxr-xr-x. 1 saber saber 2.0G Jun 9 22:07 trinityctat-starfusion-last.sif
[saber@rockylinux9 ~]$
作ったsif を移設先に持っていけば使えます。