快速构建docker镜像:maven插件

越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或者war即可直接发布了,启动之后是一个java进程;容器化之后,由源代码产出的是一个docker镜像,而启动的是一个容器。多了这么多步骤是为了容器化之后的运维便利性,从现在来看,容器化是势不可挡的趋势。为了实现的我们CI/CD的终极目标:一键发布,这里介绍一个maven plugin(输入源代码,输出docker镜像)。

00 前言

在实施CI/CD的过程中,实现一键发布用的最多的工具就是Jenkins了,在Jenkins上通过配置将每一个步骤串联起来,现在出现了pipeline让这个过程更简单了,一般的持续集成的流程是:

  1. 从代码仓库下载代码(git或者svn);
  2. 通过工具(maven或者gradle)编译出可执行程序包(jar或者war);
  3. 使用dockerfile配置build出docker镜像;
  4. 将docker镜像发布至镜像仓库;
  5. 将镜像部署到云平台;
  6. 多环境分发镜像。

上述流程在工具齐全的情况下,是相当灵活好用的,公司一般都是这么使用的,而且也能将职责明确。但是当工具不够齐全的时候,或者说个人单打独斗的时候,会使用的工具有限,就寄希望于一个工具能够搞定更多的事情。dockerfile-maven-plugin 就是这样一个maven工具的插件。

01 Docker镜像管理

Docker镜像的管理可以类比作Jar包的管理,在虚拟机时代我们要部署程序时,都是将jar包或者war部署到机器上,然后执行它,docker容器化了之后,部署的是docker镜像,一般是部署在paas云平台上。

- Docker镜像管理 Jar包管理
官方仓库 https://hub.docker.com/ http://mvnrepository.com/
私有仓库 Nexus harbor
本地仓库命令 maven:mvn install docker build
发布至远程仓库 maven:mvn deploy docker push

02 maven 插件:dockerfile-maven-plugin

这是本文的主角,该maven插件可以实现有java源代码直接到docker镜像,配置了dockerfile-maven-plugin插件的maven工具就像是一个管道,一端输入Java源代码,另一端直接输出docker镜像。

dockerfile-maven-plugin插件出现之前,还有一个maven插件是docker-maven-plugin,是由同一个作者创造,作者明确表示推荐使用dockerfile-maven-plugin,并会持续升级;而docker-maven-plugin不在添加任何新功能,只接受修复bug。两个插件的设计思想是有差别的,前者需要独立编写Dockerfile文件,后者允许没有Dockerfile文件,所有的docker相关配置都写在pom文件的plugin中,这样使maven插件显得很笨重,并且如果脱离了这个maven插件还得重写编写Dockerfile,不够灵活。

因此,推荐使用maven插件:dockerfile-maven-plugin

具体操作方法是:

  1. 首先本地要安装docker环境。
  2. 在maven的pom文件中配置build的插件。
<properties>
  <dockerfile.maven.version>1.4.0</dockerfile.maven.version>
  <docker.registry.name.prefix>192.168.6.37:80/galaxy</docker.registry.name.prefix>
</properties>

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>${dockerfile.maven.version}</version>
    <dependencies>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>build</goal>
                <goal>push</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <repository>${docker.registry.name.prefix}/${project.artifactId}</repository>
        <tag>${project.version}</tag>
        <username>username</username>
        <password>password</password>
        <buildArgs>
            <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>
  1. 标准的Dockerfile放在classpath的根目录下。
  2. 执行maven命令:mvn clean package。

<execution>的配置中可以看到,在执行maven命令的时候会默认执行docker的buildpush
单独执行dockerfile操作的maven命令是:mvn dockerfile:buildmvn dockerfile:push等。<configuration>中配置docker镜像的仓库的地址等。

03 结束

这样一个基于docker镜像的开发部署流程就可以在本地完成了,其中只用到了maven工具。这样,一个人在使用docker镜像部署所开发的系统的过程更加流畅高效了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容