docker-在 Alpine 容器中组合

docker-compose inside Alpine container

我正在尝试将我的应用程序(代码、Docker 文件和 docker-compose 脚本)捆绑在一个图像中以便于部署(入口点将只是 docker-compose up ).我的 Docker 这个顶级应用图片的文件看起来像这样

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

当我运行这张图的时候,好像dockerd还没有开始,没有出现在top结果中; docker ps 报告“无法连接到位于 unix:///var/run/docker.sock 的 Docker 守护进程。docker 守护进程是否 运行ning? “。但是,如果我这样做 service docker start,这个 returns “* 警告:docker 已经开始了”。我需要做什么特别的事情才能让 Docker 工作一个 Alpine 容器?

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

要在容器内使用 docker,您必须使用 docker-in-docker 图像。它被称为docker:dind。继承它(而不是 alpine)并享受它。

但在阅读 this article 之前,这解释了为什么这不是一个好主意,以及在容器内使用 docker 的其他方法是什么(提示:您可以调用主机的 docker 守护程序从容器内部仅安装 /var/run/docker.sock:/var/run/docker.sock 插座)。

如果您不能或不想继承 grapes 中提到的 docker:dind,可以选择使用 alpine 作为基础映像并安装 Docker CLI 和 Docker 撰写。

为了保持图像较小,可以在 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 引擎,并且必须通过从主机 /var/run/docker.sock 安装 /var/run/docker.sock 使用 Docker-in-Dcoker 方法

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

你可以运行这个来获得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