运维实操——docker容器(九)三剑客之Compose

1、compose介绍

应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要认人为开启停止,那么效率太低了。Docker Compose是一种编排服务,基于pyhton语言实现,是一个用于在 Docker 上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。用户可以编辑一个docker-compose.yml文件实现一条指令安装部署多容器的应用,这大大减少了运维人员的重复工作量,解决了容器与容器之间如何管理编排的问题。
Docker Compose 中有两个重要的概念
1、service:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
2、project:由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义
在这里插入图片描述

docker-compose.yml 文件中常用命令含义
Image指定为镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像
Build指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像
Command覆盖容器启动后默认执行的命令
Links链接到其它服务中的容器
Ports端口映射
Expose暴露端口信息
Volumes卷挂载路径设置

2、docker-compose实现

现在准备四台虚拟机,server1(172.25.11.1)、server2(172.25.11.2)、server3(172.25.11.3)、server4(172.25.11.4)都已经安装docker,我们想在server1中编写docker-compose.yml文件,一键部署haporxy+nginx,实现负载均衡。server2做haporxy调度器,server3和server4做真正的nginx服务器后台。

(1)项目整体框架

在这里插入图片描述

(2)docker-compose安装

准备安装包docker-compose-Linux-x86_64-1.27.0

[root@server1 ~]# ll
-rwxr-xr-x 1 root root  12215880 Jul 21 21:16 docker-compose-Linux-x86_64-1.27.0
[root@server1 ~]# mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/ 
%因为docker-compose安装包是二进制文件,所以放到/usr/local/bin才能执行
[root@server1 ~]# cd /usr/local/bin/
[root@server1 bin]# ls
docker-compose-Linux-x86_64-1.27.0
[root@server1 bin]# mv docker-compose-Linux-x86_64-1.27.0 docker-compose 	%改名
[root@server1 bin]# ls
docker-compose
[root@server1 bin]# chmod +x docker-compose 								%赋予执行权限

(3)编写docker-compose.yml

家目录下创建compose目录,编写docker-compose.yml文件,创建web1和web2子目录,并写入发布内容,以示效果。
在这里插入图片描述
docker-compose.yml文件内容如下。配置三个服务,web1,web2和haproxy。web1和web2都是用nginx镜像安装;/root/compose/web1挂载到容器内/usr/share/nginx/html下,/root/compose/web2挂载到容器内/usr/share/nginx/html下;haproxy使用haproxy镜像安装;物理机的80端口映射到容器内的80端口;网络都是统一的webnet。
在这里插入图片描述
创建haproxy子目录并编辑修改haproxy.cfg的主配置文件
在这里插入图片描述

#
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#

global
        maxconn         65535
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             200
        gid             200
        		%取消chroot
        daemon

defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        stats uri       /admin/stats

# The public 'www' address in the DMZ
frontend public
        bind            *:80 name clear 				%监听所有ip的80端口
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        default_backend dynamic

# The static backend backend for 'Host: img', /img and /css.
backend dynamic
        balance         roundrobin						%负载均衡模式是rr论叫
        server          a web1:80 check inter 1000		%真正的服务器web1,端口80,名字a
        server          b web2:80 check inter 1000		%真正的服务器web2,端口80,名字b

haproxy镜像导入
在这里插入图片描述

(4)创建并后台启动容器

注意,docker-compose命令必须在项目目录下运行,-d参数表示后台运行,成功后docker-compose ps查看状态已开启。
在这里插入图片描述

(5)测试

可以看到,web1和web2一人访问一次,实现负载均衡。
在这里插入图片描述
也可以图形化界面查看,网页输入172.25.11.1/admin/stats
在这里插入图片描述
haproxy还有健康监测功能,也就是说如果web1被down掉了,我们访问172.25.11.1时,就不会接入web1,只会找web2。感兴趣的同学可以自行测试。

1.Docker入门    1.1 Docker为什么火    1.2 Docker是什么    1.3 为什么要使用Docker    1.4 Docker与虚拟化区别    1.5 Docker Engine    1.6 Docker 体系结构    1.7 Docker 应用场景2.Docker安装    2.1 安装Docker2.1.1 调整镜像源从国内获取2.1.2 调整docker数据存储位置    2.2 如何快速运行一个容器3.Docker镜像    3.1 什么是镜像?    3.2 镜像能干什么?    3.3 如何使用镜像运行容器    3.4 镜像的基本操作。搜索、下载、查看、导入、导出、删除、上传4.Docker容器    4.1 什么是容器    4.2 容器能运行什么    4.3 启动第一个容器    4.4 容器运行的参数含义    4.5 如何运行一个自启动的容器    4.6 容器暴露    4.7 容器的整个生命周期5.Docker数据管理    5.1 数据持久化介绍    5.2 数据持久化-Data Volume (db)    5.3 数据持久化-Bind Mounting  ( web )6.Docker镜像构建    6.1 如何将运行的容器打包成镜像    6.2 如何实现自动化构建镜像    6.3 Dockerfile介绍    6.4 Dockerfile语法    6.5 dockerfile构建-案例1    6.5 dockerfile构建-案例2    6.7 dockerfile构建-案例3    6.8 dockerfile构建-案例4 (搞清楚ENTRYPOINT与CMD之间的关系与区别)7.Docker私有仓库    7.1 什么是私有仓库    7.2 为什么要有私有仓库    7.3 私有仓库种类    7.2 搭建私有仓库registry     7.3 为registry添加basic认证    7.3 如何将本地镜像存放私有仓库    7.4 如何获取私有仓库的docker镜像    7.5 企业级私有仓库harbor https    7.6 实战a主机推送镜像至仓库,b主机拉取镜像启动为容器8.Docker网络    8.1 docker容器互联是什么?--link    8.2 docker容器互联项目实践( python )    8.3 docker网络模式 ( bridge、host、container、none )9.Docker单机编排    9.1 Compose基本介绍    9.2 Compose三大概念   project(services、volumes、networks)    9.3 Compose编排博客系统    9.4 Compose编排Python-web    9.5 Compose实现水平扩展    9.6 Compose实现负载均衡    9.7 Compose编排投票系统 (python、node、java、db、redis)10.Docker图形化与监控    10.1 docker图形工具 Portainer    10.2 docker监控工具 cAdvisor
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值