Docker 自动构建的多图像

Multi image with Docker automated build

我 link 我的 hub.docker.com 帐户 bitbucket.org 用于自动构建。在我的存储库的核心文件夹中存在 Dockerfile,它位于 2 个映像构建步骤中。如果我在本地构建基于相同 Dockerfile 的图像(我的意思是在 Windows 中),我会得到 2 个不同的图像。但是如果我将使用 hub.docker.com 进行构建,则只会保存最后一张图像并将其标记为 "latest"。

Docker 文件:

#-------------First image ----------
FROM nginx 

#-------Adding html files
RUN mkdir /usr/share/nginx/s1
COPY content/s1 /usr/share/nginx/s1
RUN mkdir /usr/share/nginx/s2
COPY content/s2 /usr/share/nginx/s2

# ----------Adding conf file
RUN rm -v /etc/nginx/nginx.conf
COPY conf/nginx.conf /etc/nginx/nginx.conf

RUN service nginx start


# ------Second image -----------------
# Start with a base image containing Java runtime
FROM openjdk:8-jdk-alpine

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8080 available to the world outside this container
EXPOSE 8080

# The application's jar file
ARG JAR_FILE=jar/testbootstap-0.0.1-SNAPSHOT.jar

# Add the application's jar to the container
ADD ${JAR_FILE} test.jar

# Run the jar file 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]

以前有人这样做过还是不可能?

PS: 只有一个私有仓库可以免费使用,可能这是主要原因。

每当您在 Dockerfile 中指定第二个 FROM 时,您就会开始创建一个新映像。这就是为什么您只看到最后一张图像被保存和标记的原因。

您可以通过创建多个 Dockerfile 来完成您想要的,即通过在其 Dockerfile 中创建第一个图像,然后使用它来创建第二个图像——所有这些都使用 docker-compose 来协调容器。

我找到了解决这个问题的方法。

  1. 我将 docker 文件分成两个文件。

         1.docker for ngix  
         2.docker for java app
    
  2. 在构建设置中将这两个文件设置为 dockerfile 和 tag 不同的标签。

  3. 构建后你有一个图像,但版本定义为图像名称。例如,您可以使用

     for nginx server youraccount/test:nginx   
     for app image youraccount/test:java
    

我希望这在以后的过程中不会有问题。