docker-compose

docker compose:管理单节点容器

缺点:只能管理本机的,不能管理其他节点的

docker-compose简介

开源项目,负责实现对Docker容器集群的快速编排

可以简化docker容器的管理,使得多个容器之间的部署,连接变的更加的简单可靠,同时还能够实现服务自动扩展和容器的定期更新等功能

此外还支持设置各种容器之间的依赖关系 ,比如启动数据库容器才能启动应用容器

一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

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

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

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

将所管理的容器分为三层:

工程(project) 服务(service) 容器(container)

使用 yml时需要注意下面事项:

  • 大小写敏感

  • 不支持制表符 tab 键缩进,只能使用空格缩进

  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

  • 用 # 号注释

  • 符号字符后缩进1个空格,如冒号 : 逗号, 横杠-

  • 如果包含特殊字符用单引号(‘’)引起来会作为普通字符串处理,双引号(" "):特殊字符作为本身想表示的意思

docker compose内部控制参数

  1. name

  2. 自定义挂载

  3. 自定义ENV 环境变量 【运行前——> 自定义网络】

  4. 自定义端口

  5. 自定义传参 【运行后】

docker-compose命令

build : 描述

ps : 重新构建服务

up :创建和启动容器

exec :在容器里面执行命令

scale :指定一个服务容器启动数量

top :显示容器进程

logs :日志

down :删除容器、网络、数据卷、镜像

stop/start :停止/启动服务

restart :重启服务

  • no:默认策略

  • on-failure:在容器非正常退出时(状态非0),才会重启容器

  • on-failure:3 :在容器非正常退出时重启容器,最多重启3次

  • always:在容器退出时总是重启容器

  • unless-stopped:在容器退出时总是重启,但不考虑在docker守护进程启动时就已经停止了

Docker Compose配置常用字段

servies:服务模块 【nginx、mysql、php】

container_name:容器名

build:指定dockerfile文件名

centext:指定dockerfile文件的路径

dockerfile:指定文件名Dockerfile

ports:开启端口

networks:加入网络

volumes:挂载

networks:网络模块

driver:网络模式

compose 部署
1. Docker Compose 环境安装
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

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

docker-compose --version   #查看版本 。

docker-compose部署lnmp

下载docker-compose并赋予执行权限

Consul:注册和发现

consul是一个基于分布式的服务发现和配置管理工具。

它具有快速构建分布式架构提供服务发现和服务治理等功能的特点

同时consul还提供了可靠的保证,多数据中心和强大的API以满足高可用、分布式环境下的需求

consul的工作:

  1. 动态服务发现:服务发现是指在分布式计算环境下,自动发现可用在服务实例,并将其注册到 consul 上,以便其他服务调用

  2. 动态配置管理(temlate):配置管理是指通过通过 consul 动态更新分布式架构中配置信息【包括:环境变量、属性值、文件、数据库等】

consul 可以与多种不同的服务一起使用,包括 kubernetes、dicjer、mescos等,因此 consul 成为分布式系统中心不可少的的一部分

8300:replication【副本代表同步】、leader【领导者】、farwarding【转发】的端口

8301:lan cossip的端门【内部同一数据中心端口通信】

8302:wan qossip的端口【不同数据中心端口通信】

8500:web ui界面的端口【用于http接口和web】

8600:使用dns协议查看节点信息的端口【用于已注册的服务发现】

consul agent 的 server模式

数据流向:

数据流向:

nginx和apache会将数据写入到docker.sock文件中,redistraror会对docker.sock文件自动监控,如果文件发生改动,并将其注册到 consul服务器中的自动注册模块,进行web的ui界面展示

consul-template

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。

consul服务器部署
unzip consul_0.9.2_linux_amd64.zip   解包
mv consul /usr/local/bin

#设置代理,在后台启动 consul 服务端
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.86.44 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
#查看members状态
  consul members   

#查看集群状态
  1、consul operator raft list-peers
  2、consul info | grep leader

 

节点服务器 registrator部署
#1、安装 Gliderlabs/Registrator
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=本机IP地址 \
consul://consulIP地址:8500

#2、测试服务发现功能是否正常【-h:设置容器主机名】
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd

#3、验证 http 和 nginx 服务是否注册到 consul
浏览器访问consulIP地址:8500【192.168.86.44:8500】
点击 NODES(节点),然后单击“consurl-server01”

#在consul服务器使用curl测试连接服务器
curl 127.0.0.1:8500/v1/catalog/services

停止registrator服务器中的conmose-lnmp_php容器,再去web查看,可以看见conmose-lnmp_php容器不在了

`docker-compose`是一个用于管理应用及其依赖环境的强大工具。它允许开发者通过单个YAML文件配置应用程序的所有服务、网络和卷,并使用一个命令启动整个应用环境。以下是关于`docker-compose`的一些基本概述: ### `docker-compose`的主要用途 1. **简化部署**:通过将所有服务、依赖项和配置信息组织在一个地方,`docker-compose`使得应用的部署过程变得简单而统一。 2. **跨平台一致性**:无论您是在本地开发环境还是在生产服务器上运行应用,`docker-compose`都能提供一致的体验。 3. **便于维护**:对于有多个微服务的应用程序,`docker-compose`帮助保持各个组件之间的相互依赖性和配置的一致性。 4. **快速迭代**:支持快速测试和修改服务配置,无需每次都重启容器。 5. **集成自动化**:可以轻松地将构建、测试、部署等步骤整合到CI/CD流程。 ### 使用示例 假设有一个简单的Web应用,包含前端(React)和服务端(Node.js)。我们可以创建两个Dockerfile分别构建这两个服务,并编写一个`docker-compose.yml`文件来定义它们以及它们之间的连接。 ```yaml version: '3' services: web: build: . ports: - "8080:80" depends_on: - db db: image: postgres:latest ``` 在这个例子,我们定义了两个服务:web和服务端数据库。`web`服务使用当前目录下的Dockerfile进行构建,并将其暴露在外部主机的8080端口上。同时,它依赖于名为`db`的服务。这意味着在启动web服务之前,数据库服务会先启动并准备就绪。 ### 安装和运行 通常,您需要安装`docker`和`docker-compose`。然后,只需在包含`docker-compose.yml`文件的项目根目录下执行以下命令即可启动应用: ``` docker-compose up ``` 这个命令将会根据`docker-compose.yml`文件的内容启动所有指定的服务,并自动处理依赖关系。当所有的服务都已准备好时,终端将显示一条确认消息。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值