我有4个图像,它们不共享相同的基本图像:
image1 : FROM openjdk:8
image2 : FROM mongo:3.6
image3 : FROM ssh
image4 : FROM ubuntu 但在某些情况下,我必须对所有这些命令执行相同的命令,例如:
RUN useradd -s /bin/bash -p $(openssl passwd -1 user) -d /home/user -m -G sudo user
USER user
WORKDIR /home/user
RUN mkdir -p /home/user/.ssh/ && \
chmod 0700 /home/user/.ssh && \
touch /home/user/.ssh/authorized_keys && \
chmod 600 /home/user/.ssh/authorized_keys && \
touch /home/user/.ssh/config && \
chmod 600 /home/user/.ssh/config
COPY ssh-keys/ /keys/
RUN cat /keys/id_rsa.pub >> /home/user/.ssh/authorized_keys
RUN cat /keys/config >> /home/user/.ssh/config并且具有相同的目录结构:
image1
--->ssh-keys
------>config
------>id_rsa
------>id_rsa.pub
--->Dockerfile
image2
--->ssh-keys
------>config
------>id_rsa
------>id_rsa.pub
--->Dockerfile
image3
--->ssh-keys
------>config
------>id_rsa
------>id_rsa.pub
--->Dockerfile
image4
--->ssh-keys
------>config
------>id_rsa
------>id_rsa.pub
--->Dockerfile有没有办法消除这种重复?
发布于 2020-07-07 09:09:23
Scratch不包含任何内容,最好使用alpine作为基础镜像,并从可重用部分中删除以下命令
RUN useradd -s /bin/bash -p $(openssl passwd -1 user) -d /home/user -m -G sudo user
USER user由于这些命令随操作系统(基础映像)的不同而不同,因此它在高山等环境中不起作用
因此,我将提出如下建议
image1
--->Dockerfile
image2
--->Dockerfile
baseimage
--->ssh-keys
------>config
------>id_rsa
------>id_rsa.pub
--->Dockerfile设计基础图像
FROM alpine as sshconfig
WORKDIR /home/user
RUN mkdir -p /home/user/.ssh/ && \
chmod 0700 /home/user/.ssh && \
touch /home/user/.ssh/authorized_keys && \
chmod 600 /home/user/.ssh/authorized_keys && \
touch /home/user/.ssh/config && \
chmod 600 /home/user/.ssh/config
COPY ssh-keys/ /keys/
RUN cat /keys/id_rsa.pub >> /home/user/.ssh/authorized_keys
RUN cat /keys/config >> /home/user/.ssh/config构建此镜像
docker build -t sshconfig .现在,后续的Docker镜像将从此sshconfig Docker基础镜像复制。
Image1
FROM ubuntu
# Add user
# change user
# copy ssh-config from base image
COPY --from=sshconfig /home/user/.ssh /home/user/.ssh
#for testing and verify keys
COPY --from=sshconfig /keys/ /keys/
# list keys copies form base image
RUN ls -lstrah /home/user/ /home/user/.ssh /keys/发布于 2020-07-07 00:22:41
您可能希望考虑使用multi-stage build作为所有图像的基础,并根据需要进行扩展;也许您的基础可以是这样的:
FROM scratch
# I like to keep all my image files under a single directory
COPY rootfs/ /然后,在您的其他Dockerfile中:
FROM your-base-image AS base
FROM openjdk:8
COPY --from=base / /
[...]缺点是,在多阶段构建中,只有某些操作会像您预期的那样工作,但复制文件应该是其中之一。
https://stackoverflow.com/questions/62757385
复制相似问题