spring-boot使用maven构建docker镜像(单服务)

系列:
spring-boot使用maven构建docker镜像(单服务)
spring-boot使用maven构建docker镜像(单服务+MySQL)
spring-boot使用maven构建docker镜像(多服务)

单服务 构建docker镜像 + 运行

使用Dockerfile构建镜像

前提:

  • 开启docker远程管理端口(此案例演示暂不考虑安全问题,直接开启2375端口)

1. 编写服务的 Dockerfile

Dockerfile官方文档:https://docs.docker.com/engine/reference/builder/
src/main/docker/Dockerfile

FROM openjdk:8-jdk-alpine
ADD *.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Duser.timezone=GMT+08", "-jar", "/app.jar"]

2. pom.xml 引入 io.fabric8/docker-maven-plugin 插件

io.fabric8/docker-maven-plugin官方文档:http://dmp.fabric8.io/

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.33.0</version>
    <configuration>
        <verbose>true</verbose>
        <!-- docker远程管理url -->
        <dockerHost>tcp://192.168.121.129:2375</dockerHost>
        <images>
            <image>
                <!-- 镜像名称 -->
                <name>${project.artifactId}:${project.version}</name>
                <build>
                    <dockerFile>${project.basedir}/src/main/docker/Dockerfile</dockerFile>
                    <assembly>
                        <name>/</name>
                        <!-- artifact是预定义的值,表示将项目打包后的jar拷贝到编译上下文中,便于Dockerfile ADD指令 -->
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                </build>

                <run>
                    <!-- 运行时容器名称 -->
                    <containerNamePattern>${project.artifactId}</containerNamePattern>
                    <!-- 映射端口(服务端口:容器内端口) -->
                    <ports>
                        <port>8080:8080</port>
                    </ports>
                </run>
            </image>
        </images>
    </configuration>
</plugin>

3. maven 命令

  • 构建镜像 mvn clean package docker:build
  • 删除镜像 mvn docker:remove
  • 启动容器 mvn docker:run
  • 停止容器(自动删除容器) mvn docker:stop
  • 完整流程
    mvn clean package docker:stop docker:build dokcer:run

推送镜像到私有镜像仓库

假设私库地址为:192.168.121.129:5000
在镜像名称前缀加上私库地址即可

<!-- 镜像名称 -->
<name>192.168.121.129:5000/${project.artifactId}:${project.version}</name>

推送镜像到私库 mvn docker:push

常见问题

2375 端口不通问题排查

  • 是否开启docker远程访问(lsof -i 2375)
  • 是否关闭防火墙(systemctl status firewalld)
    • systemct stop firewalld && systemct disable firewalld //关闭&禁用防火墙
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章