【docker系列】docker实战之部署SpringBoot项目

这篇具有很好参考价值的文章主要介绍了【docker系列】docker实战之部署SpringBoot项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
【docker系列】docker实战之部署SpringBoot项目,s10 分布式,docker,spring boot,容器

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一.背景介绍

1.什么是 docker?

Docker 是一种开源的容器化平台,可以将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何支持 Docker 的服务器上。

Docker 的架构由三个主要组件组成:Docker 客户端、Docker 守护进程和 Docker 镜像。

Docker 客户端用于与 Docker 交互,Docker 守护进程负责管理和监控 Docker 的运行,Docker 镜像是一个只读的模板,包含了运行容器所需的文件系统和依赖项。

自从 Docker 发布以来,它迅速获得了广泛的认可和采用。Docker 在不到一年的时间内就实现了 100 万次的下载,并吸引了来自全球各地的开发人员和企业的关注。Docker 的应用场景包括:应用程序的开发、测试和部署、多租户环境下的应用程序隔离、快速搭建开发环境、微服务架构等。

2.docker 的优点?

Docker 的优点如下:

  1. 快速部署:Docker 可以帮助快速部署应用程序,并使其能够在多种环境中运行。您可以将应用程序和它的依赖项打包成容器,并轻松地将其部署到任何支持 Docker 的平台上。
  2. 环境一致性:Docker 可以确保应用程序在不同的环境中运行时具有相同的行为。这是因为 Docker 容器包含了应用程序及其依赖项,因此可以在任何地方运行。
  3. 资源隔离:Docker 可以隔离应用程序及其依赖项,从而确保它们不会干扰其他应用程序或系统组件。这种隔离可以帮助提高应用程序的安全性和可靠性。
  4. 更高的效率:Docker 可以帮助提高应用程序的效率,因为它可以在容器中运行多个应用程序实例,从而最大化利用系统资源。5. 更轻量级:Docker 容器比传统的虚拟机更轻量级,因为它们共享主机操作系统的内核。这意味着 Docker 容器可以更快地启动和停止,并且需要更少的系统资源。

3.部署基本步骤?

以下是 Docker 部署 Spring Boot 项目的基本步骤:

  1. 在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件。
  2. 在 Dockerfile 中编写 Docker 镜像的构建指令,例如:
    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD target/demo.jar app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
    其中,FROM 指令指定了使用的基础镜像,VOLUME 指令指定了挂载点,ADD 指令将 Spring Boot 项目的 jar 包添加到镜像中,ENTRYPOINT 指令指定了容器启动时执行的命令。
  3. 在 Spring Boot 项目的根目录下执行以下命令,将 Spring Boot 项目打包成 jar 包:
    mvn clean package
    
  4. 在 Spring Boot 项目的根目录下执行以下命令,使用 Dockerfile 构建 Docker 镜像:
    docker build -t demo .
    
    其中,-t 指令指定了镜像的名称,"."表示 Dockerfile 所在的当前目录。
  5. 在 Docker 中启动容器:
    docker run -p 8080:8080 demo
    
    其中,-p 指令指定了容器端口和主机端口的映射关系,demo 是镜像的名称。

二.部署方式 1

1.说明

  1. 方式 1 是通过在本地打镜像
  2. 上传镜像到仓库
  3. 登录服务器
  4. 拉取镜像
  5. 启动容器
  6. 方式 1 比方式 2 更加稳健规范

2.Dockerfile

FROM openjdk:8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

WORKDIR /home
USER root

ENV PROFILE="dev"
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8

ENV PARAMS=""

