docker-compose(二):SpringBoot + Docker Compose

docker-compose部署nacos集群 为了方便快速一点,下面的配置先在第一个节点配置完毕,然后把目录直接通过ssh链接工具,复制到其他节点的相同路径下,然后再通过docker-compose各自启动各自的.yml,就完事,你懂我意思吧 目录结构 目录说明 init.d/custom.properties - 官方提供的自选功能配置文件,Nacos节点均包含此目录 nacos-1/docker-compose-nacos1.yml - 第一个Nacos节点的Docker-compose配置文件 nacos-2/docker-comp 阅读详情

原文地址:http://www.linzichen.cn/article/1597479427321626624

在上篇 docker-compose(一):SpringBoot + Docker 案例 一文中,通过一个简单的 SpringBoot 项目整合了基于容器运行的 mysql 和 redis,并通过 nginx 做了接口的代理转发。在运维方面,其实是存在几个痛点的:

  • 容器启动的先后顺序要求固定,SpringBoot 容器启动一定要在其所依赖的容器启动完成后,方可启动。
  • 多个容器,需要执行多条 run 命令。
  • 作为一个整体项目,各个容器之间没有被统一编排,统一管理。

针对以上问题,我们可以使用 Docker 官方的开源项目 docker compose 来实现对 Docker 容器集群的快速编排。

简介

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

其代码目前在 https://github.com/docker/compose 上开源。

Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

安装卸载

官方下载地址:https://docs.docker.com/compose/install/

在官方页面中,我们选择安装独立版本的 docker compose【Install the Compose standalone】

install.png

第一步:

根据页面上的链接进行安装,但是国内访问 github 速度超慢,可以用以下地址来替代:

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

第二步:

开放权限

chmod +x /usr/local/bin/docker-compose

第三步:

查看版本

[root@localhost /]# docker-compose version
Docker Compose version v2.12.2

卸载:

如果使用上述方式安装的,那么卸载命令为

 rm /usr/local/bin/docker-compose

使用 Docker compose 发布 SpringBoot

1. 准备镜像

在使用 docker compose 之前,我们需要先把项目中依赖的镜像下载下来。

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        1.22      404359394820   13 days ago     142MB
redis        6.0       5e9f874f2d50   11 months ago   112MB
mysql        5.7       c20987f18b13   11 months ago   448MB

2. 编写 docker-compose.yml

最终我们需要有三个文件:

  • SpringBoot 的 jar 文件
  • Dockerfile 文件
  • docker-compose.yml 文件

所以我们在服务器 /mydocker/app 中存放这三个文件。

docker-compose.yml:

version: "3"

services:
  # 给SpringBoot起一个自定义的服务名
  myappService:
    # 将来 Dockerfile 构建的镜像名及版本号
    image: myapp:1.2
    # 指定容器名称
    container_name: myapp
    # 开放端口
    ports:
      - "12311:12311"
    # 配置容器连接的自定义网络,跟mysql、redis 属于同一个网络
    networks:
      - app_net
    # 容器启动时依赖于以下服务
    depends_on:
      - redisServer
      - mysqlServer
  # mysql服务
  mysqlServer:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - /mydocker/mysql/data:/var/lib/mysql
      - /mydocker/mysql/conf.d:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    networks:
      - app_net
  # redis 服务
  redisServer:
    image: redis:6.0
    ports:
      - "6379:6379"
    volumes:
      - /mydocker/redis/data:/data
      - /mydocker/redis/redis.conf:/usr/local/etc/redis/redis.conf
    networks:
      - app_net
    command: redis-server
  # nginx 服务
  nginxServer:
    image: nginx:1.22
    volumes:
      - /mydocker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /mydocker/nginx/default.conf:/etc/nginx/conf.d/default.conf
      - /mydocker/nginx/html:/usr/share/nginx/html
    ports:
      - "80:80"
    networks:
      - app_net
networks:
  app_net:

3. 修改application.yml

在 docker-compose.yml 中定义了 mysqlServer和redisServer,所以配置文件中服务地址不再写对应的ip了,而是改成服务名。

server:
  port: 12311
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://mysqlServer/db_docker?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
    username: root
    password: root
  redis:
    host: redisServer
    port: 6379

