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

环境及配置

一、前期准备:

    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的文件后面数字时随机的,每个人可能不同,要选择自己的文件,而不是新建


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

        c)将ONBOOT = no 改为ONBOOT = yes

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

        d)    重启网络并获取ip

           

service network restart
ip addr

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

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


    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
EOF
5、 安装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、maven

yum install  java-1.8.0-openjdk.x86_64
yum install  maven

        

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

2、安装maven-docker-plugin插件

/usr/share/maven/conf
vi settings.xml

新增 com.spotify

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





SpringBoot创建Hello World

一、新建Spring boot web工程

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

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

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

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


二、创建hello world

1、找到Application

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

2、新增controller访问

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

3、

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

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

在Goals中输入 spring-boot:run

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


运行成功

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

访问: localhost:8080

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


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


三、为项目添加


1、在pom.xml中新增docker-maven-plugin编译插件和编译配置

                        
				com.spotify
				docker-maven-plugin
				1.0.0
				
				${project.groupId}/${project.artifactId}:${project.version} 
				${project.build.outputDirectory}
					
						
							${project.build.directory}
							${project.build.finalName}.jar
						
					
				
                        


2、在resources下新建Dockerfile

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


3、Dockerfile内容为:

FROM java
MAINTAINER "Yuan Wang"
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:2375

这种错误,就是因为编译环境不具备docker导致,很多人是在windows下开发,而windows上不存在docker,docker实际在虚拟机中装着,故而导致该错误,如果要解决,有如下几个方案:

    a)windows安装docker(不建议,windows上docker的兼容性笔者不做评价)

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

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

    d) 在pom.xml指定http://192.168.1.103:2376来关联编译时的docker,不过需要开启关联docker的远程访问权限,因为docker的2376端口默认只支持本地使用。

1、将代码cope到虚拟机中编译

    笔者通过Xftp上传代码

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

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

3、执行编译

    mvn docker:build

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


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镜像并容器化运行_第19张图片


至此第一个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)