COPY /target/*.jar /home/app.jar

EXPOSE 80

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN echo -e 'mkdir -p ./logs/gc && java $JAVA_OPTS -jar ./app.jar --spring.profiles.active=$PROFILE $PARAMS' > entrypoint.sh

ENTRYPOINT ["sh", "entrypoint.sh"]

3.打镜像

以下脚本写在 push.sh 中,主要是编译打包,打镜像,推送到远程仓库。

#!/usr/bin/env bash

#版本
VERSION=latest

mvn clean package -P test
export DOCKER_SCAN_SUGGEST=false

docker build -t xxx-xxx-xxx-xxx-kwan:$VERSION .
docker tag xxx-xxx-xxx-xxx-kwan:$VERSION deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:$VERSION
docker push deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:$VERSION
docker rmi xxx-xxx-xxx-xxx-kwan:$VERSION deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:$VERSION
#打包时间
echo "打包时间为="$(date +%F%n%T)

4.启动脚本

#!/usr/bin/env bash

#设置容器名称
CONTAINER_NAME=xxx-xxx-xxx-xxx-kwan

#镜像位置与名称
IMAGE_NAME=deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:latest

#删除容器
docker rm -f ${CONTAINER_NAME}

#删除镜像
docker rmi ${IMAGE_NAME}

#拉取镜像
docker pull ${IMAGE_NAME}

#启动容器
docker run -d --name ${CONTAINER_NAME} --privileged=true  -e PROFILE=test -w /home -p 8888:80 \
 -v $PWD/logs:/home/logs -v /home/uploads:/home/uploads --restart=always ${IMAGE_NAME}
docker logs -f  --tail 500  ${CONTAINER_NAME}

三.部署方式 2

1.说明

部署方式 2 的方式其实是省去了部署方式 1 的仓库,通过 git 进行本地代码和服务器代码的同步。

  1. 本地提交代码到 gitlab
  2. 登录服务器,并到达指定 gitlab 仓库的目录
  3. git pull 拉取代码
  4. 通过 maven 打包
  5. 根据 Dockerfile 对打的包进行构建镜像
  6. 根据镜像启动容器
  7. 通过 docker 完成后端项目部署

2.项目路径

/kwan/chatbot-vue/end/vue-springboot-kwan/

3.服务器脚本

#!/bin/bash

#进入项目目录
cd /kwan/chatbot-vue/end/vue-springboot-kwan/

#拉取最新代码
git pull

#maven打包
mvn package -Dmaven.test.skip=true

#移动jar包到指定目录
yes | mv /kwan/chatbot-vue/end/vue-springboot-kwan/target/vue-springboot-kwan-0.0.1-SNAPSHOT.jar /kwan/chatbot-vue/end

#到达指定目录
cd /kwan/chatbot-vue/end

#构建镜像
docker build -t chatbox-vue-8888 .

#删除镜像
docker rm -f chatbox-vue-8888

#启动容器
docker run -d -p 8888:80 --restart=always --name chatbox-vue-8888 -v /kwan/img:/kwan/img chatbox-vue-8888

4.Dockerfile

Dockerfile 所在位置为/kwan/chatbot-vue/end 目录下

FROM openjdk:8
VOLUME /tmp
ENV TZ=Asia/Shanghai
ADD vue-springboot-kwan-0.0.1-SNAPSHOT.jar  app.jar
EXPOSE 80
ENTRYPOINT ["java","-jar","/app.jar"]

5.注意事项

  • 注意 Dockerfile 要和 jar 包在同一目录
  • git pull 不定期需要密码
  • 注意指定容器时区
  • 存在上传下载文件时需要指定文件挂载目录

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

【docker系列】docker实战之部署SpringBoot项目,s10 分布式,docker,spring boot,容器文章来源地址https://www.toymoban.com/news/detail-751863.html

到了这里,关于【docker系列】docker实战之部署SpringBoot项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【部署实战篇】

    安装docker: https://blog.csdn.net/qq_39900031/article/details/121666892 springboot-vue前后端分离项目:https://gitee.com/ma-haojie/springboot-vue-demo.git https://jackwei.blog.csdn.net/article/details/110227719 或者 --restart=always 参数能够使我们 在重启docker时,自动启动相关容器 。 Docker容器的重启策略如下: no,默认

    2024年02月13日
    浏览(35)
  • Linux系列:从0到1用Docker部署springboot项目

    目录 1.前提条件 2.编写DockerFile镜像文件 3.打包SpringBoot项目  4.通过软件Xftp进行传输(*) 1.点击“文件-新建”​编辑 5.操作远程主机 1.docker构建 2.容器运行  6.容器的关闭和删除 1.前提条件 Linux、docker、xftp的安装、一台可以访问的远程主机 2.编写DockerFile镜像文件 Dockerfile 是

    2024年02月13日
    浏览(33)
  • GreenPlum分布式集群部署实战

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年02月08日
    浏览(35)
  • SpringBoot+AOP+Redission实战分布式锁

    在集群环境下非单体应用存在的问题:JVM锁只能控制本地资源的访问,无法控制多个JVM间的资源访问,所以需要借助第三方中间件来控制整体的资源访问,redis是一个可以实现分布式锁,保证AP的中间件,可以采用setnx命令进行实现,但是在实现细节上也有很多需要注意的点,

    2024年02月14日
    浏览(51)
  • minio分布式集群安装部署实战详细手册

    Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。基于Apache License v2.0开源协议的对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。 其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储

    2024年02月12日
    浏览(30)
  • accelerate 分布式技巧实战--部署ChatGLM-6B(三)

    下载相关文件: 正常情况下,我们使用Chat-GLM需要的显存大于13G,内存没有评估过,但上述的肯定是不够的,16G应该可以。 GPU使用4.9G,内存使用5.5G。 GPU使用9.7G,内存使用5.9G。第一轮输入你好后GPU使用11.2G。 注意,这里我们设置设备映射为balanced,并只使用前两块GPU。显卡

    2024年02月09日
    浏览(27)
  • 中间件系列 - Redis入门到实战(高级篇-分布式缓存)

    学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 Redis持久化 Redis主从 Redis哨兵 Redis分片集群 - 基于Redis集群解决单机R

    2024年02月03日
    浏览(39)
  • Docker部署ZooKeeper分布式协调服务

    1、准备工作 2、创建TEST容器,将conf目录COPY出来,在映射进去,方便后续维护管理! 3、运行容器 4、测试链接zookeeper 正常输出内容:

    2024年02月07日
    浏览(35)
  • 使用 Docker 部署分布式存储系统——Ceph

    最近工作中接触了一个 Python + Flask 的新项目,项目中使用了 Ceph 对象存储服务。遂在开发环境使用 Docker 搭建了一套 Ceph 集群。 Ceph 官方文档 Ceph 是一个开源的分布式存储系统,提供了对象存储、块存储和文件系统三种存储接口。Ceph 将数据存储在逻辑存储池中,使用 CRUSH 分

    2024年04月15日
    浏览(36)
  • 【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪

    点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文主要讨论在Elasticsearch和Kibana安装好合适版本的前提下,继续整合Zipkin。 一般的,它们的工作过程是这样的:Spring Cloud微服务把调用链路的日志发送给Zipkin,Zipkin把数据发

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包