1.准备
1.1说明:本文为啥选择虚拟化产品选择VMware?
个人习惯VMware比Virtualbox好用,配置也简单,也可以使用在window10环境安装的docker和WSL2(参看上一篇文章:windows10下安装docker且使用wsl2安装双系统并构建最小jre镜像和应用镜像)来构建SpringBoot项目分层构建镜像,只要有docker环境的操作系统或者是虚拟化安装了docker的环境中就可以。
1.2需要提前安装
wm16安装参看:
https://blog.csdn.net/weixin_48375618/article/details/125724469
这篇安装文章的网卡配置是使用nat模式,本文使用的桥接模式,这个点是需要注意的地方
下载CentOS-7-x86_64-DVD-2009.iso的CentOs的iso镜像
下载地址:https://www.centos.org/download/
1.3在vm16上安装centOs7.9请查看如下博客:
https://blog.csdn.net/weixin_43970142/article/details/124020138
需要注意的是:vm的三种网络模式需要了解下:
请参看:https://blog.csdn.net/weixin_52766206/article/details/125954377
1.桥接模式(该模式从宿主机网卡桥接了一块虚拟网卡,该网卡可以跟宿主机网络是通的,如果有多个Linux镜像的操作系统设置了该网卡模式,他们彼此之间是可以通信的,同时宿主机能上网,这个模式下的虚拟机实列也是可以上网的,一般我们选择此网卡模式),该模式下可以设置DHCP(自动分配ip)或者Statis(静态固定ip--静态固定ip的话如果换了宿主机的网络环境需要重新修改该IP,网关或子网掩码之前的Linux实列的网络才可以正常上网,上面的应用才可以不会由于网络问题导致用不了或者出现一些莫名其妙的问题)
2.网络地址转换模式(nat模式请参看如下地址)
请参看:https://blog.csdn.net/weixin_43887596/article/details/122797119
3.主机模式(这个模式虚拟机不能上网,只有前两种模式可以上网)
桥接模式的静态ip网卡配置:
网卡配置如下:
cd /etc/sysconfig/network-scripts/
vi ifcfg-enp0s3加入如下配置
[root@anget network-scripts]# vi ifcfg-enp0s3
BOOTPROTO=static
IPADDR="xxxxx" # 设置的静态IP地址
NETMASK="255.255.255.0" # 子网掩码
GATEWAY="192.168.1.1" # 网关地址
DNS1="8.8.8.8" # DNS服务器
DNS2="114.114.114.114"
HWADDR=xxxxxxxxxx #这里改成自己虚拟机的的mac地址
要注意的是如果虚拟机是在vm中完全克隆的话,会存在克隆机mac地址和启动的mac的地址不一致,导致重启网卡失败:请参看:https://blog.51cto.com/addam/1839518
克隆机就是从其它版本把Linux实列克隆导出,然后在导入,这种操作最容易出这个问题了。
查看网卡启动信息,报如下错误:
解决办法:
修改网卡加入的mac地址这一项配置:HWADDR=xx:xx:xx:xx:xx.....
HWADDR的值填写是虚拟机的设置中的网卡适配器的高级中的mac的值
修改之后然后重启网卡。
systemctl restart network或service network restart
2.安装docker(docker的版本是20.10.5,低于20.x的会有问题)
2.1Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。(如果系统内核版本过低的话就需要升级内核或者重新下载内核版本高于3.10的的Linux的CentOs镜像重新在VM16上安装然后重新开始前面的配置)
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2.2使用 root 权限登录 Centos。确保 yum 包更新到最新。
sudo yum update
2.3卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker docker-common docker-selinux docker-engine
或者删除docker所在路径下的文件:
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
2.4安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.5设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
注意修改镜像源 国外镜像一般很难访问,建议配置阿里云镜像。
2.6可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
2.7安装docker
sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce 这个是安装指定版
2.8启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker
2.9验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
3.0更新远程仓库镜像。这里推荐阿里云的镜像加速服务(免费)
配置阿里云镜像加速地址:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["xxxxxx你自己的阿里云镜像加速地址"]
}
EOF
重新启动docker的后台进程服务和重启docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
可能遇到的问题:由于之前有过安装卸载不干净导致报错如下:
重新执行2.3卸载旧版本然后从在重新从头安装
Transaction check error:
file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
3.升级docker版本
请参看:
https://blog.csdn.net/qq_39629343/article/details/80168084
https://www.runoob.com/docker/centos-docker-install.html
3.1.查找主机上关于Docker的软件包
rpm -qa | grep docker #列出包含docker字段的软件的信息
3.2.使用yum remove卸载软件
# yum remove docker-1.13.1-53.git774336d.el7.centos.x86_64
# yum remove docker-client-1.13.1-53.git774336d.el7.centos.x86_64
# yum remove docker-common-1.13.1-53.git774336d.el7.centos.x86_64
3.3.使用curl升级到最新版
curl -fsSL https://get.docker.com/ | sh
升级后docker版本:
4.最小jre8基础镜像构建:
准备如下文件上传到vm16安装的CentOs7.9的虚拟机实列上:
Dockerfile文件的内容如下:
然后在当前安装了docker环境的CentOs7.9有这个三个文件的路径下文件后缀去除保留内容即可执行如下命令开始构建最小jre8镜像:
docker build -t zlf:zlf_jre_1.8.0_27 .
注意后面有个点:表示当前使用路径下的Dockerfile文件来构建镜像,
如果有多个Dockerfile文件的话可以使用(指定dockerfile文件构建)
docker build -f dockerfile文件的名字 -t zlf:zlf_jre_1.8.0_27 .
5.idea构建分层镜像
遇到的问题:在5这个步骤中都配置好了,然后install报这个错误
所以才会去升级我之前的docker版本。
5.1SpringBoot的demo中的pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bigfei</groupId>
<artifactId>springbootdemo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootdemo1</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>bigfei</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--开启分层编译支持-->
<layers>
<enabled>true</enabled>
</layers>
</configuration>
</plugin>
<!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!--使用docker-maven-plugin插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径 注意:ADD 、 COPY 指令用法一样,唯一不同的是 ADD 支持将归档文件(tar, gzip, bzip2, etc)做提取和解压操作。还有需要注意的是,COPY 指令需要复制的目录一定要放在 Dockerfile 文件的同级目录下。-->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://ip:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
5.2Dockerfile文件编写:
这个是自己构建的jre的最小的基础镜像,版本是:jre_1.8.0_27,这是上面4中的构建的
5.3Idea的setting的docker插件的配置连接阿里云镜像仓库和一台本地的虚拟机中的docker启
然后点击如下的地方:
然后项目构建完成之后插件自动打包为docker镜像推送到我们的虚拟机上。
5.4构建成功的镜像在虚拟机上如下图所示:
准备如下文件上传到vm16安装的CentOs7.9的虚拟机实列上:
5.4看看镜像的分层信息,执行命令:
[root@anget ~]# docker history bigfei/springbootdemo1
IMAGE CREATED CREATED BY SIZE COMMENT
0f374a0ca137 38 minutes ago /bin/sh -c #(nop) ENTRYPOINT ["java" "org.s… 0B
1192c43712be 38 minutes ago /bin/sh -c #(nop) COPY dir:71ddaaf24fa82febc… 9.56kB
eff11cdff5fb 38 minutes ago /bin/sh -c #(nop) COPY dir:8b993266a653e9e77… 0B
4bcdd32807c6 38 minutes ago /bin/sh -c #(nop) COPY dir:784cdbb0ecd9bcde6… 241kB
e8e521fd756b 38 minutes ago /bin/sh -c #(nop) COPY dir:bdd49230a3d3c47aa… 18.7MB
195d28054b00 38 minutes ago /bin/sh -c #(nop) WORKDIR /application 0B
41515c6060cd 2 days ago /bin/sh -c #(nop) WORKDIR /data 0B
cb7477a85550 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B
c25326726a56 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B
c47f42fe6057 2 days ago /bin/sh -c #(nop) ENV LANG=en_US.UTF-8 LANG… 0B
1aa6d085e809 2 days ago /bin/sh -c #(nop) ENV TZ=Asia/Shanghai 0B
7c2359f0bc8c 2 days ago /bin/sh -c #(nop) ADD file:68dc3e1e457a2554e… 120MB
eeaa45127de5 2 days ago /bin/sh -c /bin/sh -c cat locale.md | xargs … 0B
6604cf8c6140 2 days ago /bin/sh -c #(nop) COPY file:85dd734b07b0754c… 152B
2eb1c1325485 2 days ago /bin/sh -c apk --no-cache add ca-certificate… 16MB
38f421b8ec41 2 days ago /bin/sh -c apk add --update --no-cache t… 1.5MB
a1451e2257cb 2 days ago apk add bash-completion 1.08MB
8b95bfd1cb2d 2 days ago apk add bash-doc 1.96MB
2df67c66c7fc 2 days ago apk add bash 3.57MB
2d3e871c5584 2 days ago apk add wget 498kB
c7672f001f9d 2 days ago apk add curl 3.38MB
4345f158b74a 2 days ago apk update 1.1MB
ae49269e8c5b 2 days ago /bin/sh -c echo "https://mirrors.aliyun.com/… 95B
ea3bcbcbd826 2 days ago /bin/sh -c echo "https://mirrors.aliyun.com/… 45B
4e19824f8504 2 days ago /bin/sh -c #(nop) MAINTAINER BigFei<2514207… 0B
a24bb4013296 10 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 10 months ago /bin/sh -c #(nop) ADD file:c92c248239f8c7b9b… 5.57MB
5.5docker inspect :获取容器/镜像的元数据。
[root@anget ~]# docker inspect bigfei/springbootdemo1
[
{
"Id": "sha256:0f374a0ca13788c96798c346424d016fb7992943fd9f7d1a7544a3c201a6717b",
"RepoTags": [
"bigfei/springbootdemo1:0.0.1-SNAPSHOT",
"bigfei/springbootdemo1:latest"
],
"RepoDigests": [],
"Parent": "sha256:1192c43712be37629a5398c5b46c52b09d60d6f6f4af59da33ea46d4fc791330",
"Comment": "",
"Created": "2021-03-26T14:28:40.671866698Z",
"Container": "6a6f7ec8f14beba5b88422661cb5dff247fb662b5a421546ec092557a1561e35",
"ContainerConfig": {
"Hostname": "1310e6ab0461",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/jdk//bin",
"TZ=Asia/Shanghai",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US.UTF-8",
"JAVA_HOME=/usr/local/java/jdk/"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"ENTRYPOINT [\"java\" \"org.springframework.boot.loader.JarLauncher\"]"
],
"Image": "sha256:1192c43712be37629a5398c5b46c52b09d60d6f6f4af59da33ea46d4fc791330",
"Volumes": null,
"WorkingDir": "/application",
"Entrypoint": [
"java",
"org.springframework.boot.loader.JarLauncher"
],
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "20.10.5",
"Author": "",
"Config": {
"Hostname": "1310e6ab0461",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/jdk//bin",
"TZ=Asia/Shanghai",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US.UTF-8",
"JAVA_HOME=/usr/local/java/jdk/"
],
"Cmd": null,
"Image": "sha256:1192c43712be37629a5398c5b46c52b09d60d6f6f4af59da33ea46d4fc791330",
"Volumes": null,
"WorkingDir": "/application",
"Entrypoint": [
"java",
"org.springframework.boot.loader.JarLauncher"
],
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 173307323,
"VirtualSize": 173307323,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/06835fb45b3ed730e554f1a8f42845bde334b2ae1807aa4e1a47483c2755fd1d/diff:/var/lib/docker/overlay2/94c9271506ff916c29efc5c4119ee17deae9d63c75de69974f6088b7796cf792/diff:/var/lib/docker/overlay2/3bece1c1903fb360e95779726301b9b55cee43d8de1ee08689d4973b128e9c10/diff:/var/lib/docker/overlay2/159fb35a91ba03d95fe8d173e9297d3a92e66b9da708359be9fd5f8cd55d9090/diff:/var/lib/docker/overlay2/62789104f5ffec0d21f7a27d5ab08b74d344f4a01ef1271ed35d554ac289e623/diff:/var/lib/docker/overlay2/e05a110f7e534c7d66c808ca64d449963f3727489d5ddb19c79967b563663dae/diff:/var/lib/docker/overlay2/8fc04c7d064fc7ee0ccca43b942d28dc829ebfe5c2f837240b54e1e308fa7065/diff:/var/lib/docker/overlay2/2db0049f4565e01d51e9c2e5e1bb0b3051f4bb9eb6fa43f50ab6d560b58f7915/diff:/var/lib/docker/overlay2/a35cb0655ef0bd6a7c8e2f9571ddf0d8dd0809d763cf272a3877523f699e6a20/diff:/var/lib/docker/overlay2/9ad2e7c8af00ecd3e25dad70ecd9ae0c967a585dd3fcdba30820a93861cf3ec1/diff:/var/lib/docker/overlay2/f0688a09ab91f6699000b2aba763c3b3ca2396a1f6241dfa5c0fd381c4140e45/diff:/var/lib/docker/overlay2/688257b1aeeaab0b36beb6ba2082225812e7568b1b62d0c1bea1103492522aa3/diff:/var/lib/docker/overlay2/b50653e3e314df23a8989992934ad43f284efe7307fa53ffc6c6e79edd6494ac/diff:/var/lib/docker/overlay2/ddc0ed10a3e53b3505cec13d643be7d4a2f2d20d1e92f6ca05d8e290cc082d53/diff:/var/lib/docker/overlay2/ed41311b0c240cc33478ccd496f6c48a12a579780c46ca11d80f62113ea73275/diff:/var/lib/docker/overlay2/3b93a166e54608037affd81ea52a193af3caa3421db416c1587e4439e048e8e0/diff:/var/lib/docker/overlay2/32ba14769741f31c6b20382431ee893249261260c8d4ee2c623250a06b6a8794/diff:/var/lib/docker/overlay2/6e535b558f192dc63893e6f76281c6f56514ca432804ad8692e39859873125b4/diff",
"MergedDir": "/var/lib/docker/overlay2/268ae3d436284651f978b9afefab9598d9d6dca64fb6b34426d7a13031d85138/merged",
"UpperDir": "/var/lib/docker/overlay2/268ae3d436284651f978b9afefab9598d9d6dca64fb6b34426d7a13031d85138/diff",
"WorkDir": "/var/lib/docker/overlay2/268ae3d436284651f978b9afefab9598d9d6dca64fb6b34426d7a13031d85138/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a",
"sha256:7621f8fa1790ccd947cdb34a95f5b307c99454923aca7f98fbacc44cc6037b9f",
"sha256:b8a7a209caadc124c1fd600979a9aed2e8295f8d4ce1508fe568c178bc77718a",
"sha256:ad4eace6af9d16814757a3614aae292f620c6fcdcabbc87f30da51e97fd4ca8e",
"sha256:b15623e2f14a0d8ed8c222d8002de87b73b18b0f4e17d95a93e443d485edb9b2",
"sha256:0c06bbb0c4ac097dfcd4d57e0abfc2e67a60a9ae37ff3a8852645aad2345783e",
"sha256:a81e4849b4f069027240f6476393cea351c1dd73964c28c17f70559e6feb18fc",
"sha256:79c78f5e18204703dd9050f0d4b4d8ab2eaa7e992a845ecffad81a3792bbcd9f",
"sha256:6e9ae47532a2f427dafa5ad14991be0f84fea0e6d608346427e3001f524043f3",
"sha256:df974d33352ed5018e4fa021b076190b44d5418211bd6ae265801f7c4a56b16f",
"sha256:df9cd36ec09f3e09f7eebf8276be77cc323eaad251c39d77fd7e2205e1f3d345",
"sha256:d6e5c626a02c447b46df755a3c63f1a08118232845f4949321909f15ea17f83a",
"sha256:b56f1bd552f6c8004c0a3b06fae56a535bfae06d23533552967dbae3fdb02a54",
"sha256:fdcc6feb1ac8a52844769f662c320bb5678ba77d18b64f28fa8a34e7d29b9281",
"sha256:97edc0f9209ad49717351825db43fc0275a33d690fd275c8b5d42507d4381394",
"sha256:1d650622fcdeceb217ba8f9247dd2bbba4981cdf671faa7ee58791ccb79afc1e",
"sha256:0ba5afa482af714e5f011687b0b63bafbaf4d245542cecdd3ec216aaed036121",
"sha256:d704f7feb7688cb36569771fccba18928a443cb1804023e881cdf96fae4370b8",
"sha256:a611d2d2403891a653bc30469601d9e083bcc05206ca36f4387ae84d0c3fc796"
]
},
"Metadata": {
"LastTagTime": "2021-03-26T22:28:40.703423871+08:00"
}
}
]
5.6运行镜像,进入容器中查看目录结构:
5.7查看demo容器的启动信息:
查看docker镜像的启动日志如下,成功启动,如果要在本机的浏览器上访问的话需要开通虚拟机的8081端口,或者启动容器指定端口映射到一个防火墙开放的端口,即可访问到容器中的应用
[root@anget ~]# docker logs 311c0046bc52bc9
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0)
2021-03-26 23:40:30.947 INFO 1 --- [ main] c.b.s.Springbootdemo1Application : Starting Springbootdemo1Application v0.0.1-SNAPSHOT using Java 1.8.0_271 on 311c0046bc52 with PID 1 (/application/BOOT-INF/classes started by root in /application)
2021-03-26 23:40:30.952 INFO 1 --- [ main] c.b.s.Springbootdemo1Application : No active profile set, falling back to default profiles: default
2021-03-26 23:40:31.759 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2021-03-26 23:40:31.767 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-03-26 23:40:31.767 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
2021-03-26 23:40:31.806 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-03-26 23:40:31.806 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 790 ms
2021-03-26 23:40:31.960 INFO 1 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-26 23:40:32.120 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
2021-03-26 23:40:32.133 INFO 1 --- [ main] c.b.s.Springbootdemo1Application : Started Springbootdemo1Application in 1.533 seconds (JVM running for 1.834)
6.推送镜像
然后就可以推送自己构建好的最小jre8镜像和springBoot分层镜像到自己的仓库了。
7.总结:
这个小栗子成功的走通之后,通过不断的摸索和实践之后踩了许多坑之后的一点经验总结,但是最重要的一点是这个栗子只能用于学习,构建docker镜像的除外,直接使用idea的docker插件构建镜像推送到生产的docker服务器是不可以的,因为生产环境如果是外网环境就会把服务器的2375端口暴露出来,导致被黑客扫描到该端口,然后也推送一个带有挖矿程序的docker镜像到生产的服务器,然后呢执行了一些黑客的shell脚本之后你的服务器就成了一个挖矿服务或者采用其它的攻击手端来攻击你的服务器,这个是我之前在的一家公司就是采用这个方式推送镜像,结果阿里云的服务器一直在告警,然后找专业的运维在阿里云服务器上一看结果找到了一个恶意的镜像,执行了一个恶意的shell脚本,我还特地的看了下那个shell脚本,老长了,根据shell中的几个ip归属地查询是荷兰和美国所以推测黑客是一个籍贯是荷兰的美国人写的,这个脚本之前我保存了,但是不知道搞哪里了,哪哈找到了可以发出来给大家欣赏下,后面就把那个2375的端口关闭了,把服务器上的恶意镜像给删除了之后才没有被攻击,所以不推荐使用这种方式把动车客人镜像推送到生产的外网服务器,还是得使用jenkins流水线的方式或者是其它的一些构建推送部署的产品和工具。