【问题标题】:Is there a way to automate the creation of Docker Image?有没有办法自动创建 Docker Image?
【发布时间】:2020-05-19 11:41:52
【问题描述】:

我需要创建 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

【问题讨论】:

  • 请分享 Dockerfile。看来您有一个更适合生产的 Dockerfile,而不是持续开发。
  • 这里是 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
  • 请编辑您的问题,并在此处添加 Dockerfile。谢谢。

标签: spring-boot docker


【解决方案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 文件捆绑到映像中,而不是从主机系统共享(以便可以将其投入生产)。到时候,只需重新构建镜像并在 Dockerfile 中添加 COPY 指令即可:

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

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

【讨论】:

    【解决方案2】:

    您正在寻找docker compose

    您可以使用 compose 使用单个命令构建和启动容器。

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2022-01-18
      • 2018-09-14
      • 2021-10-20
      • 2020-03-25
      相关资源
      最近更新 更多