Consul:11:官方鏡像使用說明

在這裏插入圖片描述
這篇文章介紹一下Consul的官方鏡像的使用方法。

鏡像拉取

以1.7.1爲例,可以使用如下命令進行官方鏡像的拉取。

執行命令:docker pull consul:1.7.1

liumiaocn:~ liumiao$ docker images |grep consul
consul                                          1.7.1                           7f2bcf61cdf1        9 days ago          116MB
liumiaocn:~ liumiao$

Dockerfile

以1.7.1爲例,官方鏡像的Dockerfile鏈接爲:Dockerfile

可以確認的內容如下:

  • 基礎鏡像使用Alpine:FROM alpine:3.9
  • 環境變量明示地設定了如下幾個:
    ENV CONSUL_VERSION=1.7.1
    ENV HASHICORP_RELEASES=https://releases.hashicorp.com
  • 提供了不同類型的二進制版本,比如arm64、x86(32位)和x86(64位)等
  • EXPOSE的端口主要如下:
    8300: 用於Client和Server之間的通信
    8301、8302: 用於LAN GOSIP 和WAN GOSIP方式的通信
    8500、8600: 用於HTTP或者DNS方式的用戶交互
  • 缺省方式啓動使用開發模式,生產環境需要注意不要直接使用:CMD [“agent”, “-dev”, “-client”, “0.0.0.0”]
  • 掛載卷:使用VOLUME聲明的可用於掛載的卷爲/consul/data,主要用於Consul的數據的存儲。
  • 配置目錄:在Dockerfile中創建了/consul/config,結合官方鏡像的說明可以看到,此目錄用於Consul的配置,雖然在Dockerfile中沒有使用VOLUME進行聲明,用戶可以直接將配置文件與此目錄進行掛載關聯,另外還可以通過CONSUL_LOCAL_CONFIG環境變量進行修改。
  • 其他環境變量:在Dockerfile中使用ENV聲明和設定的環境變量只有VERSION和RELEASES兩個,但是除此之外還有Consul自身的環境變量,比如:CONSUL_LOCAL_CONFIG、CONSUL_CLIENT_INTERFACE和CONSUL_BIND_INTERFACE等。

啓動服務

執行如下命令即可啓動Consul服務

docker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul

liumiaocn:~ liumiao$ docker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul
6e9e999be7b0c7825d62efb30dfa62d7f5b3cd4c43e3c476807ca3df3e6384e7
liumiaocn:~ liumiao$ docker ps |grep consul
6e9e999be7b0        consul                                         "docker-entrypoint.s…"   6 seconds ago       Up 4 seconds        8300-8302/tcp, 8500/tcp, 8301-8302/udp, 8600/tcp, 8600/udp   dev-consul
liumiaocn:~ liumiao$ 

從日誌中可以看到Consul的啓動的詳細信息

