SpringBoot + Docker 实现一次构建到处运行

共 8530字,需浏览 18分钟

 ·

2023-08-09 13:47









1





容器化部署的好处








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






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






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









2





构建镜像








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文件上传至该目录。

















执行镜像构建命令




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





搭建私服








3.1、搭建 Docker Registry






创建目录






mkdir -p /usr/local/docker/registry







在该目录下创建Docker Registry 的 docker-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 Registry 的 docker-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/,效果如下:
















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 tag 将 my-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上可视化的查看我们的镜像。效果图如下:














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










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









4





容器启动






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






创建目录






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





在该目录下创建Docker Registry 的 docker-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










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







浏览 186
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报