在Alpine容器中放置docker-compose

时间:2019-02-15 14:34:10

标签: docker docker-compose alpine

我正尝试将我的应用程序(代码,Dockerfile和docker-compose脚本)捆绑在一个映像中,以便于部署(入口点仅为docker-compose up)。这个顶级应用程序映像的Dockerfile看起来像这样

FROM alpine:latest
COPY . /app
RUN apk update && apk add --no-cache docker py-pip openrc && pip install docker-compose

当我运行此映像时,似乎top中缺少dockerd尚未启动; docker ps报告“无法通过unix:///var/run/docker.sock连接到Docker守护程序。Docker守护程序是否正在运行? “。但是,如果我这样做了service docker start,则返回“ *警告:泊坞窗已经启动”。要使Docker在Alpine容器中正常工作,我需要做些特别的事情吗?

3 个答案:

答案 0 :(得分:2)

Docker由运行所有服务的docker守护程序和用于与守护程序进行交互的CLI组成(好的,还有很多其他部分,但这是最重要的)。不管您从java.time命令收到什么消息,安装java.time都不会安装守护程序。

要在容器内使用docker-compose,必须使用service图片。它称为docker。从中继承(而不是docker-in-docker)并享受。

但是在阅读this article之前,这解释了为什么它不是一个好主意,以及在容器内部使用docker的其他方法是什么(提示:您可以通过挂载{{1}从容器内部调用主机的docker守护程序}套接字)。

答案 1 :(得分:2)

grapes answer所述,如果您不能或不想从docker:dind继承,则可以选择使用alpine作为基础图像,并且安装Docker CLI和Docker Compose。

为使映像较小,可以在安装Docker Compose之后删除一些依赖项:

FROM alpine:3.11

RUN apk update && \
    apk add --no-cache docker-cli python3 && \
    apk add --no-cache --virtual .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make && \
    pip3 install docker-compose && \
    apk del .docker-compose-deps

此映像不包含Docker Engine,必须通过从主机挂载/var/run/docker.sock来使用Docker-in-Dcoker方法

docker run -v /var/run/docker.sock:/var/run/docker.sock <image name>

答案 2 :(得分:0)

你可以运行这个来获取 docker-compose

apk update && apk add --no-cache --virtual docker-cli python3 .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make python3 py3-pip py-pip curl libffi-dev openssl-dev gcc libc-dev rust cargo make

pip install docker-compose