20220714docker-Consul

Posted 歆瑶的小房子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20220714docker-Consul相关的知识,希望对你有一定的参考价值。

Consul提供的一些关键特性

•service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务

•health checking:健康检测使consul可以快速的警告在集群中的操作。和服务发现的集成,可以防止请求转发到故障的服务上面

•key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作

consul安装

* Consul 下载地址:https://www.consul.io/downloads.html

* Github地址:https://github.com/hashicorp/consul

* 码云地址:https://gitee.com/mirrors/consul

下载、解压就得到一个可执行文件consul(通过go编译为二进制文件)

将这个文件移动到全局变量环境中

$ sudo mv consul /usr/local/bin/

consul对外提供的端口,不同的端口有不同的作用,

20220714docker-Consul_ico

Consul-启动服务

consul agent  -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -bind=192.168.169.150  -ui  -client=0.0.0.0

参数含义:

agent

  -server表示启动的是一个服务

  -bootstrap-expect 1 表示等待多少个节点再启动,这里1个,就是自己一个就

  启动了

  -node=texun_1 就是给consul服务起个别名为ali_1

  -bind=172.17.114.76  绑定内网ip

  -data-dir /opt/data1  数据存储目录为/opt/data1

  -ui 启动默认ui界面

  -client  consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服

  务,默认是127.0.0.1,可指定允许客户端使用什么ip去访问

Consul-api常用命令

注册服务:

curl -X PUT -d "ID":"order_1","Name":"order","Tags":["xdp-\\/core.order"],"Address":"192.168.232.201","Port":18307,"Check":"name":"order_1.check","tcp":"192.168.232.201:18307","interval":"10s","timeout":"2s" http://192.168.232.204:8550/v1/agent/service/register

查询服务:

curl http://192.168.232.204:8550/v1/health/service/order?dc=xdp_dc&passing=true

dc : 表示数据中心是xdp_dc (存储信息记录)

passing : 表示健康检测是通过的

查询所有服务:

curl http://192.168.232.204:8550/v1/agent/services?dc=xdp_dc

注销服务:

curl -X PUT http://192.168.232.204:8550/v1/agent/service/deregister/order_1?dc=xdp_dc

查询所有k/v:

curl http://192.168.232.204:8550/v1/kv/?recurse

添加key/value :

curl -X PUT -d test http://192.168.232.204:8550/v1/kv/abc/key1
key: abc/key1
value:test

修改k/v:

curl -X PUT -d test666 http://192.168.232.204:8550/v1/kv/abc/key1

删除key:

curl -X DELETE  http://192.168.232.204:8550/v1/kv/abc/key1

docker 安装consul

下载consul镜像docker pull consul:1.4.4

#创建自定义网段

[root@localhost docker]# docker network create --subnet=172.200.7.0/100 mynetwork
d8c3c71a6b4d4dcaf348830c97c5b489626a1a6f3627419d395d99e16852caad
创建容器#启动第1个Server节点,集群要求要有3个Server,将容器8500端口映射到主机8900端口,同时开启管理界面
docker run -d
-p 8510:8500 //配置端口映射
-v/docker/consul/data/server1:/consul/data //配置文件夹映射 没有则自动创建
-v/docker/consul/conf/server1:/consul/config //配置文件夹映射
-e CONSUL_BIND_INTERFACE=eth0 //配置使用网络
--network=mynetwork //配置网络
--ip 172.200.7.6 //自定义指定ip地址
--privileged=true --name=consul_server1 consul:1.4.4 //配置自启动 别名
agent -server -bootstrap-expect=3 //配置服务节点3个
-ui -node=consul1.4.4_server_public_2 //配置web页面
-client=0.0.0.0 //配置客户端响应
-data-dir /consul/data //配置consul存储地址
-config-dir /consul/config //配置文件存储地址
-datacenter=xdp_dc //数据中心名称

具体执行的命令 必须输入成一行

