1.准备
1.1说明:本文为啥选择虚拟化产品选择VMware?
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-enp0s3BOOTPROTO=staticIPADDR="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地址

解决办法:
修改网卡加入的mac地址这一项配置:HWADDR=xx:xx:xx:xx:xx.....
HWADDR的值填写是虚拟机的设置中的网卡适配器的高级中的mac的值

修改之后然后重启网卡。
systemctl restart network或service network restart2.安装docker(docker的版本是20.10.5,低于20.x的会有问题)
通过 uname -r 命令查看你当前的内核版本uname -r
sudo yum update2.3卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker docker-common docker-selinux docker-engine或者删除docker所在路径下的文件:
rm -rf /etc/systemd/system/docker.service.drm -rf /var/lib/dockerrm -rf /var/run/docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo注意修改镜像源 国外镜像一般很难访问,建议配置阿里云镜像。
yum list docker-ce --showduplicates | sort -rsudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版sudo yum install# 例如:sudo yum install docker-ce-17.12.0.ce 这个是安装指定版本额docker
sudo systemctl start dockersudo systemctl enable docker
docker version3.0更新远程仓库镜像。这里推荐阿里云的镜像加速服务(免费)

配置阿里云镜像加速地址:
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://yxd55mop.mirror.aliyuncs.com"]}EOF
重新启动docker的后台进程服务和重启docker:
sudo systemctl daemon-reloadsudo systemctl restart docker
可能遇到的问题:由于之前有过安装卸载不干净导致报错如下:
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_64file /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_64file /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_64file /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
重新执行2.3卸载旧版本然后从在重新从头安装
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版本。
<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.0modelVersion><parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.4.0version><relativePath/>parent><groupId>com.bigfeigroupId><artifactId>springbootdemo1artifactId><version>0.0.1-SNAPSHOTversion><name>springbootdemo1name><description>Demo project for Spring Bootdescription><properties><project.build.sourceEncoding>UTF-8project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding><java.version>1.8java.version><docker.image.prefix>bigfeidocker.image.prefix>properties><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.projectlombokgroupId><artifactId>lombokartifactId><optional>trueoptional>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope>dependency>dependencies><build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId><configuration><layers><enabled>trueenabled>layers>configuration>plugin><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-surefire-pluginartifactId><configuration><skipTests>trueskipTests>configuration>plugin><plugin><groupId>com.spotifygroupId><artifactId>docker-maven-pluginartifactId><version>1.0.0version><executions><execution><id>build-imageid><phase>packagephase><goals><goal>buildgoal>goals>execution>executions><configuration><imageName>${docker.image.prefix}/${project.artifactId}imageName><imageTags><imageTag>${project.version}imageTag>imageTags><dockerDirectory>${project.basedir}dockerDirectory><dockerHost>http://ip:2375dockerHost><resources><resource><targetPath>/targetPath><directory>${project.build.directory}directory><include>${project.build.finalName}.jarinclude>resource>resources>configuration>plugin>plugins>build>project>

这个是自己构建的jre的最小的基础镜像,版本是:jre_1.8.0_27,这是上面4中的构建的


然后点击如下的地方:

然后项目构建完成之后插件自动打包为docker镜像推送到我们的虚拟机上。
5.4构建成功的镜像在虚拟机上如下图所示:

[root@anget ~]# docker history bigfei/springbootdemo1IMAGE CREATED CREATED BY SIZE COMMENT0f374a0ca137 38 minutes ago /bin/sh -c #(nop) ENTRYPOINT ["java" "org.s… 0B1192c43712be 38 minutes ago /bin/sh -c #(nop) COPY dir:71ddaaf24fa82febc… 9.56kBeff11cdff5fb 38 minutes ago /bin/sh -c #(nop) COPY dir:8b993266a653e9e77… 0B4bcdd32807c6 38 minutes ago /bin/sh -c #(nop) COPY dir:784cdbb0ecd9bcde6… 241kBe8e521fd756b 38 minutes ago /bin/sh -c #(nop) COPY dir:bdd49230a3d3c47aa… 18.7MB195d28054b00 38 minutes ago /bin/sh -c #(nop) WORKDIR /application 0B41515c6060cd 2 days ago /bin/sh -c #(nop) WORKDIR /data 0Bcb7477a85550 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0Bc25326726a56 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0Bc47f42fe6057 2 days ago /bin/sh -c #(nop) ENV LANG=en_US.UTF-8 LANG… 0B1aa6d085e809 2 days ago /bin/sh -c #(nop) ENV TZ=Asia/Shanghai 0B7c2359f0bc8c 2 days ago /bin/sh -c #(nop) ADD file:68dc3e1e457a2554e… 120MBeeaa45127de5 2 days ago /bin/sh -c /bin/sh -c cat locale.md | xargs … 0B6604cf8c6140 2 days ago /bin/sh -c #(nop) COPY file:85dd734b07b0754c… 152B2eb1c1325485 2 days ago /bin/sh -c apk --no-cache add ca-certificate… 16MB38f421b8ec41 2 days ago /bin/sh -c apk add --update --no-cache t… 1.5MBa1451e2257cb 2 days ago apk add bash-completion 1.08MB8b95bfd1cb2d 2 days ago apk add bash-doc 1.96MB2df67c66c7fc 2 days ago apk add bash 3.57MB2d3e871c5584 2 days ago apk add wget 498kBc7672f001f9d 2 days ago apk add curl 3.38MB4345f158b74a 2 days ago apk update 1.1MBae49269e8c5b 2 days ago /bin/sh -c echo "https://mirrors.aliyun.com/… 95Bea3bcbcbd826 2 days ago /bin/sh -c echo "https://mirrors.aliyun.com/… 45B4e19824f8504 2 days ago /bin/sh -c #(nop) MAINTAINER BigFei<2514207… 0Ba24bb4013296 10 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B<missing> 10 months ago /bin/sh -c #(nop) ADD file:c92c248239f8c7b9b… 5.57MB
[][{: ,: [,],"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运行镜像,进入容器中查看目录结构:
[root@anget ~]# docker run -itd bigfei/springbootdemo1311c0046bc52bc90db2bd237a71a6a7ed61940d02237da1bb0378e8b3066e2d8[root@anget ~]# docker exec -it 311c0046bc52bc9 /bin/bashbash-4.3# lsBOOT-INF META-INF orgbash-4.3# pwd/applicationbash-4.3# lsBOOT-INF META-INF orgbash-4.3# cd BOOT-INF/bash-4.3# lsclasses classpath.idx layers.idx libbash-4.3# cd classes/bash-4.3# lsapplication.properties combash-4.3# cd ..bash-4.3# lsclasses classpath.idx layers.idx libbash-4.3# cd lib/bash-4.3# lsjackson-annotations-2.11.3.jar snakeyaml-1.27.jarjackson-core-2.11.3.jar spring-aop-5.3.1.jarjackson-databind-2.11.3.jar spring-beans-5.3.1.jarjackson-datatype-jdk8-2.11.3.jar spring-boot-2.4.0.jarjackson-datatype-jsr310-2.11.3.jar spring-boot-autoconfigure-2.4.0.jarjackson-module-parameter-names-2.11.3.jar spring-boot-jarmode-layertools-2.4.0.jarjakarta.annotation-api-1.3.5.jar spring-context-5.3.1.jarjakarta.el-3.0.3.jar spring-core-5.3.1.jarjul-to-slf4j-1.7.30.jar spring-expression-5.3.1.jarlog4j-api-2.13.3.jar spring-jcl-5.3.1.jarlog4j-to-slf4j-2.13.3.jar spring-web-5.3.1.jarlogback-classic-1.2.3.jar spring-webmvc-5.3.1.jarlogback-core-1.2.3.jar tomcat-embed-core-9.0.39.jarlombok-1.18.16.jar tomcat-embed-websocket-9.0.39.jarslf4j-api-1.7.30.jarbash-4.3#
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: default2021-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 WebApplicationContext2021-03-26 23:40:31.806 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 790 ms2021-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.总结:
参看:
https://www.imooc.com/article/305555
https://blog.csdn.net/ttzommed/article/details/106759670
https://blog.csdn.net/boling_cavalry/article/details/106597358