4.编写 Dockerfile

# 基于java8
FROM openjdk:8
# 创建容器的工作目录
WORKDIR /app
# 将jar包添加到容器中,并改命为 demo.jar
ADD spring-docker-compose-0.0.1-SNAPSHOT.jar /app/myapp.jar
# 暴露端口
EXPOSE 12311
# 运行jar包
ENTRYPOINT ["java", "-jar"]
CMD ["myapp.jar"]

5.上传服务器

将 SpringBoot 打成jar,然后上传至服务器,需要保证 jar包、Dockerfile、docker-compose.yml 在同一个目录下。这里上传到 /mydocker/app 目录下:

[root@localhost /]# cd /mydocker/app
[root@localhost app]# ll
总用量 27800
-rw-r--r--. 1 root root     1362 12月  5 16:13 docker-compose.yml
-rw-r--r--. 1 root root      284 11月 23 20:00 Dockerfile
-rw-r--r--. 1 root root 28458970 12月  5 16:16 spring-docker-compose-0.0.1-SNAPSHOT.jar

6.构建SpringBoot 镜像

需要保证构建的镜像名称及版本号,和 docker-compose.yml 中定义的一致。

[root@localhost app]# docker build -t myapp:1.2 .

# 查看镜像是否构建成功
[root@localhost app]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myapp        1.2       e786e60a85aa   9 minutes ago   554MB
nginx        1.22      404359394820   2 weeks ago     142MB
openjdk      8         e24ac15e052e   11 months ago   526MB
redis        6.0       5e9f874f2d50   11 months ago   112MB
mysql        5.7       c20987f18b13   11 months ago   448MB

7.执行docker-compose up

[root@localhost app]# docker-compose up

出现以下日志,就说明命令执行没有问题。

up.png

默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
当通过 Ctrl-C 停止命令时,所有容器将会停止。
如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

8. 查看运行容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED              STATUS              PORTS                                                  NAMES
fa60e0fabf10   myapp:1.2    "java -jar myapp.jar"    About a minute ago   Up About a minute   0.0.0.0:12311->12311/tcp, :::12311->12311/tcp          myapp
002f18d9ba02   redis:6.0    "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              app-redisServer-1
56b831972238   mysql:5.7    "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   app-mysqlServer-1
b9162bf9fb8e   nginx:1.22   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp                      app-nginxServer-1

docker-compose 使用对比

对比.png

通过上面对比图可以发现,在服务不多的情况下,使用 docker-compose 和 不使用区别不大。

但是前者需要多少个服务,就得 docker run 多少次,在服务多或者搭建集群的场景下还是适合用 docker-compose。

docker run 时需要注意服务的启动顺序,比如 启动SpringBoot时需要先启动 mysql 和 redis,而 docker-compose 只需要指定 depends_on 即可。

总体来说,使用 docker-compose 可以将一组应用容器组成一个完整的业务单元,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。当服务器上一个镜像运行了很多个容器后,我们很难搞清哪个容器对应哪个服务,使用 docker-compose 可以一目了然的发现各个容器之间的协作关系,方便运维管理。

Docker Compose一键部署Spring Boot + Vue项目 本文在普通的Docker部署Spring Boot + Vue项目的基础上进行。部署若依前后端分离版项目为例,重点在于如何使用Docker Compose的方式加快项目部署过程。此前使用Docker部署一个Spring Boot + Vue项目,包含了4个容器:MySQLRedisJava后端Nginx前端而稍微复杂的项目,还会有各种各样的其它中间件,需要部署的容器远不止4个。如果还像之前那样手动的逐一部署,就太麻烦了。而Docker Compose就可以帮助我们实现。 阅读详情

相关推荐

docker-compose部署一个springboot项目(包含环境)

docker-compose构建一个含环境的springboot项目,包含redis,mysql,minio

todoitbo的博客 9万+

Docker-compose配置springboot项目

Dokcer-compose配置springboot项目准备环境一、在springboot添加docker插件1.安装docker插件2. 在pom.xml中添加配置二、在项目下创建docker文件1. Dockerfile2.docker-compose.yml三、application.properties配置相应的mysql和redis地址1. mysql2. redis四、 打包jar,下载redis.conf1. 打包2. redis.conf五、 在服务器找个好位置设置yml的那些挂载目录1.总

