如何在高山容器中安装 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?的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch:如何在 Docker 容器中安装 Elastic Stack
Elasticsearch:如何在 Docker 容器中安装 Elastic Stack
如何在 Elastic Beanstalk 多容器 Docker 环境中安装 composer 依赖项