如何构建同时包含docker和make命令的einstore应用Docker镜像
解决方案
有两种成熟的实现方式可以满足你的需求,不需要找同时预装两个命令的第三方基础镜像:
方案1:在einstore官方基础镜像上补充安装Docker CLI(推荐)
该方案基于einstore官方适配的基础镜像修改,不会缺失einstore运行所需的其他依赖,稳定性最高。
根据einstore/einstore-base:latest的底层系统版本,在Dockerfile中添加对应安装命令即可:
- 若基础镜像为Alpine系(绝大多数官方轻量化镜像的默认底层),修改后Dockerfile如下:
FROM einstore/einstore-base:latest WORKDIR /app # 安装Docker CLI RUN apk add --no-cache docker-cli COPY . . RUN make install-db
- 若基础镜像为Debian/Ubuntu系,修改后Dockerfile如下:
FROM einstore/einstore-base:latest WORKDIR /app # 安装Docker CLI RUN apt update && apt install -y --no-install-recommends docker.io && rm -rf /var/lib/apt/lists/* COPY . . RUN make install-db
方案2:在docker官方基础镜像上补充安装make
docker:latest默认基于Alpine系统,直接添加make的安装命令即可:
FROM docker:latest WORKDIR /app # 安装make命令 RUN apk add --no-cache make COPY . . RUN make install-db
注意事项
如果make install-db执行过程中需要操作Docker daemon(如启动数据库容器):
- 若该命令在镜像构建阶段执行,需要确保构建环境的Docker进程可被访问,可在执行
docker build时添加--network host参数共享宿主机网络 - 若该命令在容器运行阶段执行,不需要在容器内内置Docker daemon,运行容器时挂载宿主机的docker套接字即可:
docker run -v /var/run/docker.sock:/var/run/docker.sock 你的镜像名
内容的提问来源于stack exchange,提问作者fatima zahra ben yahya
相关产品推荐
相关产品推荐

