多个项目共用一个dockerfile

新手上路,请多包涵

公司的大项目底下分了很多小项目,都是用dockerfile来构建镜像。每个小项目的dockerfile都是类似的。
其中一个例子如下:

FROM golang:1.11.1 AS build

WORKDIR /go/src/system

COPY . .

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -tags=jsoniter -o main src/main.go

FROM alpine:3.8

ENV TZ=Asia/Shanghai LANG=C.UTF-8 TERM=xterm

RUN apk --update add ca-certificates tzdata && \
    cp /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone

WORKDIR /go/src/system

RUN touch /etc/config.yaml && mkdir -p /t/logs/

COPY --from=build /go/src/system/main .

VOLUME ["/t/logs"]

ENTRYPOINT ["./main"]

所有项目的dockerfile除了system会被替换成对应的工程目录名字,其他都一样。如何让所有项目共享一个dockerfile呢?

阅读 5.2k
3 个回答

可以查查go有没有类似maven docker-maven-plugind的插件,java中可以在每个子项目pom中引入

<build>
    <plugins>
         <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>mavendemo</imageName>
                <dockerDirectory>${basedir}/docker</dockerDirectory> <!-- 指定 Dockerfile 路径-->
                <!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
                <resources>
                    <resource>
                        <targetPath>/ROOT</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>   
    </plugins>
</build>

通过 <dockerDirectory>${basedir}/docker</dockerDirectory> <!-- 指定 Dockerfile 路径-->

用同一个dockerfile,build几个镜像各自用不就好了吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进