Docker 运行 spring 引导应用程序在 docker 容器上的文件?

Docker file for running spring boot application on docker container?

您好,我正在尝试创建一个 docker 图像 java 并在其中安装 maven 并打开端口 8090。

容器启动 运行 后,我会将我的 spring 启动项目复制到容器中,然后我将从容器中 运行 它。

为此,我尝试创建 docker 文件。我能够在本地成功构建 docker 图像。

当我尝试用它创建容器时。它没有提起容器。我已经在里面浪费了 2 天了。

我使用了以下 docker 文件。

FROM ubuntu:16.04
ENV DEBIAN_FRONTEND noninteractive

ENV VERSION 8
ENV UPDATE 152
ENV BUILD 16
ENV SIG aa0333dd3019491ca4f6ddbe78cdb6d0

ENV JAVA_HOME /usr/lib/jvm/java-${VERSION}-oracle

# install jre
RUN apt-get update -qq && \
  apt-get upgrade -qqy --no-install-recommends && \
  apt-get install curl unzip bzip2 -qqy && \
  mkdir -p "${JAVA_HOME}" && \
        curl --silent --location --insecure --junk-session-cookies --retry 3 \
          --header "Cookie: oraclelicense=accept-securebackup-cookie;" \
          http://download.oracle.com/otn-pub/java/jdk/"${VERSION}"u"${UPDATE}"-b"${BUILD}"/"${SIG}"/jre-"${VERSION}"u"${UPDATE}"-linux-x64.tar.gz \
        | tar -xzC "${JAVA_HOME}" --strip-components=1 && \
  apt-get remove --purge --auto-remove -y curl unzip bzip2 && \
  apt-get autoclean && apt-get --purge -y autoremove && \
  rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN update-alternatives --install "/usr/bin/java" "java" "${JAVA_HOME}/bin/java" 1 && \
        update-alternatives --install "/usr/bin/javaws" "javaws" "${JAVA_HOME}/bin/javaws" 1 && \
        update-alternatives --set java "${JAVA_HOME}/bin/java" && \
        update-alternatives --set javaws "${JAVA_HOME}/bin/javaws"

EXPOSE 8090
ENTRYPOINT ["/bin/bash"] 

注意:当我从该图像创建容器时,我希望容器位于 运行ning 上。

docker 中心是否有任何预定义的 Docker 图像可以简化我的工作?

如果你们给我一个 docker 文件来回答我的问题,我会很高兴。

我知道只有 Whosebug 可以解决我的问题。提前致谢。

使用多阶段docker构建https://docs.docker.com/engine/userguide/eng-image/multistage-build/

1) 让第一阶段有 maven 镜像 https://hub.docker.com/r/library/maven/ 并通过将项目文件复制到其中来构建项目并获得可执行的 jar 文件

2) 将 jar 文件复制到第二阶段,即使用 openjdk 映像,使用 https://hub.docker.com/_/openjdk/ 和 运行 脚本中的可执行 jar 文件,位于 CMD[]

如果您使用 alpine 版本的图像,docker 容器大小将非常小且高效

端点有问题。必须在端点中启动服务。一旦此服务(进程)完成,容器就会退出。

在我的例子中,我在监听端口 8090 的入口点调用了一个简单的 spring 引导应用程序。

经过2天多的努力,学习非常好。