编排容器现在,我们回到文章开头所说的那个场景,一开始我打算使用ubuntu:20.04作为基础镜像,写DockerFile安装我需要的依赖包 , 设置环境变量 , 打包成镜像来使用 。我在做事情之前,喜欢先请教下这方面玩的比较好的朋友 。
他们告诉我说,如果全部打包到一个镜像里,后期维护与扩展将成为恶梦,后面你要添加新项目,想访问一些之前项目里提供的服务 , 你就得做很大的改动 。一般这种场景我们都会使用Docker Compose来实现的 。
简而言之 , Docker Compose的作用就是将多个独立的容器组合起来,让容器之间可以轻易的互相访问,最终实现我们的需求 。
编写配置文件容器的编排是通过编写docker-compose.yml配置文件来实现的,一般我们会将这个文件创建在项目的根目录 。它的配置文件中包含有很多配置项,此处我们只列举本文需要用到的 。
- version , 用于指定 Docker Compose 文件的格式版本,以确保正确解析和处理文件中的配置,截止目前(2023-11-15)比较主流的版本为3
- services,用于定义各种服务(mysql、redis、nginx等)将它们组合到一起 , 形成一个web应用
在docker-compose中流程也是一样的,因此我们就需要先定义一个网络,设置好网关 。如下所示,我们定义了一个名为kaisir-docker-network的自定义网络 。
- external: true 表示该网络为外部网络,其他Docker容器可以连接到这个网络
- name 指定了网络名称
- driver: bridge指定网络的连接模式为桥接,他还有很多其他模式可供选择(host、overlay等)具体请自行查阅相关资料
- ipam用于IP地址的配置
config,用于配置IP地址池,在这里我们定义了一个子网为192.168.30.0/24,其中包含了192.168.30.1到192.168.30.254的所有IP地址 。gateway指定了网关地址为 192.168.30.1
networks:kaisir-docker-network:external: truename: kaisir-docker-networkdriver: bridgeipam:driver: defaultconfig:- subnet: 192.168.30.0/24gateway: 192.168.30.1通过上述配置 , 我们就可以在服务中连接这个网络了 。有些开发者可能对192.168.30.0/24比较疑惑,这里就稍作下解释。这是一个 CIDR(Classless Inter-Domain Routing)表示法,用于表示 IP 地址范围 。CIDR 表示法包括两部分:IP 地址的网络部分和主机部分,通过斜杠后面的数字表示网络的长度 。定义服务我可以在services指令下定义我们需要的服务,为他们连接网络、挂载数据卷、设置时区、定义访问端口等,我们以mysql为例来做讲解 , 如下所示:
在 192.168.30.0/24 中:
具体地 , 192.168.30.0/24 表示从 192.168.30.0 到 192.168.30.255 的IP地址范围,其中包括了 192.168.30.1 到 192.168.30.254 的所有IP地址 。192.168.30.0 是网络地址,192.168.30.255 是广播地址 。
- 192.168.30.0 是网络的基础 IP 地址 。
- /24 表示网络的前缀长度,即网络中有多少个连续的 IP 地址 。在这里,它表示有24位用于网络,剩余的 32 - 24 = 8 位用于主机 。
- mysql为服务名称
- image为镜像名称
- container_name为容器名称
- volumes为我们需要挂载的数据卷
- ports为端口映射
- networks为服务需要接入的网络,定义服务需要分配的ip地址
- environment 设置容器的环境变量,此处我们设置了mysql的root用户密码以及时区
services:mysql:image: mysql:5.7.42container_name: local_mysqlvolumes:- /Users/likai/Documents/mysql_data:/var/lib/mysql- /Users/likai/Documents/mysql_conf/my.cnf:/etc/my.cnfports:- 3306:3306networks:kaisir-docker-network:ipv4_address: 192.168.30.11environment:- MYSQL_ROOT_PASSword=xxxx- TZ=Asia/Shanghai
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- .NET Core下有热门的ORM框架使用方法
- CPU占用率高?解决方案全在这
- JDK11 升级 JDK17 最全实践干货来了
- 微信内存优化:释放大量空间,提升使用体验
- 手机充电到100%再拔?原来我们都做错了!
- 抖店商品卡怎么推广?怎么带来流量?
- 为什么steam商店加载不出来 steam商店加载不出来解决办法
- 修颜霜如何使用,修颜水粉霜BB霜怎么起到防晒作用
- 盐从哪里来的 盐从哪里来
- Lisa豪门梦碎后,妆造又黑又丑,参加疯马秀的报应来了?
