您的位置:首页 > 运维架构 > Docker

第一个SpringBoot web 应用使用maven构建Docker镜像并容器化运行

2018-03-05 17:25 1751 查看

环境及配置

一、前期准备:
    1、eclipse的spring boot开发环境(jdk、maven、springboot插件等等,在此不做详细介绍,网上教程很多)

    2、centos7虚拟机一台

二、开发环境
    1、Windows 10(开发环境)

    2、centos7(编译环境)

    3、Eclipse (Version: Oxygen.2 Release (4.7.2))

    4、JDK1.8

    5、Maven  3.5.2 (开发环境)    3.0.5(编译环境)
三、在centos7上安装及配置docker
    1、在虚拟机安装centos7系统

    2、启用centos7网络  cd /etc/sysconfig/network-scripts/
vi ifcfg-eno16777736注意:这里ifcfg-eno的文件后面数字时随机的,每个人可能不同,要选择自己的文件,而不是新建

       


        c)将ONBOOT = no 改为ONBOOT = yes

        


        d)    重启网络并获取ip

           service network restart
ip addr
        注意:centos 7取消了 ifconfig指令,使用ip addr查看ip,不过笔者还是习惯ifconfig,可通过yum install net-tools 来安装

       


    3、    yum update (目的主要是将依赖升级到最新,这样避免依赖版本过旧导致的错误)
                
yum update

    4、配置yum docker源tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF5、安装docker     
yum install docker-engine
6、启动docker service docker start
7、配置docker镜像加速器(走的阿里的加速,大家可以访问[阿里容器镜像服务] 使用自己的账号加速)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://43jugwwr.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker


四、在centos上安装jdk、maven、maven-docker-plugin插件
1、安装jdk、mavenyum install java-1.8.0-openjdk.x86_64
yum install maven
        



2、安装maven-docker-plugin插件/usr/share/maven/conf
vi settings.xml新增 <pluginGroup>com.spotify</pluginGroup>







SpringBoot创建Hello World

一、新建Spring boot web工程









二、创建hello world
1、找到Application



2、新增controller访问



3、
项目上右键 > Run As > Maven Build..



在Goals中输入 spring-boot:run



运行成功



访问: localhost:8080



因本次主题是springboot的web基于maven编译成docker镜像,故而笔者不在此对springboot做展开陈述,仅使用最简单的hello world做展示。

三、为项目添加

1、在pom.xml中新增docker-maven-plugin编译插件和编译配置                        <plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName>
<dockerDirectory>${project.build.outputDirectory}</dockerDirectory>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
                        </plugin>

2、在resources下新建Dockerfile



3、Dockerfile内容为:FROM java
MAINTAINER "Yuan Wang"<wangzirong@oraro.net>
ADD springboot-docker-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD java -jar app.jar

Maven编译Docker镜像

通过maven编译docker镜像,不仅需要依赖maven-docker-plugin插件,还要依赖于docker环境进行编译。这也是很多人出现如下错误的原因所在:[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.292 s
[INFO] Finished at: 2018-03-05T15:00:28+08:00
[INFO] Final Memory: 19M/181M
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "pom.xml" could not be activated because it does not exist.
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project dockerdemo: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]
[ERROR]
Connect to localhost:2
969d
375
这种错误,就是因为编译环境不具备docker导致,很多人是在windows下开发,而windows上不存在docker,docker实际在虚拟机中装着,故而导致该错误,如果要解决,有如下几个方案:
    a)windows安装docker(不建议,windows上docker的兼容性笔者不做评价)

    b)通过hosts,将localhost指向部署了docker的虚拟机ip(参照百度部分小伙伴的解决方案)

    c)将代码推入编译环境编译(部署了docker的虚拟机)(我们项目必然是上git,在编译环境下自动化编译,所以笔者本次采用该方式,不过为了简化本文,省略了git相关,改用ftp快传)

    d) 在pom.xml指定<dockerHost>http://192.168.1.103:2376</dockerHost>来关联编译时的docker,不过需要开启关联docker的远程访问权限,因为docker的2376端口默认只支持本地使用。
1、将代码cope到虚拟机中编译
    笔者通过Xftp上传代码
    


2、进入到项目根路径(pom.xml文件所在路径)


3、执行编译
    mvn docker:build



4、查看镜像
    
docker images


5、运行容器docker run -d -p 8083:8080 com.wy/springboot-docker:0.0.1-SNAPSHOT可以通过 docker ps 查看正在运行的容器



测试OK!



至此第一个springboot web应用成功通过maven编译成docker镜像,并docker容器化运行。
本文不再阐述docker push相关推入docker registry的操作,仅仅pom.xml是新增docker registry地址配置。小伙伴们可以通过百度自行操作。(如出现server gave HTTP response to HTTPS client,是因为  docker registry 未采用https服务,而客户端docker使用https请求push所致,可以参照笔者前篇文章《centos 7 下 docker registry push 提示“server gave HTTP response to HTTPS client”》
Ps:若有不足之处或错误之处,还盼各位大佬批评指正。不甚感激。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker springboot maven