【愚公系列】2023年11月 Java教学课程 201-Docker(Docker-Compose)

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀前言
  • 🚀一、Docker-Compose
    • 🔎1.Docker-Compose
      • 🦋1.1 初识DockerCompose
      • 🦋1.2 安装DockerCompose
      • 🦋1.3 部署微服务集群
        • ☀️1.3.1 compose文件
        • ☀️1.3.2 修改微服务配置
        • ☀️1.3.3 打包
        • ☀️1.3.4 拷贝jar包到部署目录
        • ☀️1.3.5 部署
  • 🚀感谢:给读者的一封信

🚀前言

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以在单个文件中定义多个容器应用程序,然后使用单个命令启动所有容器。Compose 还允许您管理应用程序的配置和数据卷。

Compose 使用一个 YAML 文件来定义组成应用程序的容器、网络和卷。YAML 文件包括每个容器的配置选项,例如要使用的 Docker 映像、要设置的环境变量和要挂载的卷。

一旦您使用 Compose 定义了应用程序,就可以使用 docker-compose up 命令启动所有容器,以及任何必要的网络和卷。Compose 会自动管理容器依赖项,在正确的顺序中启动和停止它们。

Docker Compose 简化了构建和部署多容器 Docker 应用程序的流程。

🚀一、Docker-Compose

🔎1.Docker-Compose

Docker Compose是一个用于定义和运行多个Docker容器应用程序的工具。它允许您在一个文件中描述整个应用程序的组成部分,包括容器、网络、卷以及容器之间的链接和依赖关系。使用Docker Compose,您可以轻松地启动、停止和管理整个应用程序,使得容器化应用程序的部署更加容易和高效。同时,Docker Compose还可以轻松地扩展和升级应用程序,以适应不同的场景和需求。

🦋1.1 初识DockerCompose

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:

version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

上面的Compose文件就描述一个项目,其中包含两个容器:

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录
  • web:一个基于docker build临时构建的镜像容器,映射端口时8090

DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/

其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。

🦋1.2 安装DockerCompose

以下是在 CentOS 上安装 Docker Compose 的步骤:

  1. 首先,确保已经安装 Docker。可以使用以下命令检查 Docker 是否已经安装:
docker --version
  1. 安装 Docker Compose 的前置依赖:
sudo yum install -y curl
  1. 使用以下命令下载 Docker Compose 的二进制文件:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

注意:此处下载的是 Docker Compose 的 1.29.2 版本,可根据需要更改版本号。

  1. 赋予 Docker Compose 二进制文件可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
  1. 使用以下命令检查 Docker Compose 是否已经安装:
docker-compose --version


如果输出了版本号,则说明已经成功安装 Docker Compose。

🦋1.3 部署微服务集群

☀️1.3.1 compose文件

项目cloud-demo文件夹,里面已经编写好了docker-compose文件,而且每个微服务都准备了一个独立的目录:

内容如下:

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
    ports:
      - "3306:3306"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

可以看到,其中包含5个service服务:

  • nacos:作为注册中心和配置中心
    • image: nacos/nacos-server: 基于nacos/nacos-server镜像构建
    • environment:环境变量
      • MODE: standalone:单点模式启动
    • ports:端口映射,这里暴露了8848端口
  • mysql:数据库
    • image: mysql:5.7.25:镜像版本是mysql:5.7.25
    • environment:环境变量
      • MYSQL_ROOT_PASSWORD: 123:设置数据库root账户的密码为123
    • volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
  • userserviceorderservicegateway:都是基于Dockerfile临时构建的

查看mysql目录,可以看到其中已经准备好了cloud_order、cloud_user表:

查看微服务目录,可以看到都包含Dockerfile文件:

内容如下:

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
☀️1.3.2 修改微服务配置

因为微服务将来要部署为docker容器,而容器之间互联不是通过IP地址,而是通过容器名。这里我们将order-service、user-service、gateway服务的mysql、nacos地址都修改为基于容器名的访问。

如下所示:

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
    username: root
    password: 123
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos服务地址
☀️1.3.3 打包

接下来需要将我们的每个微服务都打包。因为之前查看到Dockerfile中的jar包名称都是app.jar,因此我们的每个微服务都需要用这个名称。

可以通过修改pom.xml中的打包名称来实现,每个微服务都需要修改:

<build>
  <!-- 服务打包的最终名称 -->
  <finalName>app</finalName>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

打包后:

☀️1.3.4 拷贝jar包到部署目录

编译打包好的app.jar文件,需要放到Dockerfile的同级目录中。注意:每个微服务的app.jar放到与服务名称对应的目录,别搞错了。

user-service:

order-service:

gateway:

☀️1.3.5 部署

部署:

进入cloud-demo目录,然后运行下面的命令:

docker-compose up -d


部署完成就可以访问网站测试效果

🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年12月14日
下一篇 2023年12月14日

相关推荐