Docker容器之Compose编排、consul集群、template模板

docker compose容器编排

(1)docker compose的前身Fig,它是一个定义及运行多个docker容器的工具
(2)使用docker compose不再需要使用shell脚本启动容器
(3)docker compose非常适合组合使用多个容器进行开发的场景

YAML是一种标记语言很直观的数据序列化格式

文件格式及编写注意事项:

  • 不支持制表符tab键缩进,需要使用空格缩进
  • 通常开头缩进2个空格
  • 字符后缩进1个空格,如冒号,逗号,横杆
  • 用井号注释
  • 如果包含特殊字符用单引号引起来
  • 布尔值必须用引号括起来

docker compose配置常用字段

字段 描述
build dockerfile context 指定Dockerfile文件名构建镜像上下文路径
image 指定镜像
command 执行命令,覆盖默认命令
container name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale
deploy 指定部署和运行服务相关配置,只能在Swarm模式使用
environment 添加环境变量
networks 加入网络
ports 暴露容器端口,与-p相同,但端口不能低于60
volumes 挂载宿主机路径或命令卷
restart 重启策略,默认no,always, no-failure,unless-stoped
hostname 容器主机名

docker compose常用命令

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务 容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务

compose命令说明

基本的使用格式

docker-compose [options] [COMMAND] [ARGS...]

docker-compose选项

--verbose 输出更多调试信息
--version 打印版本并退出
-f,--file FILE使用特定的compose模板文件,默认为docker-compose.yml
-p,--project-name NAME指定项目名称,默认使用目录名称

1、安装docker容器和compose编排工具

