zoukankan      html  css  js  c++  java
  • Docker 容器部署 Consul 集群


    Docker 容器部署 Consul 集群

    一、docker安装与启动
    1.1安装docker
    [root@localhost /]# yum -y install docker-io

    1.2更改配置文件
    [root@localhost /]# vi /etc/sysconfig/docker
    other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"

    1.3启动docker服务
    [root@localhost /]# service docker start
    Starting cgconfig service: [ OK ]
    Starting docker: [ OK ]

    1.4将docker加入开机启动
    [root@localhost /]# chkconfig docker on

    1.5基本信息查看
    docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等

    [root@localhost /]# docker version
    Client version: 1.0.0
    Client API version: 1.12
    Go version (client): go1.2.2
    Git commit (client): 63fe64c/1.0.0
    Server version: 1.0.0
    Server API version: 1.12
    Go version (server): go1.2.2
    Git commit (server): 63fe64c/1.0.0

    docker info :查看系统(docker)层面信息,包括管理的images, containers数等
    [root@localhost /]# docker info
    Containers: 16
    Images: 40
    Storage Driver: devicemapper
    Pool Name: docker-253:0-1183580-pool
    Data file: /var/lib/docker/devicemapper/devicemapper/data
    Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
    Data Space Used: 2180.4 Mb
    Data Space Total: 102400.0 Mb
    Metadata Space Used: 3.4 Mb
    Metadata Space Total: 2048.0 Mb
    Execution Driver: lxc-0.9.0
    Kernel Version: 2.6.32-431.el6.x86_64


    二、progrium/consul镜像安装
    2.1搜索镜像
    [root@localhost /]# docker search consul

    docker.io docker.io/progrium/consul 231 [OK]
    docker.io docker.io/gliderlabs/consul 43 [OK]
    ……

    2.2下载镜像progrium/consul
    [root@localhost /]# docker pull docker.io/progrium/consul

    2.3查看镜像
    [root@localhost /]# docker images -a   ////列出所有的images(包含历史)

    三、在Docker 容器中启动Consul Agent,这里的操作参考progrium/consul的官方说明https://hub.docker.com/r/progrium/consul/
    3.1以Server 模式在容器中启动一个agent
    [root@localhost /]# docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap

    我们测试一下,可以通过curl访问http端口:
    [root@localhost /]# curl localhost:8500/v1/catalog/nodes

    再测试一下,也可以通过dig访问一下 DNS 端口:
    [root@localhost /]# dig @0.0.0.0 -p 8600 node1.node.consul

    3.2用Docker 容器启动Consul集群
    分别启动三个server节点,并且绑定到同一个ip
    -bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群

    [root@localhost /]# docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3
    [root@localhost /]# JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)" ////获取node1的ip地址
    [root@localhost /]# docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP
    [root@localhost /]# docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP
    启动client节点
    [root@localhost /]# docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --name node4 -h node4 progrium/consul -join $JOIN_IP
    这时使用nsenter工具连接到node1上运行consul info,可以到到node1为state = Leader

    查看正在运行的容器
    [root@localhost /]# docker ps
    查看所有的容器(运行中和关闭的)
    [root@localhost /]# docker ps -a
    删除所有容器
    [root@localhost /]# docker rm $(docker ps -a -q)

    3.3进入docker容器操作查看
    docker使用 -d 参数时,容器启动后会进入后台。
    某些时候需要进入容器进行操作,特别是测试时。有很多种方法,包括使用ssh,docker attach命令或 nsenter工具等。

    3.3.1使用docker attach,多个窗口不方便
    [root@localhost /]# docker attach node3
    2016/03/14 03:35:40 [INFO] agent: Synced service 'consul'

    3.3.2使用nsenter
    先安装

    [root@localhost /]# cd /tmp
    [root@localhost /]# curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
    [root@localhost /]# tar zxf util-linux-2.24.tar.gz
    [root@localhost /]# cd util-linux-2.24
    [root@localhost /]# ./configure --without-ncurses
    [root@localhost /]# make nsenter
    [root@localhost /]# cp nsenter /usr/local/bin ////不用make install,直接把make生成的nsenter 复制到/usr/local/bin目录下即可


    [root@localhost /]# PID=`docker inspect --format "{{ .State.Pid }}" node1 `
    [root@localhost /]# nsenter --target $PID --mount --uts --ipc --net --pid
    上面2条命令可以合一:nsenter --target `docker inspect --format "{{ .State.Pid }}" node1` --mount --uts --ipc --net --pid
    node1:/# ////ok了可以随便输入linux命令检查一下看看,比如
    开始consul命令
    node1:/# consul members
    node1:/# consul info

  • 相关阅读:
    Linux与Windows共享文件夹之samba的安装与使用(Ubuntu为例)
    linux下导入、导出mysql数据库命令
    navicat for mysql (10038)如何解决,远程无法连接问题
    js过滤前后空格
    js大小写转换
    Sublime Text 超好用的侧栏插件SideBarEnhancements
    nginx,FastCGI启动语句
    Samba Linux和Windows互访
    JS 添加千分位,测试可以使用
    Sublime Text插件:HTML+CSS+JAVASCRIPT+JSON快速格式化
  • 原文地址:https://www.cnblogs.com/lxsky/p/5276067.html
Copyright © 2011-2022 走看看