weixin_50674454的博客 3705

Fofa API高阶玩法:用Python批量获取漏洞资产(含OA系统扫描实战)

本文详细介绍了如何利用Python结合Fofa API实现自动化漏洞资产收集的高阶实战技巧。通过构建健壮的客户端、设计精准查询语法、实现多线程批量采集,并以OA系统漏洞扫描为例,演示了从资产发现、过滤验证到报告生成的全流程,旨在提升安全运维与应急响应的效率。

weixin_28607671的博客 497

Docker Compose--部署SpringBoot项目--实战

本文用实战介绍Docker Compose部署SpringBoot项目。

IT利刃出鞘的博客 2569

E-SMILES:化学信息学中的分子表示革命与应用

分子表示是化学信息学和计算化学的基础技术,其核心是将复杂的分子结构转化为计算机可处理的数字化形式。传统SMILES格式虽然广泛应用,但在处理复杂化学体系时存在局限性。Extended SMILES(E-SMILES)通过扩展语法规则,支持立体化学、配位键等特殊结构的精确描述,显著提升了分子表示的准确性和适用范围。在药物研发中,E-SMILES能准确描述蛋白质-配体相互作用和共价抑制剂;在材料科学领域,它支持纳米材料和超分子体系的多尺度建模。结合机器学习等前沿技术,E-SMILES正在推动化学信息处理效率的革

weixin_28683165的博客 279

Minitab田口设计实战:如何用正交试验优化遗传算法参数(附完整操作步骤)

本文详细介绍了如何利用Minitab田口设计进行遗传算法参数优化,通过正交试验方法显著提升效率。文章涵盖实验设计、Minitab操作步骤、结果分析及高级技巧,帮助工程师快速掌握这一工业级优化技术,实现算法性能的显著提升。

wind6的博客 865

Springboot项目快速部署(二):Idea插件docker工具,结合Docker-Compose一键部署Springboot项目到远程Docker容器

Docker Compose 是一个强大的工具,能够帮助开发者和系统管理员更高效地管理和部署容器化应用。它简化了容器管理过程,使得部署复杂应用变得可预测和自动化。

qq_37941840的博客 2043

Matlab蒙特卡洛模拟二维伊辛模型相变过程

一、什么是伊辛模型 伊辛(Ising)模型是描述磁系统相变最简单的模型,但模型里自旋之间的相互作用赋予了它奇妙的特性,最有趣的就是对称性破缺。这一模型可以被推广用于研究连续的量子相变、基本粒子超弦理论、动力学临界行为等,甚至被认为可以描述深林火灾、交通拥堵、舆论传播等社会经济现象。 如图,每个格点的方向只有向上或向下两者状态,但临近的自旋之间有相互作用,而且点阵可以是一维、二维、三维、甚至更高维...

http://www.icfgblog.com/ 2万+

Docker-Compose(二)Docker-Compose部署SpringBoot+Redis+MySQL+Nginx

1、概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景 2、Docker Compose安装 下载doc

互联网叫兽 2496

【Lane】 Ultra-Fast-Lane-Detection 复现

引言 车道线检测源码复现以及训练自己的数据集 1 环境搭建 conda create -n lane python=3.7 conda activate lane # 激活环境 conda install pytorch torchvision cudatoolkit=10.1 -c pytorch pip install -r requirements.txt 2 下载项目源码 若在服务器上可以用指令下载,否则直接在网址中下载 git clone https://github.com/cfzd/U

qq_44703886的博客 2万+

足球赛事数据API:开发者生存指南(附真实踩坑记录)

