【Docker Compose】Docker Compose 的安装,使用以及实现微服务集群的部署

news2024/9/20 20:32:35

文章目录

  • 前言:Docker 部署存在的问题
  • 一、 初识 Docker Compose
    • 1.1 什么是 Docker Compose
    • 1.2 在 CentOS 上安装 Docker Compose
  • 二、深入了解 Docker Compose 文件
    • 2.1 Docker Compose 文件概述
    • 2.2 Docker Compose 文件详解
    • 2.3 示例:编写 Docker Compose 文件
  • 三、Docker Compose 相关命令
    • 3.1 常用 Docker Compose 命令
    • 3.2 示例:使用 Docker Compose 部署一个简单的 Web 应用
  • 四、使用 Docker Compose 部署微服务集群


前言:Docker 部署存在的问题

在实际应用中,当我们需要部署大量的 Docker 容器时,手动管理这些容器的配置和部署变得非常繁琐。每个容器可能需要不同的参数、端口映射、网络设置等,这导致了管理和维护的复杂性。为了解决这个问题,我们可以借助 Docker Compose 工具,它提供了一种简单、统一的方式来定义和管理多容器的 Docker 应用。

一、 初识 Docker Compose

1.1 什么是 Docker Compose

Docker Compose 是 Docker 公司提供的一个用于定义和运行多容器 Docker 应用程序的工具。通过 Docker Compose,可以使用简单的 YAML 文件来配置整个应用程序的服务、网络、卷等各种参数。这样,我们可以轻松实现一键部署和管理多个 Docker 容器,简化了多容器应用的配置和管理。

1.2 在 CentOS 上安装 Docker Compose

安装 Docker Compose 非常简单,可以按照以下步骤在 CentOS 上安装:

  1. 打开终端,以 root 用户身份登录。

  2. 使用以下命令下载 Docker Compose 的二进制文件:

    sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
  3. 赋予执行权限:

    sudo chmod +x /usr/local/bin/docker-compose
    
  4. 验证安装:

    docker-compose --version
    

    如果安装成功,会显示 Docker Compose 的版本信息。

通过以上步骤,就成功在 CentOS 上安装了 Docker Compose。接下来,我们将深入探索如何使用 Docker Compose 编写和管理多容器的应用程序。

二、深入了解 Docker Compose 文件

2.1 Docker Compose 文件概述

Docker Compose 文件是一个 YAML 文件,用于定义和配置多容器 Docker 应用程序的服务、网络、卷等。通过 Docker Compose 文件,我们可以以声明式的方式描述应用程序的结构和参数,从而简化容器化应用的部署和管理。

一个基本的 Docker Compose 文件通常包括以下几个部分:

  • version: 指定 Compose 文件的版本
  • services: 定义各个服务,每个服务对应一个容器。
  • networks: 定义网络设置。
  • volumes: 定义卷,用于持久化数据。

以下是一个简单的 Docker Compose 文件示例:

version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

networks:
  app_net:

volumes:
  data_vol:

在这个示例中,定义了两个服务 webdb,以及一个网络 app_net 和一个卷 data_vol

2.2 Docker Compose 文件详解

  1. version 指令

version 指令用于指定 Compose 文件的版本。不同的版本可能支持不同的特性和语法。常见的版本有 2, 2.1, 3, 等。根据需要选择适合的版本。

  1. services 指令

services 指令定义了各个服务,每个服务对应一个容器。每个服务可以包括以下一些常见配置项:

  • image: 指定使用的镜像。
  • build: 指定 Dockerfile 的路径,用于构建镜像。
  • ports: 指定端口映射。
  • environment: 指定环境变量。
  • volumes: 指定卷的挂载。

以下是一个服务的示例:

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html

在这个示例中,web 服务使用了 nginx:latest 镜像,将主机的 ./html 目录挂载到容器的 /usr/share/nginx/html 目录,并映射主机的 8080 端口到容器的 80 端口。

  1. networks 指令

networks 指令用于定义网络设置。可以为服务指定特定的网络。以下是一个网络的示例:

networks:
  app_net:

在这个示例中,定义了一个名为 app_net 的网络。

  1. volumes 指令

volumes 指令用于定义卷,用于持久化数据。以下是一个卷的示例:

volumes:
  data_vol:

在这个示例中,定义了一个名为 data_vol 的卷。

2.3 示例:编写 Docker Compose 文件

version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

networks:
  app_net:

volumes:
  data_vol:

在这个示例中,定义了两个服务 webdb,以及一个网络 app_net 和一个卷 data_vol

  • web 服务使用了 nginx:latest 镜像,将主机的 ./html 目录挂载到容器的 /usr/share/nginx/html 目录,并映射主机的 8080 端口到容器的 80 端口。
  • db 服务使用了 mysql:5.7 镜像,并设置了 MySQL 的 root 密码。网络 app_net 和卷 data_vol 分别定义了一个网络和一个卷。

通过这个示例,可以更好地理解 Docker Compose 文件的基本结构和语法。在接下来的学习中,我们将深入了解如何使用 Docker Compose 部署和管理多容器的应用程序。

三、Docker Compose 相关命令

Docker Compose 提供了一系列命令,用于管理多容器的应用程序。下面我们将介绍一些常用的 Docker Compose 命令,帮助更好地使用和管理容器化应用。

3.1 常用 Docker Compose 命令

  1. docker-compose up

启动容器。在项目目录下执行该命令,Compose 将会根据 docker-compose.yml 文件启动相应的服务。如果没有 docker-compose.yml 文件,可以使用 -f 参数指定其他的 Compose 文件。

docker-compose up
  1. docker-compose down

停止并移除容器、网络、卷。在项目目录下执行该命令,Compose 将停止并删除与该项目关联的所有服务。同样可以使用 -f 参数指定其他的 Compose 文件。

docker-compose down
  1. docker-compose ps

列出项目中所有服务的状态。在项目目录下执行该命令,Compose 将列出项目中所有服务的状态,包括运行状态、端口映射等信息。

docker-compose ps
  1. docker-compose logs

显示服务的日志输出。在项目目录下执行该命令,Compose 将显示项目中所有服务的实时日志输出。

docker-compose logs
  1. docker-compose exec

在服务中执行命令。可以使用该命令在指定的服务中执行特定的命令,例如:

docker-compose exec web ls -l

以上是一些常用的 Docker Compose 命令,通过这些命令,我们可以方便地启动、停止、管理多容器的应用程序。

3.2 示例:使用 Docker Compose 部署一个简单的 Web 应用

下面通过一个简单的示例来演示如何使用 Docker Compose 部署一个包含 Web 服务和数据库服务的应用程序。

  1. 编写 Docker Compose 文件

创建一个名为 docker-compose.yml 的文件,并添加以下内容:

version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

在这个示例中,定义了两个服务 webdbweb 服务使用了 nginx:latest 镜像,将主机的 8080 端口映射到容器的 80 端口。db 服务使用了 mysql:5.7 镜像,并设置了 MySQL 的 root 密码。

  1. 启动应用程序

在包含 docker-compose.yml 文件的目录下,执行以下命令启动应用程序:

docker-compose up

Compose 将会启动两个服务,分别运行在两个容器中。web 服务使用 Nginx 提供 Web 服务,db 服务使用 MySQL 提供数据库服务。

  1. 访问 Web 应用

在浏览器中访问 http://宿主机IP:8080,将看到 Nginx 提供的欢迎页面。至此,一个简单的多容器应用程序就成功部署和运行了。

  1. 停止和清理

当不再需要应用程序时,可以执行以下命令停止并清理容器、网络和卷:

docker-compose down

通过这个简单的示例,可以帮助我们如何编写 Docker Compose 文件,以及如何使用 Docker Compose 启动、停止和管理多容器的应用程序。这对于复杂的容器化应用程序管理将会非常实用。

四、使用 Docker Compose 部署微服务集群

目标:使用 Docker Compose 将 cloud-demo 微服务项目集群部署到 Docker 容器中。

  1. 首先创建一个 cloud-demo 的目录,然后在这个目录下分别创建四个文件夹:gatewaymysqlorder-serviceuser-service ,另外创建一个 docker-compose.yml 用于编写 Docker Compose 配置信息。

  1. 编写 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: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

说明:
这是一个 docker-compose.yml 文件,用于定义 Docker Compose 的配置信息,包含了多个服务的定义,每个服务都有特定的配置。

  • nacos 服务使用了 nacos/nacos-server 镜像,设置了环境变量 MODEstandalone,并将容器的 8848 端口映射到主机的 8848 端口。

  • mysql 服务使用了 mysql:5.7.25 镜像,设置了 MySQL 的 root 用户密码为 123,并将两个本地目录挂载到容器内,分别用于存储 MySQL 数据和配置文件。

  • userserviceorderservicegateway 三个服务都使用了各自微服务目录中的 Dockerfile 进行构建。这意味着这三个服务的构建过程需要分别查看各自目录下的 Dockerfile 文件。

  • 对于 gateway 服务,还将容器的 10010 端口映射到主机的 10010 端口。

此文件的作用是描述整个微服务架构中各个服务的配置和依赖关系,通过执行 docker-compose up -d 命令,Docker Compose 将按照这个配置信息创建、启动整个微服务集群。

  1. 修改 cloud-demo 项目中的配置:将 MySQL 数据库、nacos地址,微服务的 IP 地址都命名为docker-compose中的服务名

例如:

  1. 使用maven打包工具,将项目中的每个微服务都打包为app.jar

即将所有微服务中的 build 改为如下形式:

<build>
    <finalName>app</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. 将每个微服务打包好的app.jar拷贝自己对应的目录中,并在自己的目录中创建 Dockerfile文件:

Dockerfile文件内容:

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar

cloud-demo目录结构:

其中,mysql 目录中存放的数据库的配置文件和数据库表文件。

  1. 部署cloud-demo微服务集群

部署的命令:

docker-compose up -d


执行这个命令后,由于当前Docker中没有 Nacos 和 MySQL 镜像,因此首先会拉取这两个镜像。然后才会构建微服务的镜像,最后运行所有镜像。

  1. 查看运行的容器

注意,有可能会因为 Nacos 不是最先启动完成而导致其他服务启动失败,此时可以重启其他微服务来解决:

docker-compose restart gateway userservice orderservice
  1. 通过gateway网关访问微服务集群

访问用户:

访问订单:

此时,我们的微服务集群便通过 Docker Compose 搭建成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1061424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20231005使用ffmpeg旋转MP4视频

20231005使用ffmpeg旋转MP4视频 2023/10/5 12:21 百度搜搜&#xff1a;ffmpeg 旋转90度 https://zhuanlan.zhihu.com/p/637790915 【FFmpeg实战】FFMPEG常用命令行 https://blog.csdn.net/weixin_37515325/article/details/127817057 FFMPEG常用命令行 5.视频旋转 顺时针旋转…

国庆发生的那些事儿------编写了炫酷的HTML动态鼠标特效,超级炫酷酷酷!

文章目录 前言具体操作总结 前言 国庆假期的欢乐&#xff0c;当然少不了编码爱好者&#xff01;假期编写了炫酷的HTML动态鼠标特效&#xff0c;超级炫酷酷酷&#xff01;让你的页面变得更加炫酷&#xff0c;让你的小伙伴们羡慕的大神编码&#xff01;快来看看大神是如何编写的…

IDEA为什么不能搜索到jar里的代码?

参考&#xff1a;https://www.zhihu.com/question/487626575 搜索 jar 源码需要这样&#xff1a; 1、首先需要下载对应的源代码&#xff0c;在 pom.xml 上右键&#xff0c;选择 maven&#xff0c; download sources 2、其次 Ctrl Shift F 或者ctrl shift r&#xff0c;输…

大模型部署手记(1)ChatGLM2+Windows GPU

1.简介&#xff1a; 组织机构&#xff1a;智谱/清华 代码仓&#xff1a;https://github.com/THUDM/ChatGLM2-6B 模型&#xff1a;THUDM/chatglm2-6b 下载&#xff1a;https://huggingface.co/THUDM/chatglm2-6b 镜像下载&#xff1a;https://aliendao.cn/models/THUDM/chat…

ValueError: check_hostname requires server_hostname

使用jupyter 下载js2py 异常 !pip install js2py ValueError: check_hostname requires server_hostname 一开始以为是数据源问题&#xff0c;切换阿里云 还是这个异常 结果发现是开魔法导致的&#xff0c;关闭魔法即可

区别对比表:阿里云轻量服务器和云服务器ECS对照表

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网分享ECS和轻量应用服务器区别对照表&#xff1a; 目录 轻量应用服务器和云服务器ECS区别对照表 轻…

【gitlab】git push -u origin master 报403

问题描述 gitlab版本&#xff1a;14.0.5 虚拟机版本&#xff1a;centos7 项目&#xff1a;renren-fast 原因分析 .git -> config目录下 url配错 但这个url不是手动配置的&#xff0c;还不知道怎么生成。 解决方法 把配置错误的url改成gitlab的project的url 这样&#…

阿里云ECS和轻量服务器有什么区别?

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

这可能是最全的反爬虫及应对方案,再也不怕爬不到数据了

一、什么是反爬虫 网络爬虫&#xff0c;是一个自动提取网页的程序&#xff0c;它为搜索引擎从万维网上下载网页&#xff0c;是搜索引擎的重要组成。但是当网络爬虫被滥用后&#xff0c;互联网上就出现太多同质的东西&#xff0c;原创得不到保护。于是&#xff0c;很多网站开始…

Matlab杂项记录

文章目录 其他do nothing command in matlab代码格式化在同一个m文件中写多个独立的功能函数改变启动时的默认文件夹博文链接 table使用 其他 do nothing command in matlab disp() % Does nothing but allows developer to set a breakpoint here.代码格式化 Matlab编辑器具…

智慧公厕的益处:提升城市环境品质的利器

在现代城市化进程中&#xff0c;智慧公厕作为一种创新的城市设施&#xff0c;受到越来越多城市的关注和青睐。智慧公厕以其创新的设计和高效的管理&#xff0c;为城市环境带来了诸多益处。本文将通过智慧公厕领航厂家广州中期科技有限公司&#xff0c;大量精品案例项目实景&…

人工智能:创新之路

随着时光的推移&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;已然成为现代科技领域的焦点。AI不再是科幻小说或电影的幻想&#xff0c;而是如今社会生活和商业领域的重要一部分。本文将回顾人工智能的发展历程&#xff0c;探讨其现状…

会声会影2024好不好用?有哪些新功能介绍

随着抖音、快手、B站等视频平台的普及&#xff0c;每个人都能成为视频创作者&#xff0c;视频剪辑软件成为自媒体创作的必备工具。一些新入门视频剪辑的小伙伴可能会疑惑&#xff0c;会声会影和PR软件哪个好呢&#xff1f;今天我将从核心功能、稳定性和性价比三个方面&#xff…

扫雷游戏的递归解法

目录 一&#xff0c;题目 二&#xff0c;题目接口 三&#xff0c;解题思路 四&#xff0c;解题代码 一&#xff0c;题目 让我们一起来玩扫雷游戏&#xff01; 给你一个大小为 m x n 二维字符矩阵 board &#xff0c;表示扫雷游戏的盘面&#xff0c;其中&#xff1a; M 代表一…

【多线程编程】创建线程的几种方式 面试题

创建线程的几种方法 继承Thread类&#xff0c;重写run方法。实现Runnable接口&#xff0c;重写run方法 。Thread匿名内部类&#xff0c;重写run方法。Runnable匿名内部类&#xff0c;重写run方法。Threadlambda表达式&#xff0c;不用重写。 1.继承Thread类&#xff0c;重写ru…

windows server 2012 服务器打开系统远程功能

服务器上开启远程功能 进入服务器&#xff0c;选择“添加角色和功能” 需要选择安装的服务器类型&#xff0c;如图所示 然后在服务器池中选择你需要使用的服务器。 选择完成后&#xff0c;在图示列表下勾选“远程桌面服务” 再选择需要安装的功能和角色服务。 选择完成确认内容…

学网络安全真的没有出路吗?

在当前的数字化时代&#xff0c;无论是个人&#xff0c;企业&#xff0c;还是国家&#xff0c;都会面临严重的网络安全威胁。网络安全不仅涉及我们的日常生活&#xff0c;也涉及到社会的稳定和国家的安全。这就需要我们高度重视网络安全&#xff0c;强化个人信息保护&#xff0…

web安全详解(渗透测试基础)

** 文章目录 一、Web基础知识 1.http协议2.网络三种架构及特点3. Web应用的特点4.URL组成6.Http协议的性质7.请求响应报文的格式8.请求方法9.http缓存10.缓存新鲜度如何判断11.Http重定向原理以及状态码12.HTTPS协议 数字证书13.HTTPS协议与HTTP协议的区别&#xff1f;14. We…

LVGL_基础控件Button

LVGL_基础控件Button 1、创建按键 /* 创建一个btn部件(对象) */lv_obj_t * btn lv_btn_create(lv_scr_act()); // 创建一个btn部件(对象),他的父对象是活动屏幕对象2、修改样式 // 修改按钮部件&#xff08;对象&#xff09;矩形背景部分的样式&#xff08;按下的时候背…

GICI-LIB源码阅读(一)程序简介、编译调试、配置文件、车载数据集

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、GICI-LIB 简介1、程序概述2、资源获取3、功能简介4、代码分析5、第三方库6、manual7、程序执行流程图8、定位模式1. GNSS2. GNSS INS3. GNSS …