为了便于说明,当我说基础图像时,我的意思是具有所有常见配置的父图像,以便基于它的孩子不需要单独下载依赖关系。构建基础图像的Docker-compose.yml文件,然后基于它的孩子?
从我的理解,docker-compose.yml文件是运行时配置,而Dockerfiles是构建时配置。但是,有一个使用docker-compose的build
选项,我想知道如何使用它来构建基本映像。
截至目前,我使用一个运行其他shell脚本的shell脚本。一个从我们创建的基础图像构建我的所有图像。另一个将它们作为具有必要配置的容器来运行。但是,基本映像永远不会作为容器运行。
目前,shell脚本我希望变成一个码头工人,撰写文件,看起来像这样:
echo "Creating docker network net1"
docker network create net1
echo "Running api as a container with port 5000 exposed on net1"
docker run --name api_cntr --net net1 -d -p 5000:5000 api_img
echo "Running redis service with port 6379 exposed on net1"
docker run --name message_service --net net1 -p 6379:6379 -d redis
echo "Running celery worker on net1"
docker run --name celery_worker1 --net net1 -d celery_worker_img
echo "Running flower HUD on net1 with port 5555 exposed"
docker run --name flower_hud --net net1 -d -p 5555:5555 flower_hud_img
,使图像中的shell脚本,如下:
echo "Building Base Image"
docker build -t base ../base-image
echo "Building api image from Dockerfile"
docker build -t api_img ../api
echo "Building celery worker image"
docker build -t celery_worker_img ../celery-worker
echo "Building celery worker HUD"
docker build -t flower_hud_img ../flower-hud
我的问题归结为一件事,我可以创建这个基本的图像,而不用在docker-compose的容器中运行它。 (所有的Dockerfiles都以FROM base:latest
开始,除了基地本身)。我希望让其他人尽可能简单,以便他们只需运行一个命令。
编辑:我使用的是版本3,并且根据文档build:
被忽略,并且docker-compose只接受预先构建的图像。
那么最好是先建立基础图像,然后在一个单独的命令中执行docker-compose,并且如果我正在执行一个命令 - 全部都有一个shell脚本运行这两个命令? –
@WillParzybok这似乎是一个更好的主意,适合你的目的。 – Ayushya
这就是我所做的。詹金斯建立我的基本图像,并将其放入私人图像回购。如果您使用版本号正确标记它们,则始终可以控制。这是一个相当直接的过程来处理。 – Grimmy