SpringBoot整合Docker实现一次构建到处运行的操作方法

作者:微枫Micromaple 时间:2023-01-23 04:32:14 

写在前面

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

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

一、容器化部署的好处

SpringBoot整合Docker实现一次构建到处运行的操作方法

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

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

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

二、构建镜像

2.1、Dockerfile

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

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

FROM openjdk:8-jre

MAINTAINER Micromaple <micromaple@qq.com>

RUN mkdir /app

COPY my-project-server-1.0.0-SNAPSHOT.jar /app/app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod,druid-prod"]

EXPOSE 8899
  • 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

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

SpringBoot整合Docker实现一次构建到处运行的操作方法

执行镜像构建命令

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

构建成功

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-project-server   v1                  ed30386b06d2        11 seconds ago      334MB
openjdk             8-jre               26ac3f63d29f        9 months ago        273MB

三、搭建 *

3.1、搭建 Docker Registry

创建目录

mkdir -p /usr/local/docker/registry

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

cd /usr/local/docker/registry
version: '3.1'
services:
 registry:
   image: registry
   restart: always
   container_name: registry
   ports:
     - 5000:5000
   volumes:
     - ./data:/var/lib/registry

启动容器

docker-compose up -d

3.2、搭建 Docker Registry WebUI

创建目录

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

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

cd /usr/local/docker/docker-registry-frontend
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

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

启动容器

docker-compose up -d

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

SpringBoot整合Docker实现一次构建到处运行的操作方法

3.3、客户端配置

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

vi /etc/docker/daemon.json

需增加如下内容:

"insecure-registries": [
 "Docker仓库的IP:5000"
]

完整daemon.json内容:

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

  • insecure-registries:Docker仓库的IP。

重新启动服务

systemctl daemon-reload
systemctl restart docker

3.4、上传 *

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

查看镜像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-project-server   v1                  6af7d633afb7        5 seconds ago       334MB
openjdk             8-jre               26ac3f63d29f        9 months ago        273MB

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

标记后,查看镜像

$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        3 minutes ago       334MB
my-project-server                        v1                  6af7d633afb7        3 minutes ago       334MB
openjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB

2)、镜像上传

使用 docker push 上传镜像。

$ docker push 192.168.110.158:5000/my-project-server
The 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

3)、查看镜像

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

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

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

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

SpringBoot整合Docker实现一次构建到处运行的操作方法

4)、验证

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

先删除已有镜像

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

下载镜像

docker pull 192.168.110.158:5000/my-project-server:v1
$ docker pull 192.168.110.158:5000/my-project-server:v1
v1: Pulling from my-project-server
0e29546d541c: 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:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40
Status: Downloaded newer image for 192.168.110.158:5000/my-project-server:v1
192.168.110.158:5000/my-project-server:v1
$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        15 minutes ago      334MB
openjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB

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

四、容器启动

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

创建目录

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

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

cd /usr/local/docker/my-project
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

启动容器

docker-compose up -d

查看容器启动状态

docker ps -a

访问查询所有用户接口

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

SpringBoot整合Docker实现一次构建到处运行的操作方法

来源:https://blog.csdn.net/qq_41779565/article/details/127356651

标签:SpringBoot,整合,Docker
0
投稿

猜你喜欢

  • Java日常练习题,每天进步一点点(55)

    2022-10-13 15:51:03
  • 关于HashMap相同key累加value的问题

    2022-02-13 13:32:18
  • 2022最新Java泛型详解(360度无死角介绍)

    2022-03-08 15:13:42
  • Android 自定义组件卫星菜单的实现

    2023-08-16 21:29:29
  • Android实现背景图片轮播

    2023-09-05 00:16:27
  • 使用linq to xml修改app.config示例(linq读取xml)

    2022-11-22 22:01:28
  • WPF应用启动慢的问题解决

    2021-09-07 23:14:01
  • C#实现读取匿名对象属性值的方法示例总结

    2023-02-02 18:56:03
  • 在IntelliJ IDEA中为自己设计的类库生成JavaDoc的方法示例

    2023-11-25 09:49:02
  • Android开发使用自定义View将圆角矩形绘制在Canvas上的方法

    2021-06-08 01:03:17
  • C#中的try catch finally用法分析

    2021-06-20 18:31:28
  • Android绘制仪表盘指针刻度

    2022-06-17 03:23:07
  • Spring实现动态切换多数据源的解决方案

    2023-05-21 13:07:15
  • MyBatis-Plus拦截器实现数据权限控制的示例

    2022-12-10 05:10:17
  • C#多线程系列之任务基础(一)

    2022-12-09 04:48:22
  • 利用flutter实现炫酷的list

    2022-08-02 01:15:01
  • Android SurfaceView画板操作

    2022-07-10 15:12:23
  • Spring存储与读取Bean对象方法

    2021-11-12 03:35:27
  • Mybatis配置返回为修改影响条数方式

    2021-10-26 12:05:05
  • java并发之原子操作类和非阻塞算法

    2022-04-13 04:39:01
  • asp之家 软件编程 m.aspxhome.com