作为一个既爱看球又爱写代码的老宅男,我这些年用过的足球API比看过的比赛还多。从最初被各种API文档折磨到怀疑人生,到现在能闭着眼睛调接口,中间的血泪史够写本书了。今天就把这些经验(和教训)分享给各位同好,特别是那些正在为"老板要做个足球App"而秃头的同行们。文档清晰免费层可用响应格式规范API-Sports免费额度大方支持GraphQL有中文文档(难得!Sportmonks数据全面有Webhook支持按需付费。

Happy0970的博客 2191

【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库

【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库

qq_634380940的博客 1692

ROSTCM6软件下载及语义网络分析详细操作教程(附网盘链接)

ROSTCM6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。

m0_64336780的博客 4万+

docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

从零搭建一主二从三哨兵,无坑版,完整版从搭建到整合SpringBoot。redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群。第一个就是我们本次的要搭建的,就是高可用的哨兵,主redis挂掉,哨兵会进行投票进行故障转移!第二个就是分片集群,哨兵的一个缺点就是只能存在一个master节点,写的效率太低。分片集群就是解决哨兵的问题,可以水平扩展,提高redis的性能!哨兵最低配是三哨兵,以奇数递增。分片集群最低配是三主三从。...

小王博客基地 1695

基于Python的新闻聚合与推荐系统:抓取多新闻网站内容并根据用户兴趣进行个性化推荐

本文介绍了如何使用Python构建一个新闻聚合与推荐系统,涵盖了从新闻数据抓取、用户兴趣建模到推荐算法实现的全过程。通过爬虫技术抓取新闻网站内容,使用TF-IDF、Word2Vec等算法进行内容分析,并通过推荐算法向用户推送个性化的新闻,最终帮助用户快速获取自己感兴趣的信息。你可以根据具体需求,进一步扩展和优化系统。例如,加入更多的推荐算法、优化爬虫的抓取效率、增强前端展示的互动性等。通过本文的指导,您应该能够构建一个完整的新闻聚合与推荐系统,并为用户提供个性化的新闻推荐服务。

2201_76125261的博客 1514

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

springboot+docker部署的踩坑

修改docker配置允许远程上传镜像 //修改配置,见图 vi /lib/systemd/system/docker.service //重启docker systemctl daemon-reload sudo service docker restart 修改红框处,端口用户可自由指定 //测试如图即成功 curl 127.0.0.1:2375/version 修改springboot...

Cosmos的博客 735

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

docker-compose 容器挂载权限问题

       项目中遇到docker-compose启动springboot的应用,挂载的日志目录没有权限写入的问题;后来查了很多资料,终于有点眉目了,做个记录,希望遇到的朋友少踩点坑~; 1.问题描述         项目框架是使用jhipster生成的,现在需要把生成的日志挂载出去,以便查看日志记录;首先修改下logback-spring.xml的配置,将系统生成的日志文件都存放在项目的l...

xiaoguangtouqiang的博客 3万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SpringBoot应用原生或docker镜像容器集成Skywalking

应用服务原生或docker镜像容器集成Skywalking。

HOKING的专栏 767

八、springboot 简单优雅的通过docker-compose 构建

前言 这个项目有一段时间没有更新了,不过我可没有偷懒哟,是偷偷准备了一个大招,现在是时候展示啦哈哈。 我们今天要做的,就是将我们的项目通过docker-compose 构建成镜像运行。为什么要这样做呢?比我我前面的这些教程,用到了mysql,如果你们想要运行我的程序,就必须在自己电脑上装mysql 数据库才行,也就是项目用依赖了哪些环境,都必须先将这些环境部署好才能运行项目,那我们要做的,只用安装...

程序员爱酸奶 7798

使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Compose通过简化多容器应用的部署和管理,使得开发人员能够更专注于应用程序的开发和测试。

qq_51321722的博客 2159

Docker使用(八) —docker-compose部署SpringBoot(jar包)

docker-compose部署jar包 docker-compose部署spring-boot包

一恍过去 1万+

使用Docker compose部署SpringBoot项目

我们使用Docker的时候,定义Dockerfile文件,然后使用docker build、docker run等命令操作容器,对Docker不熟悉的可以前往查看中文文档:Docker文档。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率就有点低了。Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compos...

阿靖的博客 2109

使用Docker Compose部署SpringBoot应用

Docker Compose是一个用于定义和运行多个docker容器应用的工具。使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了。 安装 下载Docker Compose: curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-com...

ghostxbh‘s blog 2245
上一篇: docker-compose(一):SpringBoot + Docker 案例
下一篇: 记一次 SpringBoot + Docker 内部容器通信失败问题
Zichen_Lin
博客等级 码龄9年 9粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值