定制开发小程序SpringBoot整合Docker实现一次构建到处运行

写在前面

🍁个人主页:

✨本期专栏:定制开发小程序欢迎订阅学习~

📌源码获取:、、 定制开发小程序持续更新中,别忘了 star 喔~

定制开发小程序本文讲解的是 SpringBoot 定制开发小程序引入容器化技术 定制开发小程序实现一次构建到处运行,定制开发小程序包括镜像构建、Docker定制开发小程序仓库搭建使用、Docker定制开发小程序仓库可视化UI等内容。

PS:如果你是新手,可以跟着系列专栏的框架搭建先动手把项目搭建起来,然后在结合本期内容继续深入学习,这样会有更好的效果。

目录

一、容器化部署的好处

Docker 作为一种新兴的虚拟化方式,它可以更高效的利用系统资源,不需要进行硬件虚拟以及运行完整操作系统等额外开销。

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

最重要的是一致的运行环境Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而达到真正意义上的 一次构建,到处执行

二、构建镜像

2.1、Dockerfile

接着我们开始使用 Dockerfile 来定制我们的镜像,从而达到容器化的目的。Dockerfile 的本质就是将一系列修改、安装、构建、操作的命令整合到一起,去构建一个个性化的镜像,以达到**一次构建,到处运行。**接下来我们就来构建自定义镜像。

my-project-server模块下创建docker目录,在docker目录下创建Dockerfile。代码如下:

FROM openjdk:8-jreMAINTAINER Micromaple <micromaple@qq.com>RUN mkdir /appCOPY my-project-server-1.0.0-SNAPSHOT.jar /app/app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod,druid-prod"]EXPOSE 8899
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • FROM:指定基础镜像,项目是使用jdk8开发的项目,所以我们指定的基础镜像为openjdk:8-jre
  • MAINTAINER:项目维护人员
  • RUN:执行命令,在根目录下创建app目录
  • COPY:将宿主机当前目录下的my-project-server-1.0.0-SNAPSHOT.jar文件拷贝到app目录下,并重命名为app.jar
  • ENTRYPOINT:指定容器启动程序及参数
  • EXPOSE:指定运行时容器提供服务的端口

2.2、开始构建

在虚拟机创建目录

mkdir -p /usr/local/docker/my-project/docker
  • 1

将打包后的my-project-server-1.0.0-SNAPSHOT.jar文件和Dockerfile文件上传至该目录。

执行镜像构建命令

docker build -t my-project-server:v1 .
  • 1

构建成功

$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmy-project-server   v1                  ed30386b06d2        11 seconds ago      334MBopenjdk             8-jre               26ac3f63d29f        9 months ago        273MB
  • 1
  • 2
  • 3
  • 4

三、搭建私服

3.1、搭建 Docker Registry

创建目录

mkdir -p /usr/local/docker/registry
  • 1

在该目录下创建Docker Registrydocker-compose.yml。内容如下:

cd /usr/local/docker/registry
  • 1
version: '3.1'services:  registry:    image: registry    restart: always    container_name: registry    ports:      - 5000:5000    volumes:      - ./data:/var/lib/registry
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

启动容器

docker-compose up -d
  • 1

3.2、搭建 Docker Registry WebUI

创建目录

mkdir -p /usr/local/docker/docker-registry-frontend
  • 1

在该目录下创建Docker Registrydocker-compose.yml。内容如下:

cd /usr/local/docker/docker-registry-frontend
  • 1
version: '3.1'services:  frontend:    image: konradkleine/docker-registry-frontend:v2    ports:      - 8080:80    volumes:      - ./certs/frontend.crt:/etc/apache2/server.crt:ro      - ./certs/frontend.key:/etc/apache2/server.key:ro    environment:      - ENV_DOCKER_REGISTRY_HOST=192.168.110.158(Docker仓库的IP)      - ENV_DOCKER_REGISTRY_PORT=5000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

需要将ENV_DOCKER_REGISTRY_HOST的值更改为自己搭建的 DockerRegistry 服务的IP

启动容器

docker-compose up -d
  • 1

浏览器访问http://192.168.110.158:8080/,效果如下:

3.3、客户端配置

