local docker repo
参照 [1-3,6,7] 用 registry:latest
在本地建好 docker 仓库:
- 改
/etc/docker/daemon.json
,加一行:
其中"insecure-registries": ["1.2.3.4:5000"]
1.2.3.4
是 docker registry 服务器的 IP。参考 [5],为解决 http 和 https 的问题,在要 pull 的机器上的 daemon.json 也加上。 - 重启 docker:
service docker restart
。 - pull:
docker pull registry
。 - run:
其中docker run --name="registry" -d --restart=always \ # -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ -p 5000:5000 \ -v /home/docker:/var/lib/registry \ # -v /home/docker:/tmp/registry \ registry:latest
/home/docker
是宿主机放 docker image 的路径,这个目录映射可以防止 registry 容器删除时,已经 pushed 去里面的 images 丢失。
(问:此处如果将本机 docker image 目录映射去 registry 容器内,是不是就可以不用 push,commit 完就直接可以在 registry 内看到?)
将自制 docker image 打 tag,如 1.2.3.4:5000/my-image:v1
(记得带上端口号,本例即 :5000
,否则后面会报错),push 去本地仓库:docker push 1.2.3.4:5000/my-image:v1
。
build singularity image
在另一台用 singularity 的、能访问 1.2.3.4
的机,基于刚 push 上的 my-image:v1
build 一个 singularity simage(.simg 文件):
SINGULARITY_NOHTTPS=1 \
singularity -d build /home/tom/singularity-images/my-image-v1.simg \
docker://1.2.3.4:5000/my-image:v1
其中 SINGULARITY_NOHTTPS=1
是为了解决 https 的问题,否则会报错,见 [4]。