返回 导航

SpringBoot / Cloud

hangge.com

SpringBoot - 将微服务打包成Docker镜像教程(基于OpenJDK基础镜像)

作者:hangge | 2020-02-27 08:10
    Docker 是一个开源的应用容器引擎,开发者可以通过它将应用以及依赖包打到一个可移植的镜像中,然后发布到任何流行的机器上。本文演示如何使用 Docker 容器化的技术来构建并运行 Spring Boot 项目的可执行 Jar 包。

1,制作镜像

(1)首先确保机器上已经安装了 docker 环境,具体步骤可以参考我之前写的这篇文章:

(2)接着我们执行如下命令拉取 java 镜像:
(1)这里我们拉取的的是 OpenJDK 镜像,它与 JDK 的区别可以参考我之前写的这篇文章:
(2)如果想要使用 JDK 镜像,则改用如下命令:
  • docker pull java:8
docker pull openjdk:8-jdk-alpine

(3)接着使用 Maven 打包项目,执行下面的命令,将其构建成 jar 包:
mvn clean package

(4)在 jar 包所在的目录下创建一个名为 Dockerfile 的文件,文件内容如下:
# 基于openjdk 镜像
FROM openjdk:8-jdk-alpine

# 将本地文件夹挂在到当前容器
VOLUME /tmp

# 复制文件到容器
ADD demo-0.0.1-SNAPSHOT.jar app.jar

# 声明需要暴露的端口
EXPOSE 8081

# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

(5)最后执行如下 docker build 命令开始构建镜像:
参数说明:
  • -t 表示将新镜像命名为 hangge_server
  • 末尾的 . 指明 build context 为当前目录
  • Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置。
docker build -t hangge_server .

(6)制作完毕后使用 docker images 命令检查下镜像是否已经成功制作完毕:

2,启动镜像

(1)下面我们使用 docker run 命令运行我们构建的自定义镜像:
docker run -it -d -p 8081:8081  hangge_server

(2)使用 docker ps 命令查询当前运行的容器,可以发现这个容器确实已经在运行了:

附:使用 Maven 插件构建镜像

    上面我们都是通过手动执行 docker 命令来构建镜像,我们也可以使用 docker-maven-plugin 插件来完成这项任务。docker-maven-plugin 插件可以帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中,十分方便。

(1)首先在项目 main/docker 文件夹下创建一个 Dockerfile 文件,内容和上面样例是一样的:

(2)接着编辑项目的 pom.xml 文件,添加 docker-maven-plugin 配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.1</version>
            <configuration>
                <!--<dockerHost>http://192.168.248.135:2376</dockerHost>-->
                <imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName>
                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

(3)往后只要我们项目打包好以后,执行 docker:build 命令便会自动构建镜像:
评论

全部评论(0)

回到顶部