Docker自动构建的多映像

时间:2018-10-08 07:48:45

标签: docker dockerfile auto-build

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

Dockerfile:

#-------------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:只有一个私有存储库可供免费使用,这可能是主要原因。

2 个答案:

答案 0 :(得分:2)

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

您可以通过创建多个Dockerfile(即在其Dockerfile中创建第一个映像,然后使用该映像来创建第二个映像)来完成所需的工作,所有映像都使用docker-compose在容器之间进行协调。

答案 1 :(得分:0)

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

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

         1.docker for ngix  
         2.docker for java app
    
  2. 在构建设置中,将这两个文件设置为dockerfile并使用不同的标签进行标记。 enter image description here

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

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

enter image description here

enter image description here 我希望这在将来的过程中不会有问题。