CentOs7.9安装Docker,SpringBoot项目分层构建镜像

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=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地址
要注意的是如果虚拟机是在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.drm -rf /var/lib/dockerrm -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   # 例如:sudo yum install docker-ce-17.12.0.ce 这个是安装指定版本额docker
2.8启动并加入开机启动
 sudo systemctl start dockersudo systemctl enable docker
2.9验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version

3.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_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

   重新执行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版本。


5.1SpringBoot的demo中的pom如下:
<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>
5.2Dockerfile文件编写:

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

5.3Idea的setting的docker插件的配置连接阿里云镜像仓库和一台本地的虚拟机中的docker启

然后点击如下的地方:

然后项目构建完成之后插件自动打包为docker镜像推送到我们的虚拟机上。


5.4构建成功的镜像在虚拟机上如下图所示:


5.4看看镜像的分层信息,执行命令:
 [root@anget ~]# docker history bigfei/springbootdemo1IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT0f374a0ca137   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运行镜像,进入容器中查看目录结构:

[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.总结:

这个小栗子成功的走通之后,通过不断的摸索和实践之后踩了许多坑之后的一点经验总结,但是最重要的一点是这个栗子只能用于学习,构建docker镜像的除外,直接使用idea的docker插件构建镜像推送到生产的docker服务器是不可以的,因为生产环境如果是外网环境就会把服务器的2375端口暴露出来,导致被黑客扫描到该端口,然后也推送一个带有挖矿程序的docker镜像到生产的服务器,然后呢执行了一些黑客的shell脚本之后你的服务器就成了一个挖矿服务或者采用其它的攻击手端来攻击你的服务器,这个是我之前在的一家公司就是采用这个方式推送镜像,结果阿里云的服务器一直在告警,然后找专业的运维在阿里云服务器上一看结果找到了一个恶意的镜像,执行了一个恶意的shell脚本,我还特地的看了下那个shell脚本,老长了,根据shell中的几个ip归属地查询是荷兰和美国所以推测黑客是一个籍贯是荷兰的美国人写的,这个脚本之前我保存了,但是不知道搞哪里了,哪哈找到了可以发出来给大家欣赏下,后面就把那个2375的端口关闭了,把服务器上的恶意镜像给删除了之后才没有被攻击,所以不推荐使用这种方式把动车客人镜像推送到生产的外网服务器,还是得使用jenkins流水线的方式或者是其它的一些构建推送部署的产品和工具。



参看:

https://www.imooc.com/article/305555

https://blog.csdn.net/ttzommed/article/details/106759670

https://blog.csdn.net/boling_cavalry/article/details/106597358


请使用浏览器的分享功能分享到微信等