[root@localhost config]# docker run -d -p 8510:8500 -v/docker/consul/data/server1:/consul/data -v/docker/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.6 --privileged=true --name=consul_server1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul1.4.4_server_public_2 -client=0.0.0.0 -data-dir /consul/data -config-dir /consul/config -datacenter=xdp_dc
1be16c0c0314449c5c6729d72480b606a19bfeeba7e952926d8c1104e4e60c4e
[root@localhost config]#
[root@localhost config]# docker run -d -p 8520:8500 -v /docker/consul/data/server2:/consul/data -v /docker/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.7 --privileged=true --name=consul_server_2 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_public_3 -client=0.0.0.0 -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
0773aee815d29e4f03d41a2f4fb52291d97fe957bff5480ed68bc48e6cfa8071
[root@localhost config]#
[root@localhost config]# docker run -d -p 8530:8500 -v /docker/consul/data/server3:/consul/data -v /docker/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.8 --privileged=true --name=consul_server_3 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_public_4 -client=0.0.0.0 -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
6bbf455ed8c7a335031615109635dc2b6cb28003fe4c94e2ffb1e5764a64ac80

查询是否已经配置固定ip地址
[root@localhost config]# docker inspect consul_server1 | grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.200.7.6",

5台server节点  2台client节点

docker run -d -p 8510:8500 -v /docker/consul/data/server1:/consul/data -v /docker/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.6 --privileged=true --name=consul_server1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul1.4.4_server_1 -client=0.0.0.0 -data-dir /consul/data -config-dir /consul/config -datacenter=consul_data
docker run -d -p 8520:8500 -v /docker/consul/data/server2:/consul/data -v /docker/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.7 --privileged=true --name=consul_server2 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_2 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8530:8500 -v /docker/consul/data/server3:/consul/data -v /docker/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.8 --privileged=true --name=consul_server3 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_3 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8540:8500 -v /docker/consul/data/server4:/consul/data -v /docker/consul/conf/server4:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.9 --privileged=true --name=consul_server4 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_4 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8550:8500 -v /docker/consul/data/server5:/consul/data -v /docker/consul/conf/server5:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.10 --privileged=true --name=consul_server5 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_5 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6

docker run -d -p 8610:8500 -v /docker/consul/data/client1:/consul/data -v /docker/consul/conf/client1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.100 --privileged=true --name=consul_client1 consul:1.4.4 agent -ui -node=consul1.4.4_client_1 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8620:8500 -v /docker/consul/data/client2:/consul/data -v /docker/consul/conf/client2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.101 --privileged=true --name=consul_client2 consul:1.4.4 agent -ui -node=consul1.4.4_client_2 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6

如果出现以下效果 则按照成功

20220714docker-Consul_数据中心_02

安装consul模板

# 1. 解压缩$ unzip consul-template_0.26.0_linux_386.zip#将执行文件(解压缩之后的文件夹),复制到/usr/local/bin文件夹下
cp consul-template /usr/local/bin
# 2. 设置环境变量,输入命令:
vim /etc/profile
# 3. 将这里的代码添加到 profile 文件末尾(这里覆盖之前consul的配置)
# Consul
export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template
export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME;
# 4. 执行命令使环境变量生效
source /etc/profile
# 5. 验证软件是否安装成功
consul-template -v

 Consul-template 实战配置文件生成

实战步骤:

1. Consul-template 定义模板文件: find_address.tpl#创建模板1be16c0c0314:/consul/config/tpl# pwd
/consul/config/tpl
1be16c0c0314:/consul/config/tpl# vi find_address.tpl
1be16c0c0314:/consul/config/tpl# more find_address.tpl
key "/hashicorp/street_address"

touch find_address.tpl
#定义模板内容项
key "/hashicorp/street_address"

2. consul-template读取KV数据,用于渲染生成配置文件#运行consul-template命令,
同时指定要使用的模板和需要更新的文件:consul-template -template "find_address.tpl:hashicorp_address.conf"

注: consul-template 命令会持续运行,可使用 CTRL+c 可以停止其运行。新开一个新终端,使用命令

行指令将数据写入Consul

3. 根据 consul kv 之类 

用来往consul的KV键值对中存入数据数据$ consul kv put hashicorp/street_address "127.0.0.1:8080"Success! Data written to: hashicorp/street_address
#查看hashicorp_address.conf 文件来确保有数据写入文件
cat /consul/config/tpl/hashicorp_address.conf
127.0.0.1:8080

4. 想要动态更新模板的值

再次 采用kv指令, 

consul kv put hashicorp/street_address "127.0.0.1:11000" 更新

hashicorp/street_address 值,可以看到该文件立即更新。有啥用? 比如用户可以用相同的过程来

更新HAProxy负载均衡器配置。

个人解释:模板文件位置:/consul/config/tpl模板文件名可以自定义 :需要在第二步执行命令是 将模板文件名以及需要更新的文件都指定好就行 consul-template -template "模板文件名:需输出的配置文件名称" 模板文件内容中的key :指的是需要到consul中的kv对应的键名 将值保持到上一步的“配置文件名称”中 具体的consul的kv 需要通过接口调用写入数据


