SpringBoot - 将微服务打包成Docker镜像教程(基于OpenJDK基础镜像)
Docker 是一个开源的应用容器引擎,开发者可以通过它将应用以及依赖包打到一个可移植的镜像中,然后发布到任何流行的机器上。本文演示如何使用 Docker 容器化的技术来构建并运行 Spring Boot 项目的可执行 Jar 包。
(3)接着使用 Maven 打包项目,执行下面的命令,将其构建成 jar 包:
(4)在 jar 包所在的目录下创建一个名为 Dockerfile 的文件,文件内容如下:
(5)最后执行如下 docker build 命令开始构建镜像:
(6)制作完毕后使用 docker images 命令检查下镜像是否已经成功制作完毕:
(2)使用 docker ps 命令查询当前运行的容器,可以发现这个容器确实已经在运行了:
(1)首先在项目 main/docker 文件夹下创建一个 Dockerfile 文件,内容和上面样例是一样的:
(3)往后只要我们项目打包好以后,执行 docker:build 命令便会自动构建镜像:
1,制作镜像
(1)首先确保机器上已经安装了 docker 环境,具体步骤可以参考我之前写的这篇文章:
(2)接着我们执行如下命令拉取 java 镜像:
(1)这里我们拉取的的是 OpenJDK 镜像,它与 JDK 的区别可以参考我之前写的这篇文章:
(2)如果想要使用 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 命令便会自动构建镜像: