深入浅出之Docker Compose详解

news2024/10/6 12:22:23

目录

1.Docker Compose概述

1.1 Docker Compose 定义

1.2 Docker Compose产生背景

1.3 Docker Compose 核心概念

1.4 Docker Compose 使用步骤

1.5 Docker Compose 常用命令

 

2. Docker Compose 实战

2.1 Docker Compose下载和卸载

2.2 Docker Compose 项目概述

2.3 Docker Compose 编排字段部分详解

2.3.1 version

2.3.2 services

2.3.3 build 和 image

2.3.4 volumes 和 environment

2.3.5 ports 和 expose

2.4 Docker Compose 部署实战


 

1.Docker Compose概述

1.1 Docker Compose 定义

Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

1.2 Docker Compose产生背景

我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。.Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器,Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

1.3 Docker Compose 核心概念

Docker Compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner),如下图所示:

c3ea7117e68a4c58ad9cbc558e7c20c6.png

 

1.4 Docker Compose 使用步骤

Compose 使用的三个步骤:

1.编写Dockerfile定义各个微服务应用并构建出对应的镜像文件dockerfile的使用,使用dockerfile部署springboot项目。

2.使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。

3.最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线。

1.5 Docker Compose 常用命令

docker --version #查看版本

docker-compose -h    # 查看帮助

docker-compose up    # 启动所有docker-compose服务

docker-compose up -d    # 启动所有docker-compose服务并后台运行

docker-compose down     # 停止并删除容器、网络、卷、镜像。

docker-compose exec  yml里面的服务id   # 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash

docker-compose ps      # 展示当前docker-compose编排过的运行的所有容器

docker-compose top       # 展示当前docker-compose编排过的容器进程

docker-compose logs  yml里面的服务id   # 查看容器输出日志

docker-compose config     # 检查配置

docker-compose config -q  # 检查配置,有问题才有输出

docker-compose restart   # 重启服务

docker-compose start     # 启动服务

docker-compose stop      # 停止服务

 

2. Docker Compose 实战

2.1 Docker Compose下载和卸载

# 下载
 curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 开启可执行权限
chmod +x /usr/local/bin/docker-compose

# 查看版本
docker-compose --version
#docker-compose version 1.29.2, build 5becea4c

# 如果使用curl方式安装的,这样卸载即可
 rm /usr/local/bin/docker-compose

2.2 Docker Compose 项目概述

这里模拟通过浏览器访问网关,然后网关将请求转发到订单微服务,通过查询订单返回订单信息,在其中过程中订单中有用户信息,需要根据订单中的用户id调用用户微服务进行查询然后进行赋值然后返回订单信息。这里的注册中心采用nacos。其中的每个微服务暂未搭建集群,这里网关端口号为7000,订单微服务端口号为8080,用户模块微服务端口号为9201,本地运行结果如下图:

357967864766451db5b74b873aba98c6.png

 

2.3 Docker Compose 编排字段部分详解

2.3.1 version

version 字段指定了 Docker Compose 编排文件的版本,例如:

version: '3'

2.3.2 services

services 字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项。例如:

services:
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
  

2.3.3 build 和 image

build 字段允许在 Docker Compose 编排中指定 Dockerfile 的位置,从而可以使用 Docker Compose 构建镜像。image 字段指定要使用的 Docker 镜像。例如:

services:
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
  user: #服务名
    build: ./user #这里为用户微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件

2.3.4 volumes 和 environment

volumes 字段指定了要使用的数据卷。environment 字段指定了要设置的环境变量。例如:

services:
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
    environment:
      MYSQL_ROOT_PASSWORD: 000000 #设置数据库密码
    volumes:
    - "$PWD/mysql/data:/var/lib/mysql" #数据卷挂载
 

2.3.5 ports 和 expose

ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)。expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。exposeports 不同的是,expose 字段仅仅是将容器内部的端口暴露给其他容器使用,而不是直接映射到宿主机上的端口

例如:

 services:
    gateway: #服务名
       build: ./gateway #这里为网关文件夹,里面存放的是该服务代码jar包和Dockerfile文件
       ports:
          -"7000:7000"
    nginx:
        image: nginx
        expose:
          -"8080"

   

    

  

当然命令还有很多,这里进行部署实战的时候只用到上述这些编排字段,所以这里重点写了这些,其余的进行省略。

2.4 Docker Compose 部署实战

按照三步走策略第一步编写Dockerfile定义各个微服务应用并构建出对应的镜像文件dockerfile的使用,使用dockerfile部署springboot项目。

这里进行举例,把每个微服务的项目进行打包成jar文件,这里命名为a.jar。然后构建Dockerfile文件并且和每个微服务的jar包都单独放在同一个文件夹下。Dockerfile文件内容如下:

From java:8-alpine
COPY ./a.jar /tmp/app.jar
EXPOSE 8080
ENTRYPOINT java -jar /tmp/app.jar

使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。docker-compose.yml文件内容如下:

version: "3.2"

services:
  nacos: #服务名
    image: nacos/nacos-server #nacos镜像
    environment:
      MODE: standalone #单机模式
    ports:
    - "8848:8848" #ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
    environment:
      MYSQL_ROOT_PASSWORD: 000000 #设置数据库密码
    volumes:
    - "$PWD/mysql/data:/var/lib/mysql" #数据卷挂载
  user: #服务名
    build: ./user #这里为用户微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件
  order: #服务名
    build: ./order #这里为订单微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件
  gateway: #服务名
    build: ./gateway #这里为网关文件夹,里面存放的是该服务代码jar包和Dockerfile文件
    ports:
      - "7000:7000"

执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线,然后就可以在自己的服务器上进行远程访问了。

98306abac59e4bacb4cd90f1850fa9ed.gif

 

 

 

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

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

相关文章

chatgpt赋能python:Python定义局部变量的方法

Python定义局部变量的方法 Python是一种非常流行的编程语言,它被广泛用于各种应用程序开发、数据科学和机器学习任务。在Python中,如何定义局部变量是一个非常基本的概念。本文将重点介绍Python中定义局部变量的方法。 什么是局部变量? 在…

前端小项目基础版本----时刻监听audio音频的声音高低 可视化显示+源码

目录 时刻监听audio音频的声音高低第一代实现:基本第二代实现:完善 时刻监听audio音频的声音高低 前端小项目基础----时刻监听audio音频的声音高低 可视化显示 第一代实现:基本 实现的效果 根据 音频的某时刻高低 调整生成不同的柱状 以下就是 源码 直接复制粘贴 找个音频放…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(2.3-大模型发展历程 之 图像、视频生成与视觉大模型)

文章大纲 GAN 模型与强化学习强化学习生成式对抗网络 ( Generative Adversarial Nets, GAN)VAE扩散模型扩散逆扩散参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲强化学习生成模型多模态GAN 模型与强化学习 强化学习 Reinforcement learning (RL) is …

【SpinalHDL快速入门】4.5、复合类型之Bundle

文章目录 1.1、描述1.2、声明1.2.1、条件信号(Conditional signals) 1.3、运算符1.3.1、比较(Comparison)1.3.2、类型转换(Type cast)1.3.3、将比特转换回 Bundle 1.4、IO元素方向1.4.1、in/out1.4.2、mast…

《.NET 下最快比较两个文件内容是否相同》之我的看法验证

我对文件对比这一块还是比较感兴趣的,也想知道哪种方式性价比最高,效率最好,所以,根据这篇文章,我自己也自测一下,顺便留出自己对比的结果,供大佬们参考一二。 大致对比方案 我这边根据文章里…

循环队列(Ring Buffer)

背景: 最近在复习数据结构和算法,顺带刷刷题,虽然很长时间不刷题了但还是原来熟悉的味道,每一次重学都是加深了上一次的理解。本次我们看一下 循环队列(Ring Buffer),C语言实现。 循环队列:首先 它是一个队…

chatgpt赋能python:Python安装好后怎么写代码?

Python安装好后怎么写代码? Python是一种高级编程语言,已成为众多开发者的首选工具。根据一些统计数据,Python排名全球第三的流行语言,已经成为Web开发、数据科学和人工智能领域的首选语言。如果您刚刚安装了Python,那…

【LeetCode全题库算法速练】6、N 字形变换

文章目录 一、题目🔸题目描述🔸样例1🔸样例2🔸样例3 二、代码参考 作者:KJ.JK 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &a…

YOLOv5/v7 添加注意力机制,30多种模块分析①,SE模块,SK模块

目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心 二、SE模块1、SE模块的原理2、代码实例3、实验结果4、应用示例(1)在 models/yolo.py 文件中定义 SEModule 类,用于实现SE模块。(…

pyautogui实现自动连接GP VPN

支线小小项目(pyautogui实现自动连接GP VPN) 用了pyautogui做了一个懒人小脚本,主要是在家上班,每天要连公司vpn, 然后还要等好久,公司用的GP(global protect) VPN, 长这个样子 主要问题每次点击connect后需要等他先出来windows NT的login认…

Web安全总结

目录 网站架构一般web服务器结构相比于传统的网络攻击,基于web的攻击有什么不同?HTTP协议HTTP响应拆分攻击HTTPS针对HTTPS协议的攻击那么如何保证证书的唯一性? HTTP会话Cookie和Session的关系HTTP会话攻击解决方案 Web访问中的隐私问题Web应…

【读书笔记】《贫穷的本质》- [印度] Abhijit Banerjee / [法] Esther Duflo

文章目录 前言第一章 再好好想想第一部分 生活案例第二章 饥饿人口已达到10亿?第三章 提高全球居民健康水平容易吗?第四章 全班最优 前言 扶贫政策方面充斥着会取得立竿见影的效果的泡沫,事实证明这一点儿也不奇怪。要想取得进展,…

sed:命令讲解一

sed的使用: sed的使用 一、sed1.定义:2.工作流程:读取,执行,显示。3.基本操作格式:4.sed操作符:5.扩展: 一、sed 1.定义: 一种流编辑器,会在编辑器处理数据…

浅谈发改委强化电力需求侧管理缓解电力系统峰值压力方案设计 安科瑞 许敏

摘要:近年来全国用电负荷特别是居民用电负荷的快速增长,全国范围内夏季、冬季用电负荷“双峰”特征日益突出,恶劣气候现象多发增加了电力安全供应的压力。具有随机性、波动性、间歇性特征的可再生能源大规模接入电网对电力系统的稳定性带来新…

MySQL 索引及查询优化总结

一个简单的对比测试 前面的案例中,c2c_zwdb.t_file_count表只有一个自增id,FFileName字段未加索引的sql执行情况如下: 在上图中,typeall,keynull,rows33777。该sql未使用索引,是一个效率非常低…

chatgpt赋能python:Python安装HanLP:一个强大的NLP工具

Python安装HanLP:一个强大的NLP工具 HanLP是一个基于Python编写的神经网络自然语言处理工具,它提供给我们强大的文本处理和分析能力。在这篇文章中,我们将介绍如何在Python中安装并使用HanLP工具。如果你是一个文本处理和分析的爱好者或者工…

chatgpt赋能python:Python安装到U盘——实现随时随地的编程

Python安装到U盘——实现随时随地的编程 Python是一种广泛使用的动态解释型编程语言,简单易学,适用性广泛,被广泛应用于数据分析、Web开发、人工智能等领域。想要充分发挥Python的优势,随时随地进行编程,我们可以将Py…

人工智能正迎来量子飞跃——

光子盒研究院 6月1日,量子计算领域的行业领导者IonQ公布了其应用量子计算机模拟人类认知的一项早期研究结果。这篇论文描述了世界上第一个公开的方法:研究团队已将一个基本的人类认知模型在量子硬件上运行,这为模仿人类思维方式的改进决策模型…

Day_42哈希表

目录 一. 关于哈希表 二. 如何实现哈希表 1. 散列函数 2. 散列表 3. 散列函数的构造方法 4. 处理冲突的方法 三. 代码实现 1. 构造函数构造哈希表 2. 哈希表的查找 四. 代码展示 五. 数据测试​编辑 六. 总结 一. 关于哈希表 在前面介绍的线性表的查找中,记录在表中的位置…

RabbitMQ入门案例之Simple简单模式

RabbitMQ入门案例之Simple简单模式 前言什么是Simple模式Simple模式操作RabbitMQ管理界面的部分介绍 前言 本文将介绍RabbitMQ的七种工作模式的第一种Simple模式的代码实现,编程工具使用的是IDEA,在RabbitMQ中的工作模式都是生产消费模型 生产者消费模型…