有没有一种方法可以自动创建Docker Image?

时间:2020-02-03 17:06:54

标签: spring-boot docker

我需要创建一个Springboot应用程序的Docker映像,并通过创建一个Dockerfile并将其构建为映像来实现这一点。然后,我使用“ docker run”启动了一个容器。该容器用于编写我的应用程序的所有活动。

但是,我的问题是,我使用的JAR文件需要不断更改,并且要求我每次都重新构建Docker映像。此外,我需要获取运行较早的Docker容器的内容,并将其转移到根据新生成的映像创建的容器中。

我知道整个过程都可以编写为Shell脚本,并且每次我对JAR文件进行更改时都可以期待。但是,有什么我可以使用的工具可以通过简单的方式使其自动化?

这是我的Dockerfile:

FROM java:8
WORKDIR /app 
ADD ./SuperApi ./SuperApi 
ADD ./config ./config 
ADD ./Resources ./Resources 
EXPOSE 8000 
CMD java -jar SuperApi/SomeName.jar --spring.config.location=SuperApi/application.properties

2 个答案:

答案 0 :(得分:1)

如果您有一个JAR文件需要复制到其他静态Docker映像中,则可以使用绑定安装来节省重复构建的需要。这样可以将目录从主机共享到容器中。

假设主机上的项目目录(JAR文件所在的构建位置)为/home/vishwas/projects/my_project,并且您需要将内容放置在容器内的/opt/my_project处。从命令行启动容器时,请使用-v标志:

docker run -v /home/vishwas/projects/my_project:/opt/my_project [...]

在本地/home/vishwas/projects/my_project下对文件所做的更改将立即在容器 1 内部可见,因此无需重建(也可能无需重新启动)容器。

如果使用docker-compose,则可以使用该容器的服务列表下的volumes节来表示:

volumes:
    - type: bind
      source: /home/vishwas/projects/my_project
      target: /opt/my_project

这适用于开发,但是稍后,您可能希望将JAR文件捆绑到映像中,而不是从主机系统共享(以便可以将其放入生产环境)。到那时,只需重新构建映像并将COPY指令添加到Dockerfile:

COPY /home/vishwas/projects/my_project  /opt/my_project

1:值得注意的是它将默认为读/写,因此容器也将能够修改您的项目文件。要以只读方式挂载,请使用:docker run -v /home/vishwas/projects/my_project:/opt/my_project:ro

答案 1 :(得分:0)

您正在寻找docker compose

您可以使用compose通过一个命令来构建和启动容器。