环境及配置

一、前期准备:

    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
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

        


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:2375

这种错误,就是因为编译环境不具备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:若有不足之处或错误之处,还盼各位大佬批评指正。不甚感激。



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