首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker中的预拉取镜像(dind)

Docker中的预拉取镜像(dind)
EN

Stack Overflow用户
提问于 2019-11-07 21:01:23
回答 2查看 1.6K关注 0票数 4

我正在运行一个docker-in-docker容器,它总是使用相同的几个图像。我想在我的dind容器中预先拉出它们,这样我就不必在启动时拉出它们。我怎样才能做到这一点呢?

我正在考虑建立我自己的dind形象,就像

代码语言:javascript
复制
FROM docker:18.06.1-ce-dind

RUN apk update && \
    apk upgrade && \
    apk add bash

RUN docker pull pre-pulled-image:1.0.0

很明显,上面的Dockerfile不会构建,因为docker在构建过程中没有运行,但它应该给出一个我想要实现的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-07 21:37:37

你不能这么做。

如果您查看docker:dind Dockerfile,您会发现它包含一个声明

代码语言:javascript
复制
VOLUME /var/lib/docker

这使得不可能在该目录树中创建具有任何不同内容的派生图像。(这与您不能使用预填充数据创建mysqlpostgresql映像的原因相同。)

票数 3
EN

Stack Overflow用户

发布于 2021-09-20 14:27:16

以下是实现这一点的一些方法。

这个想法是保存您想要使用的图像,然后在容器启动过程中导入这些图像。

例如,您可以使用文件夹images来存储图像。

并且您必须使用将导入图像的自定义入口点脚本。

因此,Dockerfile将为:

代码语言:javascript
复制
FROM docker:19.03-dind

RUN apk add --update --no-cache bash tini

COPY ./images /images
COPY ./entrypoint.sh /entrypoint.sh

ENTRYPOINT ["tini", "--", "/entrypoint.sh"]

(在后台加载图片需要使用tini)

entrypoint.sh脚本:

代码语言:javascript
复制
#!/bin/bash

# Turn on bash's job control
set -m

# Start docker service in background
/usr/local/bin/dockerd-entrypoint.sh &

# Wait that the docker service is up
while ! docker info; do
  echo "Waiting docker..."
  sleep 3
done

# Import pre-installed images
for file in /images/*.tar; do
  docker load <$file
done

# Bring docker service back to foreground
fg %1

仅供参考,这是一个保存镜像的示例:

代码语言:javascript
复制
docker pull instrumentisto/nmap
docker save instrumentisto/nmap >images/nmap.tar
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58749344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档