第一个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))
环境及配置
一、前期准备:
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
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上传代码
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:若有不足之处或错误之处,还盼各位大佬批评指正。不甚感激。
更多推荐
所有评论(0)