[[email protected] ~]# yum install -y > yum-utils \    ##设置源工具
> device-mapper-persistent-data \    ##映射工具
> lvm2   ##映射工具
[[email protected] ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##加载阿里云镜像源
[[email protected] ~]# yum install docker-ce -y  ##安装docker容器
[[email protected] ~]# systemctl stop firewalld.service   ##关闭防火墙
[[email protected] ~]# setenforce 0
[[email protected] ~]# systemctl start docker   ##开启docker容器
[[email protected] ~]# systemctl enable docker  ##开机自启动
[[email protected] ~]# ps aux | grep docker  ##查看docker进程是否开启
[[email protected] ~]# tee /etc/docker/daemon.json <<-‘EOF‘   ##进行镜像加速
> {
>   "registry-mirrors": ["https://3a8s9zx5.mirror.aliyuncs.com"]
> }
> EOF
{
        "registry-mirrors": ["https://3a8s9zx5.mirror.aliyuncs.com"]
}
[[email protected] ~]# systemctl daemon-reload   ##重载守护进程
[[email protected] ~]# systemctl restart docker   ##重启docker服务
[[email protected] ~]# mount.cifs //192.168.100.100/LNMP-C7 /mnt/
Password for [email protected]//192.168.100.100/LNMP-C7:
[[email protected] ~]# cd /mnt/docker/
[[email protected] docker]# cp -p docker-compose /usr/bin/
##将docker-compose 复制到 /usr/bin/ 目录下
[[email protected] docker]# docker-compose -v   ##查看版本信息
docker-compose version 1.21.1, build 5a3f1a3

2、创建Nginx编排实例

[[email protected] docker]# cd ~
[[email protected] ~]# mkdir compose-nginx  ##创建工作目录
[[email protected] ~]# cd compose-nginx/
[[email protected] compose-nginx]# mkdir nginx   ##创建Nginx的目录
[[email protected] compose-nginx]# cd nginx/
[[email protected] nginx]# vim run.sh  ##编辑启动脚本
#!/bin/bash
/usr/local/nginx/sbin/nginx   ##启动Nginx服务
[[email protected] nginx]# mkdir /abc
[[email protected] nginx]# mount.cifs //192.168.100.3/LNMP-C7 /abc/
Password for [email protected]//192.168.100.3/LNMP-C7:
[[email protected] nginx]# cp /abc/nginx-1.12.2.tar.gz ./   ##将Nginx的压缩包复制到当前目录下
[[email protected] nginx]# vim Dockerfile  ##编写容器文件
FROM centos:7
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[[email protected] nginx]# cd ../
[[email protected] compose-nginx]# vim docker-compose.yml   ##创建compose模板脚本
version: ‘3‘   ##版本
services:      ##服务
    nginx:
        hostname: nginx  ##容器主机名
        build:
            context: ./nginx  ##创建容器的文件路径
            dockerfile: Dockerfile
        ports:
            - 1216:80   ##映射端口
            - 1217:443
        networks:
            - abc      ##网络名称
        volumes:
            - ./wwwroot:/usr/local/nginx/html   ##数据卷关联宿主站点目录
networks:     ##对外申明网络
    abc:
[[email protected] compose-nginx]# docker-compose -f docker-compose.yml up -d
##执行compose脚本开启,-d守护进程
[[email protected] compose-nginx]# cd wwwroot/
[[email protected] wwwroot]# vim index.html
this is test!!!   ##编辑首页内容
[[email protected] wwwroot]# yum install tree -y
[[email protected] wwwroot]# tree ~   ##查看整个所需的内容结构
/root
├── anaconda-ks.cfg
├── compose-nginx
│   ├── docker-compose.yml   ##编排模板
│   ├── nginx
│   │   ├── Dockerfile   ##容器脚本
│   │   ├── nginx-1.12.2.tar.gz    ##安装包
│   │   └── run.sh  ##启动服务脚本
│   └── wwwroot
│       └── index.html   ##网站首页

3、用浏览器查看网页

consul概述

consul是开源工具,用于实现分布式系统的服务发现与配置

consul的特性:

(1)consul支持健康检查,允许存储键值对
(2)一致性协议采用Raft算法,用来保证服务的高可用
(3)成员管理和消息广播采用GOSSIP协议,支持ACL访问控制

方便部署,与docker等轻量级容器可无缝配合

建立consul服务

  • 每个提供服务的节点上都要部署和运行consul和agent
  • consul agent有两种运行模式:server,client
  • server和client知识consul集群层面的区分,与搭建在cluster之上的应用服务无关

架构拓扑图

实验环境

consul服务端 192.168.13.128 Docker-ce 、Compose 3、Consul、Consul-template
client客户节点 192.168.13.129 Docker-ce 、registrator

1、配置consul服务器

[[email protected] ~]# mkdir consul
[[email protected] ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/
Password for [email protected]//192.168.100.3/LNMP-C7:
[[email protected] ~]# cd /mnt/docker/
[[email protected] docker]# cp consul_0.9.2_linux_amd64.zip /root/consul/
[[email protected] docker]# cd /root/consul/
[[email protected] consul]# unzip consul_0.9.2_linux_amd64.zip  ##解压consul
Archive:  consul_0.9.2_linux_amd64.zip
    inflating: consul
[[email protected] consul]# mv consul /usr/bin/   ##便于系统识别
[[email protected] consul]# consul agent \   ##代理
> -server \   ##提供server
> -bootstrap > -ui \   ##web访问界面
> -data-dir=/var/lib/consul-data \   ##数据存储目录
> -bind=192.168.13.128 \   ##本地地址
> -client=0.0.0.0 \   ##所有节点
> -node=consul-server01 &> /var/log/consul.log &   ##指定本地节点名称
[[email protected] consul]# consul members   ##查看群集信息
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.13.128:8301  alive   server  0.9.2  2         dc1
[[email protected] consul]# consul info | grep leader  ##查看leader
                leader = true
                leader_addr = 192.168.13.128:8300
[[email protected] consul]# systemctl stop firewalld.service   ##关闭防火墙
[[email protected] consul]# setenforce 0

##通过httpd api获取集群信息
[[email protected] consul]# curl 127.0.0.1:8500/v1/status/peers                 ##查看群集server成员
[[email protected] consul]# curl 127.0.0.1:8500/v1/status/leaders               ##群集中 Raf leader
[[email protected] consul]# curl 127.0.0.1:8500/v1/catalog/services             ##注册的所有服务
[[email protected] consul]# curl 127.0.0.1:8500/v1/catalog/nodes                ##群集节点详细信息
[[email protected] consul]# curl 127.0.0.1:8500/v1/catalog/nginx                ##查看 nginx 服务信息

2、配置client节点服务器

[[email protected] ~]# docker run -d > --name=registrator \   ##安装registrator自动注册功能
> --net=host \   ##指定网络
> -v /var/run/docker.sock:/tmp/docker.sock \  ##指定数据卷
> --restart=always \
> gliderlabs/registrator:latest \   ##镜像
> -ip=192.168.13.129 \    ##本地地址
> consul://192.168.13.128:8500    ##consul服务器地址

3、在节点服务器上测试发现功能是否正常

[[email protected] ~]# docker run -itd -p 83:80 --name test-01 -h test01 nginx
[[email protected] ~]# docker run -itd -p 84:80 --name test-02 -h test02 nginx
[[email protected] ~]# docker run -itd -p 88:80 --name test-03 -h test03 httpd
[[email protected] ~]# docker run -itd -p 89:80 --name test-04 -h test04 httpd
[[email protected] ~]# systemctl stop firewalld.service ##关闭防火墙
[[email protected] ~]# setenforce 0

4、验证http和Nginx服务是否注册到consul

consul-template概述

是基于 Consul 的自动替换配置文件的应用;
可以查询 Consul 中的服务目录:Key、Key-values等;
特别适合动态的创建配置文件;
是一个守护进程,用于实时查询 consul 集群信息;

1、在consul服务器上配置模板文件

[[email protected] consul]# vim /root/consul/nginx.ctmpl
upstream http_backend {           ##申明后端服务器池
        {{range service "nginx"}}
         server {{.Address}}:{{.Port}};
         {{end}}
}

server {
             listen 1216;   ##代理端口
             server_name localhost 192.168.13.128;   ##本地地址
             access_log /var/log/nginx/kgc.cn-access.log;
             index index.html index.php;
             location / {
                    proxy_set_header HOST $host;    ##头部信息
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header Client-IP $remote_addr;
                    proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass http://http_backend;  ##跳转后端服务器池
                    }
}

2、在consul服务器上安装配置Nginx

[[email protected] consul]# cd /mnt/
[[email protected] mnt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/   ##解压Nginx
[[email protected] mnt]# cd /opt/nginx-1.12.2
[[email protected] nginx-1.12.2]# yum install gcc gcc-c++ pcre-devel zlib-devel -y ##安装组件
[[email protected] nginx-1.12.2]# ./configure --prefix=/usr/local/nginx  ##配置
[[email protected] nginx-1.12.2]# make && make install
[[email protected] nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf  ##修改Nginx配置文件
 17 http {
 18     include       mime.types;
 19     include     vhost/*.conf;   ##指定虚拟主机目录
 [[email protected] nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost  ##创建虚拟主机目录
[[email protected] nginx-1.12.2]# mkdir /var/log/nginx   ##创建模板中日志文件目录
[[email protected] nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/  ##创建软连接
[[email protected] nginx-1.12.2]# nginx   ##开启Nginx服务
[[email protected] nginx-1.12.2]# netstat -natp | grep nginx

3、在consul服务器上配置并启动templeta

[[email protected] nginx-1.12.2]# cd /mnt/docker/
[[email protected] docker]# cp consul-template_0.19.3_linux_amd64.zip /root/
[[email protected] docker]# cd /root/
[[email protected] ~]# unzip consul-template_0.19.3_linux_amd64.zip  ##安装templeta
Archive:  consul-template_0.19.3_linux_amd64.zip
    inflating: consul-template
[[email protected] ~]# mv consul-template /usr/bin
[[email protected] ~]# consul-template -consul-addr 192.168.13.128:8500 \  ##指定consul本地地址
> -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" ##指定template的路径
> --log-level=info   ##日志级别
[[email protected] ~]# cd /usr/local/nginx/conf/vhost/
[[email protected] vhost]# ls
kgc.conf   ##自动生成配置文件模板
upstream http_backend {

         server 192.168.13.129:83;   ##自动生成后端容器服务地址及端口号

         server 192.168.13.129:84;

}

server {
             listen 1216;
             server_name localhost 192.168.13.128;
             access_log /var/log/nginx/kgc.cn-access.log;
             index index.html index.php;
             location / {
                    proxy_set_header HOST $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header Client-IP $remote_addr;
                    proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass http://http_backend;
                    }
}

用浏览器查看

也可在后端节点服务器上通过docker logs -f test-01查看来访地址为128

4、在client端创建一个 nginx 容器节点,检测服务发现及配置更新,不要关闭防火墙

[[email protected] ~]# docker run -itd -p:85:80 --name test-05 -h test05 nginx
##继续浏览器访问128服务端
[[email protected] ~]# docker logs -f test-05
192.168.13.128 - - [09/Jan/2020:11:05:39 +0000]
##轮询访问,还是128服务端访问的节点,实现了负载均衡

原文地址:https://blog.51cto.com/14449541/2469185

时间: 2024-10-11 06:48:30

Docker容器之Compose编排、consul集群、template模板的相关文章

Docker容器——Compose编排_consul集群_template模板

docker compose容器编排 (1)docker compose的前身Fig,它是一个定义及运行多个docker容器的工具 (2)使用docker compose不再需要使用shell脚本启动容器 (3)docker compose非常适合组合使用多个容器进行开发的场景 YAML是一种标记语言很直观的数据序列化格式 文件格式及编写注意事项: 不支持制表符tab键缩进,需要使用空格缩进 通常开头缩进2个空格 字符后缩进1个空格,如冒号,逗号,横杆 用井号注释 如果包含特殊字符用单引号引起来

Docker 容器部署 Consul 集群

一.docker安装与启动1.1安装docker[[email protected] /]# yum -y install docker-io 1.2更改配置文件[[email protected] /]# vi /etc/sysconfig/dockerother-args列更改为:other_args="--exec-driver=lxc --selinux-enabled" 1.3启动docker服务[[email protected] /]# service docker st

实战中的asp.net core结合Consul集群&amp;Docker实现服务治理

0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在服务器上面直接输入consul agent .... 来搭建启动consul集群,一旦把命令工具关掉,则consul无法再后台启动,尤其是在linux系统中. 如果在window系统中,采用bat文件到时可以做成开机自启,或者在linux中把命令做成一个service 服务文件来启动就可以实现后台运

Docker应用系列(三)| 构建Consul集群

本示例基于Centos 7,在阿里云的三台机器上部署consul集群,假设目前使用的账号为release,拥有sudo权限. 由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速器,可参考此文进行配置. 假设三台主机的ip分别为: 主机一:192.168.0.1 主机二:192.168.0.2 主机三:192.168.0.3 三台主机的安装步骤相似,以主机一为例: 1. 安装docker服务: sudo yum install -y docker 2. 启动docker服务

Docker Swarm和Kubernetes在大规模集群中的性能比较

Contents 这篇文章主要针对Docker Swarm和Kubernetes在大规模部署的条件下的3个问题展开讨论.在大规模部署下,它们的性能如何?它们是否可以被批量操作?需要采取何种措施来支持他们的大规模部署和运维? 我们需要使用侧重于用例的基准测试来对所有容器平台进行比较,这样采用者才可以做出正确的决策. 笔者从用户的角度建立了一套测评工具,用普通的方法测试Docker Swarm和Kubernetes.我只评估了通用的功能:容器的启动时间和容器罗列时间. Swarm的性能比Kubern

服务发现之美:Consul集群搭建

近几年随着Docker容器技术.微服务等架构的兴起,人们开始意识到服务发现的必要性.微服务架构简单来说,是一种以一些微服务来替代开发单个大而全应用的方法, 每一个小服务运行在自己的进程里,并以轻量级的机制来通信, 通常是 HTTP RESTful API.微服务强调小快灵, 任何一个相对独立的功能服务不再是一个模块, 而是一个独立的服务.那么,当我们需要访问这个服务时,如何确定它的地址呢?这时就需要服务发现了. Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发

使用 Docker 一步搞定 ZooKeeper 集群的搭建

背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽爆了, 几个命令就可以搭建一个完整的 ZK 集群. 下面我简单记录一下使用 Docker 搭建 ZK 集群的一些步骤. 镜像下载 hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见, 我们就使用官方的 ZK 镜像吧.首先执行如下命令: docker pull zookeeper

8分钟学会Consul集群搭建及微服务概念

原文:8分钟学会Consul集群搭建及微服务概念 Consul介绍: Consul 是由 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value 存储.多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等),使用起来也较为简单. Consul的如何实现的? Consul 用 Golang 实现,因此具有天然可移植性(支

Docker应用:Kubernetes(容器集群)

原文:Docker应用:Kubernetes(容器集群) 阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) Docker应用:Kubernetes(容器集群) 前言: 终于出第三篇了,上个月就已经弄好了,一直没弄上来,步入正题之前有3个建议给想要学习Kubernetes的同学. 1.在国内因为防火墙的原因,你是不可能在Docker上在线开启的Kubernetes功能的.所以如果你会fan qiang上网,那万事大吉. 2.如果你离香