Dockerfile构建镜像

1、先创建dockerfile文件名的文件,注意没有任何后缀

2、dockerfile 构建镜像的内容分段(须知:任何镜像都需要基于操作系统构建)

一、指定操作系统 / 已经构建好的别人或往期镜像

二、把软件安装的过程命令写在dockerfile中(安装程序)

三、配置系统如:开放端口、配置共享目录等

Dockerfile文件常用指令

FROM : 指定系统 / 镜像

RUN : 指定在系统中运行的命令 (讲究尽量多的命令合在一起)

EXPOSE : 指定镜像开放的端口

ENV :配置镜像环境

COPY : 复制主机的资源到镜像中

CMD : 指定容器启动的时候运行什么命令

Docker常用命令

1、根据dockerfile

docker build –t  镜像名 .

2、根据镜像名启动并运行起容器

docker run –itd --name 容器名  镜像名 -p=81:80

3、查看容器日志

docker log 容器id

4、查看容器进程

docker top 容器id

5、进入容器

docker  exec –it 容器名 bash/sh

1、查看所有镜像

docker images  .

2、删除镜像

docker rmi 镜像名  [-f  强制删除]

3、查看容器

docker ps  [-a  是查看所有容器]

4、查看容器进程

docker top 容器id

5、启动停止容器

docker start/stop 容器

Alpine镜像安装go问题

go在alpine系统采用的so不同导致的

情况:由于alpine镜像使用的是musl libc而不是gnu libc,/lib64/ 是不存在的。但他们是兼容的,可以创建个软连接过去.

解决:

mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

Docker网络

Docker网络和虚拟机一样;设定上分为三种

1、bridge : 桥接网络 (默认、常用)

2、none: 无指定网络 (没用过)

3、host:主机网络(特殊情况)

Docker网络-命令

创建网络

docker network create --subnet=192.168.1.0/24 mynetwork

使用

docker run -itd --network=redis-network --ip 192.168.1.10 --name dockerName imagesName

查看所有网络

docker network ls

删除网络

docker network rm mynetwork

Docker run-补充

docker run

  -d: 后台运行容器,并返回容器ID;

  -i: 以交互模式运行容器,通常与 -t 同时使用;

  -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  --name="nginx-lb": 为容器指定一个名称;

  -h "mars": 指定容器的hostname;

  -e username="ritchie": 设置环境变量;

  -m :设置容器使用内存最大值

  -v :与宿主机绑定共享目录

  -p :与宿主机绑定端口

  -ip : 定义网络ip

  --network:指定使用的网络

20220714docker-Consul_docker_03

20220714docker-Consul_ico_04

需要注意的是docker-composer运用的时候一定要注意版本的问题,如下图显示;

20220714docker-Consul_docker_05

Docker-compose安装

官网地址:https://docs.docker.com/compose/

安装:curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

version: "3.6" # 确定docker-composer文件的版本

services: # 代表就是一组服务 - 简单来说一组容器

  nginx: # 这个表示服务的名称,课自定义; 注意不是容器名称

    build: # 根据dockerfile构建镜像及构建为容器

      context: ./nginx

    image: nginx1.4_composer # 指定容器的镜像文件

    container_name: nginx-1.4-composer # 这是容器的名称

    ports: # 配置容器与宿主机的端口

      - "8001:80"

    privileged: true # 执行特殊权限的命令

    volumes: # 配置数据挂载

        - /redis_2004/09/nginx/conf:/conf

    working_dir: /conf #工作目录

docker-compose命令

运行编排好的容器

docker-compose up -d

停止编排好的容器

docker-compose stop

停止并删除编排好的容器

docker-compose down

Consul的API操作:

本地请求:基于 Agent

数据中心请求:基于 catalog 类型

注册服务:

格式: 

http://ip:port/v1/kv/key ​​http://192.168.30.128:8530/v1/kv/config/db/connection​​
# CURL:
curl -X DELETE http://192.168.30.128:8530/v1/kv/config/db/connection

# 请求例子:

docker-Consul概述及集群搭建

docker-Consul概述以及集群环境搭建

docker-Consul的概述及consul集群环境的搭建

docker-Consul的概述及consul集群环境的搭建

docker-Consul的概述及consul集群环境的搭建

node.js下使用RSA加密事例(windows)