如何在高山容器中安装 Docker?

Posted

技术标签:

【中文标题】如何在高山容器中安装 Docker?【英文标题】:How can I install Docker inside an alpine container? 【发布时间】:2019-06-03 14:00:20 【问题描述】:

如何在 alpine 容器中安装 Docker 并运行 docker 映像? 我可以安装,但无法启动 docker,并且在运行时出现“docker command not found error”。

【问题讨论】:

Is it ok to run docker from inside docker?的可能重复 几乎普遍不鼓励,技术上也很复杂,但理论上是可行的。最好的选择是使用更高级别的编排器,如 Docker Compose,并且根本不让容器尝试启动其他容器。如果您可以容忍您的容器对主机具有不受限制的 root 访问权限,您还可以让它们访问主机的 Docker 套接字。 【参考方案1】:

用于在 alpine 中运行 docker-cli 的 Dockerfile

FROM alpine:3.10
RUN apk add --update docker openrc
RUN rc-update add docker boot

构建 docker 镜像

docker build -t docker-alpine .

运行容器(host 和 alipne 容器将共享同一个 docker 引擎

docker run -it -v "/var/run/docker.sock:/var/run/docker.sock:rw" docker-alpine:latest /bin/sh

【讨论】:

有什么方法可以将安装卷部分移动到 Dockerfile。所以只要我开始一个交互式终端会话,docker就可以正常工作了吗?? @mygitrepo 不,绑定挂载是运行时选项。您唯一的机会是在 docker 守护程序上启用 TCP(或对 unix 套接字进行反向代理)并使用 -H 标志(您可以使用 ENTRYPOINT 设置)【参考方案2】:

您只需要在基于 Alpine 的镜像中安装 Docker CLI 并运行容器挂载docker.sock。它允许使用主机的 Docker 引擎运行同级 Docker 容器。它被称为 Docker-out-of-Docker,被认为是在容器内运行单独的 Docker 引擎(又名 Docker-in-Docker)的一个很好的替代方案。

Dockerfile

FROM alpine:3.11

RUN apk update && apk add --no-cache docker-cli

构建镜像:

docker build -t alpine-docker .

运行容器挂载docker.sock-v /var/run/docker.sock:/var/run/docker.sock):

docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock alpine-docker docker ps

上面的命令应该在基于 Alpine 的容器中成功运行 docker ps

【讨论】:

有什么方法可以将安装卷部分移动到 Dockerfile。所以只要我开始一个交互式终端会话,docker就可以正常工作了吗?? @mygitrepo - 你可以使用 docker-compose 来做类似的事情。您可以在那里定义挂载,然后使用docker-compose run --rm alpine-docker-svc docker-compose 文件看起来像(抱歉,SO cmets 中没有换行符):` version: '3' services: alpine-docker-svc: build: 。卷: - /var/run/docker.sock:/var/run/docker.sock `

以上是关于如何在高山容器中安装 Docker?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ubunto中安装docker

Elasticsearch:如何在 Docker 容器中安装 Elastic Stack

Elasticsearch:如何在 Docker 容器中安装 Elastic Stack

如何在 Elastic Beanstalk 多容器 Docker 环境中安装 composer 依赖项

如何使用 dockerfile 在 centos docker 容器中安装 mongodb-org-tools?

如何在Docker容器中安装RabbitMQ