docker高级管理(docker-compose编排工具,consul架构)

本章知识点概括:

Docker Compose容器编排
构建自动发现的Docker服务架构
实现容器服务自动加入Nginx集群

**Docker Compose容器编排功能**
Docker compose的前身是Fig,它是一个定义及运行多个docker容器的工具
使用Docker Compose不再需要使用shell脚本来启动容器
Docker Compose非常适合组合是同多个容器进行开发的场景
可以执行多个容器的操作
**Docker Compose容器编排**
YAML是一种标记语言很直观的数据序列化格式
文件格式及编写注意事项
不支持表符tab缩进,需要使用空格缩进
通常开头缩进2个空格
字符后缩进1个空格,如冒号,逗号,横杠
用#号注释
如果包含特殊字符用单引号引起来
布尔值必须用引号括起来

Docker Compose配置常用字段

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

Docer Compose常用命令

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

Compose 命令说明

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

Consul

Consul是HashCorp公司推出得到开源工具,用于实现分布式系统的服务与配置
Consul的特性
Consul支持健康检查,允许存储键值对
一致性协议采用Raft算法,用来保证服务的高可用
成员管理和消息广播采用GOSSIP协议,支持ACL访问控制列表,与docker无缝配合

构建自动发现的Docker服务架构

建立Consul服务

每个提供服务的节点上都要部署Consul的agent
Consul agent有两种运行模式
Server
Client
Server和Client只是Conusl集群层面的区分,与搭建在Cluster之上的应用服务无关

consul群集架构,发现注册nginx中的docker容器,监控节点服务器的状态。
consul server服务器中的nginx做反向代理去轮询访问服务器池中的一个个容器。用户访问代理端口,就能访问到后面的多个容器,我们的端口做了两次映射。consul服务器上可以统一修改配置文件

-----------------------------------------------------docker-compose容器编排----------------------------------------------------------------

#宿主机的共享目录有nginx软件包,我们挂载到/opt/目录下
mount.cifs //192.168.100.25/LNMP /opt/
#创建容器编排目录
mkdir /root/compose_ngin
#创建nginx容器镜像
cd compose_nginx/

mkdir nginx

cd nginx/

cd /opt/

cp nginx-1.12.0.tar.gz /root/compose_nginx/nginx/

cd /root/compose_nginx/nginx/

#加上nginx启动脚本
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

[[email protected] nginx]# vim Dockerfile
FROM centos:7
MAINTAINER this is nginx <chen>
RUN yum -y update
RUN yum -y install wget pcre-devel zlib-devel make zlib gcc gcc-c++ openssl-devel net-tools
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.0
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
WORKDIR /root/nginx
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

编写docker-compose编排安装nginx

[[email protected] compose_nginx]# vim docker-compose.yml
version: ‘3‘
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      - chen
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  chen:

[[email protected] compose_nginx]# mount.cifs //192.168.100.25/compose /mnt/
Password for [email protected]//192.168.100.25/compose:
[[email protected] compose_nginx]# cd /mnt/
[[email protected] mnt]# ls
consul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip  docker-compose
[[email protected] mnt]# cp -p docker-compose /usr/local/bin/
[[email protected] mnt]# chmod +x /usr/local/bin/docker-compose 

#开启路由转发
[[email protected] compose_nginx]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1[[email protected] compose_nginx]# sysctl -p
net.ipv4.ip_forward = 1

利用编排工具开启nginx

[[email protected] compose_nginx]# docker-compose -f docker-compose.yml up -d

[[email protected] compose_nginx]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                         NAMES
66d7cee5692d        compose_nginx_nginx   "/run.sh"           11 seconds ago      Up 9 seconds        0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1

我们做了数据卷我们写个默认首页进去

[[email protected] compose_nginx]# ls
docker-compose.yml  nginx  wwwroot
[[email protected] compose_nginx]# cd wwwroot/
[[email protected] wwwroot]# vim index.html
<h1>this is chen web ! ! !</h1>

-------------------------------------------------------------------consul部署----------------------------------------------------------------------

自动发现注册多个docker容器节点,要想被consul管理,就要去注册,满足搜索条件agent就会提交注册请求,consul server自动发现去处理注册请求,监控容器的状态,template模板

[[email protected] ~]# mkdir consul
[[email protected] ~]# cd /mnt/
[[email protected] mnt]# ls
consul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip  docker-compose

[[email protected] mnt]# cp consul_0.9.2_linux_amd64.zip /root/consul/
[[email protected] mnt]# cd /root/consul/
[[email protected] consul]# ls
consul_0.9.2_linux_amd64.zip
[[email protected] consul]# unzip consul_0.9.2_linux_amd64.zip
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul              

[[email protected] consul]# mv consul /usr/bin/

#使用conusl agent代理功能
[[email protected] consul]# consul agent #指定server功能
#参与领袖
#ui界面
#参数指定位置
#绑定本地地址
#面对所有节点
#本地节点名称混合输出到日志中,放在后台运行
> -server > -bootstrap > -ui > -data-dir=/var/lib/consul-data > -bind=192.168.136.142 > -client=0.0.0.0 > -node=consul-server01 &> /var/log/consul.log &
[1] 37957

