通过Jib将Springboot应用通过Docker部署
一、安装Docker
1、更新Yum包
yum update
2、卸载旧版本:(如果安装过旧版本的话)
(1)删除软件包
yum remove -y docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate \
docker-selinux docker-engine-selinux docker-engine
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
(2)查看已经安装的docker安装包,列出入校内容
rpm -qa|grep docker
(3)分别删除
yum -y remove docker-ce-cli-18.09.3-3.el7.x86_64
(4)删除docker镜像
rm -rf /var/lib/docker
3、安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
6、安装Docker
默认安装最新版,可以自行选择版本,例如:yum install docker-ce-17.12.1.ce
yum install -y docker-ce
7、启动Docker,然后加入开机启动
如遇到无法启动,请检查是否彻底删除之前的版本
systemctl start docker #启动docker
systemctl enable docker #开机启动docker
8、验证是否安装成功
docker version #查看docker版本号,有client和service两部分表示docker安装启动都成功了
9、运行第一个docker镜像
docker run hello-world #运行第一个docker镜像
10、docker常用命令
更多命令详解,请访问:http://www.docker.org.cn/dockerppt/106.html
docker ps #查看当前正在运行的容器
docker ps -a #查看所有容器的状态
docker start/stop id/name #启动/停止某个容器
docker attach id #进入某个容器(使用exit退出后容器也跟着停止运行)
docker exec -ti id #启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)
docker images #查看本地镜像
docker rm id/name #删除某个容器
docker rmi id/name #删除某个镜像
docker run --name test -ti ubuntu /bin/bash #复制ubuntu容器并且重命名为test且运行,然后以伪终端交互式方式进入容器,运行bash
docker build -t soar/centos:7.1 . #通过当前目录下的Dockerfile创建一个名为soar/centos:7.1的镜像
docker run -d -p 2222:22 --name test soar/centos:7.1 #以镜像soar/centos:7.1创建名为test的容器,并以后台模式运行,并做端口映射到宿主机2222端口,P参数重启容器宿主机端口会发生改变
二、搭建私有仓库
1、下载镜像registry
docker pull registry
2、查看Registry镜像是否pull下来了
docker images
3、运行registry容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
参数说明
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
–name registry:创建容器命名为registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;
详细介绍,请参考:http://www.runoob.com/docker/docker-run-command.html
4、查看是否成功启动registry容器
docker ps
5、测试镜像仓库中所有的镜像
curl http://127.0.0.1:5000/v2/_catalog
三、测试推送和拉取镜像
1、修改下镜像源并重启docker服务
(1)修改daemon.json
vim /etc/docker/daemon.json
修改成以下内容:
{
"registry-mirrors": [ "https://registry.docker-cn.com"]
}
(2)重启docker服务
systemctl restart docker
2、下载busybox镜像
docker pull busybox
查看镜像:
docker images
3、为镜像打标签
docker tag busybox:latest 130.120.3.194:5000/busybox:v1
查看镜像:
docker images
4、上传到镜像服务器
docker push 130.120.3.194:5000/busybox:v1
注意了,这是报错了,需要https的方法才能上传,我们可以修改下daemon.json来解决:
vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries": [ "130.120.3.194:5000"]
}
添加私有镜像服务器的地址,注意书写格式为json,有严格的书写要求,然后重启docker服务:
systemctl restart docker
重新上传到镜像服务器
docker push 130.120.3.194:5000/busybox:v1
5、测试下载镜像
(1)先删除主机上所有的镜像(谨慎操作)
docker rmi -f $(docker images -aq)
(2)查看一下主机上的镜像是否已全部删除
docker images
(3)从registry服务器上下载busybox镜像
docker pull 130.120.3.194:5000/busybox:v1
(4)查看镜像是否下载成功
docker images
6、列出所有镜像
curl http://130.120.3.194:5000/v2/_catalog
7、列出busybox镜像有哪些tag
curl http://130.120.3.194:5000/v2/busybox/tags/list
四、将Springboot应用发布到Docker Registry
1、添加jib插件
在要发布的Springboot应用的pom.xml配置文件上
添加jib-maven-plugin插件
代码如下:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<from>
<image>openjdk:alpine</image>
</from>
<to>
<!--目标镜像registry地址,:前面是发布镜像的名称,:后面是发布的版本号-->
<image>130.120.3.194:5000/hse-protal-web:0.0.1-SNAPSHOT</image>
</to>
<allowInsecureRegistries>true</allowInsecureRegistries>
<container>
<!--指定入口类-->
<mainClass>com.aifa.mins.hse.protal.web.Application</mainClass>
<!--指定运行的参数-->
<environment>
<spring.profiles.active>prod</spring.profiles.active>
</environment>
</container>
</configuration>
<!-- 将jib:build绑定到package命令 ,执行mvn package相当于mvn compile jib:build-->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
Jib插件详细介绍,请访问:
https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin
2、构建发布到registry
执行mvn命令:
mvn compile jib:build
BUILD SUCCESS 表示构建成功
3、查看是否push成功
浏览器输入:
http://130.120.3.194:5000/v2/_catalog
4、查看push的tag版本
浏览器输入:
http://130.120.3.194:5000/v2/hse-protal-web/tags/list
到此,已经将我们的springboot项目push到docker registry上
五、Docker运行工程
1、安装docker
请参考一、安装Docker
2、配置docker
vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries": [ "130.120.3.194:5000"]
}
3、下载docker镜像
(1)执行docker命令:
docker pull 130.120.3.194:5000/hse-protal-web:0.0.1-SNAPSHOT
将hse-protal-web的0.0.1-SNAPSHOT版本下载下来
(2)查看是否下载成功
docker images
4、执行run命令
(1)测试运行
docker run -p 8888:8080 130.120.3.194:5000/hse-protal-web:0.0.1-SNAPSHOT
(2)后台运行
docker run -itd -p 8888:8080 --restart=always --name hse-protal-web 130.120.3.194:5000/hse-protal-web:0.0.1-SNAPSHOT
参数说明
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-p:映射端口;访问宿主机的8888端口就访问到hse-protal-web容器的8080端口;
–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
–name hse-protal-web:创建容器命名为hse-protal-web,可以随便命名;
130.120.3.194:5000/hse-protal-web:0.0.1-SNAPSHOT:这个要运行的镜像;
详细介绍,请参考:http://www.runoob.com/docker/docker-run-command.html
(3)浏览器访问
访问成功~~~