liumiaocn:~ liumiao$ docker logs dev-consul
==> Found address '172.17.0.3' for interface 'eth0', setting bind option...
==> Starting Consul agent...
           Version: 'v1.7.1'
           Node ID: '5dab51ac-5463-e398-3c9b-0b177538b823'
         Node name: '6e9e999be7b0'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 172.17.0.3 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

    2020-03-01T22:51:51.640Z [DEBUG] agent: Using random ID as node ID: id=5dab51ac-5463-e398-3c9b-0b177538b823
    2020-03-01T22:51:51.641Z [DEBUG] agent.tlsutil: Update: version=1
    2020-03-01T22:51:51.642Z [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
    2020-03-01T22:51:51.642Z [INFO]  agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:5dab51ac-5463-e398-3c9b-0b177538b823 Address:172.17.0.3:8300}]"
    2020-03-01T22:51:51.642Z [INFO]  agent.server.raft: entering follower state: follower="Node at 172.17.0.3:8300 [Follower]" leader=
    2020-03-01T22:51:51.643Z [INFO]  agent.server.serf.wan: serf: EventMemberJoin: 6e9e999be7b0.dc1 172.17.0.3
    2020-03-01T22:51:51.644Z [INFO]  agent.server.serf.lan: serf: EventMemberJoin: 6e9e999be7b0 172.17.0.3
    2020-03-01T22:51:51.644Z [INFO]  agent.server: Handled event for server in area: event=member-join server=6e9e999be7b0.dc1 area=wan
    2020-03-01T22:51:51.644Z [INFO]  agent.server: Adding LAN server: server="6e9e999be7b0 (Addr: tcp/172.17.0.3:8300) (DC: dc1)"
    2020-03-01T22:51:51.645Z [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=tcp
    2020-03-01T22:51:51.645Z [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=udp
    2020-03-01T22:51:51.645Z [INFO]  agent: Started HTTP server: address=[::]:8500 network=tcp
    2020-03-01T22:51:51.645Z [INFO]  agent: Started gRPC server: address=[::]:8502 network=tcp
    2020-03-01T22:51:51.645Z [INFO]  agent: started state syncer
==> Consul agent running!
    2020-03-01T22:51:51.714Z [WARN]  agent.server.raft: heartbeat timeout reached, starting election: last-leader=
    2020-03-01T22:51:51.714Z [INFO]  agent.server.raft: entering candidate state: node="Node at 172.17.0.3:8300 [Candidate]" term=2
    2020-03-01T22:51:51.714Z [DEBUG] agent.server.raft: votes: needed=1
    2020-03-01T22:51:51.714Z [DEBUG] agent.server.raft: vote granted: from=5dab51ac-5463-e398-3c9b-0b177538b823 term=2 tally=1
    2020-03-01T22:51:51.714Z [INFO]  agent.server.raft: election won: tally=1
    2020-03-01T22:51:51.714Z [INFO]  agent.server.raft: entering leader state: leader="Node at 172.17.0.3:8300 [Leader]"
    2020-03-01T22:51:51.715Z [INFO]  agent.server: cluster leadership acquired
    2020-03-01T22:51:51.715Z [INFO]  agent.server: New leader elected: payload=6e9e999be7b0
    2020-03-01T22:51:51.718Z [DEBUG] connect.ca.consul: consul CA provider configured: id=07:80:c8:de:f6:41:86:29:8f:9c:b8:17:d6:48:c2:d5:c5:5c:7f:0c:03:f7:cf:97:5a:a7:c1:68:aa:23:ae:81 is_primary=true
    2020-03-01T22:51:51.729Z [INFO]  agent.server.connect: initialized primary datacenter CA with provider: provider=consul
    2020-03-01T22:51:51.729Z [INFO]  agent.leader: started routine: routine="CA root pruning"
    2020-03-01T22:51:51.729Z [DEBUG] agent.server: Skipping self join check for node since the cluster is too small: node=6e9e999be7b0
    2020-03-01T22:51:51.729Z [INFO]  agent.server: member joined, marking health alive: member=6e9e999be7b0
    2020-03-01T22:51:51.890Z [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
    2020-03-01T22:51:51.892Z [INFO]  agent: Synced node info
    2020-03-01T22:51:53.154Z [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
    2020-03-01T22:51:53.154Z [DEBUG] agent: Node info in sync
    2020-03-01T22:51:53.154Z [DEBUG] agent: Node info in sync
    2020-03-01T22:51:53.719Z [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
liumiaocn:~ liumiao$ 

缺省方式將所有的信息沒有做持久化保存,但是非常容易使用,比如將啓動的8500端口映射出來,即可通過8500訪問web UI界面了

執行命令:docker run -d --name=dev-consul -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul

在這裏插入圖片描述
進入到容器中確認Consul信息

liumiaocn:~ liumiao$ docker exec -it dev-consul sh
/ # consul members
Node          Address          Status  Type    Build  Protocol  DC   Segment
fce21704e8a1  172.17.0.3:8301  alive   server  1.7.1  2         dc1  <all>
/ # 

參考內容

https://hub.docker.com/_/consul?tab=description

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章