在需要上传 Docker 镜像的客户端需配置daemon.json,完整路径在 /etc/docker/daemon.json

vi /etc/docker/daemon.json
  • 1

需增加如下内容:

"insecure-registries": [  "Docker仓库的IP:5000"]
  • 1
  • 2
  • 3

完整daemon.json内容:

{  "registry-mirrors": [    "https://xxx.mirror.aliyuncs.com"  ],  "insecure-registries": [    "192.168.110.158:5000"  ]}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • registry-mirrors:为镜像加速地址,这里为我自己申请的加速地址。大家可以自己申请一个,也可以在网上找一个。
  • insecure-registries:Docker仓库的IP。

重新启动服务

systemctl daemon-reloadsystemctl restart docker
  • 1
  • 2

3.4、上传私服

搭建以及配置完成后,需要将我们之前构建的镜像上传至我们自己的Docker仓库。

查看镜像

$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmy-project-server   v1                  6af7d633afb7        5 seconds ago       334MBopenjdk             8-jre               26ac3f63d29f        9 months ago        273MB
  • 1
  • 2
  • 3
  • 4

1)、镜像标记

使用 docker tagmy-project-server:v1 这个镜像标记为 192.168.110.158:5000/my-project-server:v1

192.168.110.158为我的Docker仓库的IP。

格式为:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

命令如下:

docker tag my-project-server:v1 192.168.110.158:5000/my-project-server:v1
  • 1

标记后,查看镜像

$ docker imagesREPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        3 minutes ago       334MBmy-project-server                        v1                  6af7d633afb7        3 minutes ago       334MBopenjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB
  • 1
  • 2
  • 3
  • 4
  • 5

2)、镜像上传

使用 docker push 上传镜像。

$ docker push 192.168.110.158:5000/my-project-serverThe push refers to repository [192.168.110.158:5000/my-project-server]5b9e874b9f9c: Pushed e87c042d22f8: Pushed b4cfcb8385a8: Pushed 2b730cf18c09: Pushed edeaba958753: Pushed 8bf42db0de72: Pushed 31892cc314cb: Pushed 11936051f93b: Pushed v1: digest: sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40 size: 2000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3)、查看镜像

使用 curl 查看 192.168.110.158:5000/v2/_catalog 地址,可以看到上传成功的镜像

$ curl 192.168.110.158:5000/v2/_catalog{"repositories":["my-project-server"]}
  • 1
  • 2

这里我们可以成功的看到我们上传的镜像。

我们也可以在我们刚刚搭建的WebUI上的查看我们的镜像。效果图如下:

4)、验证

此时我们将本地镜像删除,尝试从私有仓库下载这个镜像

先删除已有镜像

docker rmi my-project-server:v1 192.168.110.158:5000/my-project-server:v1
  • 1

下载镜像

docker pull 192.168.110.158:5000/my-project-server:v1
  • 1
$ docker pull 192.168.110.158:5000/my-project-server:v1v1: Pulling from my-project-server0e29546d541c: Already exists 9b829c73b52b: Already exists cb5b7ae36172: Already exists 99ce012bef04: Already exists 22dc2a72d098: Already exists 9c69a57e10d9: Already exists 776f54050ab5: Pull complete 65a83a9a7871: Pull complete Digest: sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40Status: Downloaded newer image for 192.168.110.158:5000/my-project-server:v1192.168.110.158:5000/my-project-server:v1$ docker imagesREPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        15 minutes ago      334MBopenjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

我们可以看到可以正常拉取。

四、容器启动

镜像构建并上传至完成后,可以直接使用Docker Compose来启动容器。实现一次构建到处运行。

创建目录

mkdir -p /usr/local/docker/my-project
  • 1

在该目录下创建Docker Registrydocker-compose.yml。内容如下:

cd /usr/local/docker/my-project
  • 1
version: '3.1'services:  my_project_server:    image: 192.168.110.158:5000/my-project-server:v1    container_name: my-project-server    restart: always    ports:      - 8899:8899    volumes:      - ./logs:/logs    environment:      TZ: Asia/Shanghai
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

启动容器

docker-compose up -d
  • 1

查看容器启动状态

docker ps -a
  • 1

访问查询所有用户接口

http://ip:8899/sys-user/get/all
  • 1

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发