#查看群集信息
[[email protected] consul]# consul members
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  192.168.136.142:8301  alive   server  0.9.2  2         dc1
#现在只有一台,它就是老大
[[email protected] consul]# consul info | grep leader
        leader = true
        leader_addr = 192.168.136.142:8300

第二台节点服务器(创建多个容器)容器服务自动加入nginx集群

[[email protected] ~]# docker run -d > --name=registrator \ #指定容器名称
> --net=host \  #指定主机
> -v /var/run/docker.sock:/tmp/docker.sock \ #指定数据卷宿主机目录,容器目录
> --restart=always \ #重启
> gliderlabs/registrator:latest \ #指定本地的镜像
> -ip=192.168.136.167 \ #指定你本地的地址
> consul://192.168.136.142:8500 #指定consul的地址

#两个nginx服务容器
[[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
#两个apache服务5容器
[[email protected] ~]# docker run -itd -p:88:80 --name test-03 -h test02 httpd
[[email protected] ~]# docker run -itd -p:89:80 --name test-04 -h test04 httpd
#查看所有容器
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED              STATUS              PORTS                NAMES
00a94fe6fd0c        httpd                           "httpd-foreground"       6 seconds ago        Up 5 seconds        0.0.0.0:89->80/tcp   test-04
b47b89287e43        httpd                           "httpd-foreground"       38 seconds ago       Up 37 seconds       0.0.0.0:88->80/tcp   test-03
9b695e1d8660        nginx                           "nginx -g ‘daemon of…"   About a minute ago   Up About a minute   0.0.0.0:84->80/tcp   test-02
3cbf17118dab        nginx                           "nginx -g ‘daemon of…"   2 minutes ago        Up 2 minutes        0.0.0.0:83->80/tcp   test-01
055caf398060        gliderlabs/registrator:latest   "/bin/registrator -i…"   3 minutes ago        Up 3 minutes                             registrator

验证http和nginx服务是否注册到consul

原文地址:https://blog.51cto.com/14449524/2463917

时间: 2024-10-07 09:01:42

docker高级管理(docker-compose编排工具,consul架构)的相关文章

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

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

Docker高级管理(实例演示!!!)

Docker网络通信 Docker单机网络拓扑图: 端口映射: 端口映射机制将容器内的服务提供给外部网络访问 可随机或指定映射端口范围 docker run -d -P httpd:centos docker run -d -p 49888:80 httpd:centos 容器互联 在源容器和接收容器间建立一条网络通信隧道 使用docker run命令–link选项实现容器间互联通信 实现容器互联 docker run -d -P --name web1 httpd:centos docker

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

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

【云计算】Docker云平台—Docker进阶

Docker云平台系列共三讲,此为第二讲:Docker进阶 参考资料: 五个Docker监控工具的对比:http://www.open-open.com/lib/view/open1433897177879.html Docker编排工具简介:http://www.aixchina.net/home/space.php?uid=59140&do=blog&id=135681 集成部署攻略:http://jingyan.baidu.com/article/425e69e6df76bbbe15

使用Docker compose编排Laravel应用

前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环境要求 先要安装好Docker 和 Docker compose,而且Docker 仓库镜像最好换成国内的.一般地,我开发电脑上会运行一个Vagrant,然后再在里面运行Docker等应用. 主要思路 Docker官方推荐的是一个容器运行一个服务,所以会有Compose编排,各个服务间通过容器互联技

Docker那些事儿之编排工具docker-compose

前面已经讲解过docker的一些基础使用,镜像创建的操作过程,如果大量容器需要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上我们需要找到更好更便捷的使用方式,今天要讲解的容器编排工具docker-compose就是其中之一 简介 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配置中创建并启动所有服务. docker-compose作为容器编排工具,专门用于处理多容器部

使用容器编排工具docker swarm安装clickhouse多机集群

1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker  swarm init [options] 3,再需要加入集群的集群上执行此命令 4.可以使用sudo docker node ls此命令来查询节点数 5编写docker-compose.yaml文件,目前我使用的是version 3版本,version2和3有区别,具体看官网介绍 贴一份完整的docker-compose.yaml供大家参考 ver

测试环境docker化—容器集群编排实践

本文来自网易云社区 作者:孙婷婷 背景 在前文<测试环境docker化-基于ndp部署模式的docker基础镜像制作>中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭建测试环境.但是在实践过程中发现存在很多问题: 在一台云主机上搭建多个模块,容易出现资源不足的情况(我们在实验过程中有台云主机好几次宕机,经常要删掉不用的镜像容器): 部分模块之间需要相互调用,为方便部署多套环境简化配置修改,部署时需要确定容器的ip地址: 手动敲命令一个个构建容器,n个模块就要敲n个构建指令

docker——三剑客之Docker Compose

编排(Orchestration)功能是复杂系统实现灵活可操作性的关键.特别是在Docker应用场景中,编排意味着用户可以灵活的对各种容器资源实现定义和管理. 作为Docker官方编排工具,Compose的重要性不言而喻,它可以让用户通过编写一个简单模板文件,快速地创建和管理基于Docker容器地应用集群. Compose项目是Docker官方的开源项目,负责实现对Docker容器的快速编排.从功能上看,跟OpenStack中的Heat十分相似.Compose定位是"定义和运行多个Docker容