背景
微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上。单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网状分布的,有很多服务需要维护和管理,对它进行部署和维护的时候则比较复杂。
下面从Dev的角度来看一下Ops的工作。从Dev提交代码,到完成集成测试的一系列步骤如下:
整个过程都是自动的,这样就简化了原本复杂的集成工作,一天可以集成一次,甚至是多次。
本文主要关注的第二步,作为Dev使用Maven插件构建Docker镜像。
过程步骤
环境
笔者的电脑系统是MacOS,在进行下面的步骤之前,先具备一下条件:
Maven 和JDK 就不用过多多了,必须具有的。Docker Registry是私有的hub,mac上装好docker之后,配置一下Docker Registry的地址,配置如下:
因为docker默认需要私服做https支持,我这边之前有个私服做了https支持,所以我这里就不需要配置了
pom 配置
pom文件中需要引入相应的插件。docker-maven-plugin有三款:spotify、fabric8io和bibryam。其中第一款最为流行,资料也多,所以毫不犹豫选择第一款。
插件有两种使用方式,一种是在直接在pom配置中指定baseImage和entryPoint。另一种适合于复杂的构建,使用dockerfile,只需要在配置中指定dockerfile的位置。前一种比较简单,此处略过,主要讲下第二种的配置
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${maven.docker.version}</version> <!--插件绑定到phase--> <executions> <execution> <phase>install</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--配置变量,包括是否build、imageName、imageTag,非常灵活--> <skipDocker>${docker.skip.build}</skipDocker> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <!--最后镜像产生了两个tag,版本和和最新的--> <imageTags> <imageTag>${project.version}</imageTag> <imageTag>latest</imageTag> </imageTags> <forceTags>true</forceTags> <env> <TZ>Asia/Shanghai</TZ> </env> <!--时区配置--> <runs> <run>ln -snf /usr/share/zoneinfo/$TZ /etc/localtime</run> <run>echo $TZ > /etc/timezone</run> </runs> <dockerDirectory>${project.basedir}</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> <!--push到私有的hub--> <serverId>docker-registry</serverId> </configuration> </plugin>
${maven.docker.version}、${docker.skip.build}、${docker.image.prefix}都是可配置的变量。${project.basedir}、${project.build.directory}、${project.build.finalName}、${project.version}分别对应项目根目录、构建目录、打包后生成的结果名称、项目版本号。
上面的pom插件配置,指定了dockerfile的位置和镜像的命名规则。并将docker的build目标,绑定在install这个phase上。
dockerfile
FROM java:8 COPY target/maven-docker-image-0.0.1-SNAPSHOT.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar" ,"/app.jar"]
setting.xml
在pom插件中,还有一个serverId的配置。这个配置是必要的,对于需要将image上传到私有hub上,在如上配置之后,只需要加上-DpushImage即可实现。serverId是与maven的配置文件setting.xml相对应,setting.xml中增加的配置:
<server> <id>docker-registry</id> <username>用户名</username> <password>密码</password> <configuration> <email>邮箱</email> </configuration> </server>
结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Docker构建Maven+Tomcat基础镜像的实现,包括了Docker构建Maven+Tomcat基础镜像的实现的使用技巧和注意事项,需要的朋友参考一下 前言 在 Java 编程中,大多数应用都是是基于 Maven 构建的,而交付的结果大多是采用的 Tomcat 的 war 包形式,所以,构建一个基于 Maven 和 Tomcat 的基础镜像很有必要,不仅能帮助我们提升平时自主实
本文向大家介绍浅谈使用Maven插件构建Docker镜像的方法,包括了浅谈使用Maven插件构建Docker镜像的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了使用Maven插件构建Docker镜像的方法,分享给大家,具体如下: 工具 工欲善其事,必先利其器。笔者经过调研,有以下几款Docker的Maven插件进入笔者视野: 插件名称 官方地址 docker-maven-plugin h
我正在使用Jib创建docker容器并将其推送到注册表。为此,我想构建一个Docker映像,在将该映像推送到Gitlab注册表之前,可以用于容器扫描。我面临的问题是,我不能为构建使用docker映像,因为它没有运行docker代理。我不能使用图像,因为它没有maven图像。有没有办法在不创建自定义docker映像的情况下解决这个问题? 这是我的与本部分相关的文件: 如果是docker图像: 如果是
工具 工欲善其事,必先利其器。笔者经过调研,有以下几款Docker的Maven插件进入笔者视野: 插件名称 官方地址 docker-maven-plugin https://github.com/spotify/docker-maven-plugin docker-maven-plugin https://github.com/fabric8io/docker-maven-plugin docke
我能够设置github和AWS CodePipeline之间的集成,所以现在我的代码在lambda函数的推送事件之后上传到S3。这很有效。 S3上带有源代码的新ZIP触发了一个管道,该管道生成代码。那很好。现在我还想为这个项目建立一个docker形象。 第一个问题是不能混合使用项目(nodejs)构建和docker构建。那很好,有道理。下一个问题是您不能有另一个buildspec。用于docker
然而,我正试图使它在Windows10中工作,但没能做到。Windows 10中的等价物是什么?