docker實現單節點consul的服務註冊於發現

一 搭建consul環境

1.從docker-hub上搜索拉取鏡像

docker search consul

docker pull consul

2 . 啓動consul鏡像
單節點啓動:

docker run -p 8500:8500/tcp consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0

服務器上不能被外部訪問:
consul agent -dev啓動的consul在雲服務器上是不能被外部訪問的,那麼要被外部訪問我們需要加參數,參照如下:

consul agent -dev -http-port 8500 -client 0.0.0.0

參數說明:

-client 0.0.0.0:表明不是綁定的不是默認的127.0.0.1地址,可以通過公網進行訪問

-http-port 8500:通過該參數可以修改consul啓動的http端口

-bootstrap-expect 指定consul將等待幾個節點連通,成爲一個完整的集羣

3 . 查看consul是否啓動成功

docker ps

在這裏插入圖片描述
可以看到容器已經啓動。

打開瀏覽器 輸入http://ip:8500後會出現下去的界面既表示成功。
在這裏插入圖片描述

二 構建應用鏡像並啓動
1 . 先看spring cloud 的 application.yml
服務端:

spring:
 application:
   name: springClound2
 cloud:
  consul:
   host: ip
   port: 8500
   discovery:
    serviceName: springClound3
    healthCheckInterval: 15s
    health-check-path: /home
    prefer-ip-address: true
server:
 port: 8802

其中ip更換爲consul的真實IP。
prefer-ip-address: true 的作用是將自己的ip註冊到consul中。

客戶端配置:(如果不需要註冊到consul上可以不配置discovery)

spring:
 application:
  name: springClound3
 cloud:
  consul:
   host: ip
   port: 8500
   discovery:
    serviceName: springClound4
server:
 port: 8805

2 . 編寫Dockerfile文件

FROM java
MAINTAINER zms
VOLUME /tmp
ADD democonsumer-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

FROM:
Docker是基於鏡像的部署,幸運的是Docker官方和開發者們爲我們維護了許多高質量的Docker鏡像,而基於這些鏡像我們能做出符合自己需求的鏡像。此處的FROM意思爲我們即將要創建的鏡像的基礎鏡像的名字,這個名字可以是我們本地已有的鏡像,也可以是Docker Hub上的鏡像,如果是Docker Hub上的鏡像,此時docker daemon會爲我們自動下載該鏡像。還有一個要注意的點,如果是本地鏡像要加上版本(鏡像名:版本號),否則默認版本號爲latest。

VOLUME:

Docker的運行相當於是操作系統的一個進程,但是該進程又與普通進程有些許不同,因爲該進程內部維護着的是我們的一個微服務的完整結構,而往往項目中需要運行的微服務都有記錄日誌或者其他寫出文件的功能。設想一下這樣的情況:我們的微服務現在正在運行,但是訪問量突然增大,開發人員又沒有關注到這一點,沒有進行水平擴展,這時候很有可能這個微服務就down了,而這個微服務一旦down了之後,出現的情況就是整個容器的status就變成了Exited,而此時如果將容器刪除,容器中的所有數據卷會跟隨容器一起刪除,因爲這些數據卷是臨時的。此處的映射路徑爲/usr/test。這是我們自定義的映射路徑,後續要演示記錄日誌的功能。當然也可以指定/tmp 其效果都是在主機的/var/lib/docker/volumes目錄下創建一個臨時文件,並鏈接到容器的鏈接路徑。而爲什麼鏈接到容器的/tmp目錄呢?因爲 Spring Boot 使用的內嵌 Tomcat 容器默認使用/tmp作爲工作目錄。當然此處的/tmp也可以變成你的日誌記錄文件夾,這樣就可以在本地實時查看日誌記錄了。

ADD:

將我們自身的項目admin.jar作爲app.jar加入到容器中。

EXPORT:
該命令用於聲明在運行時容器提供服務的端口。注意:這只是一個聲明,運行時並不會因爲該聲明就打開相應的端口。該指令的作用是幫助鏡像使用者理解該鏡像服務的守護端口;其次是當運行時使用隨機映射時(即run命令的-P參數),會自動映射EXPORT的端口。

ENTRYPOINT:
該命令制定Docker容器啓動時執行的命令,可多次設置,但只有最後一條會生效。
[“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 這條命令中可能部分讀者會對 Djava.security.egd=file:/dev/./urandom 這條命令有疑惑,這是因爲linux中和windows中取隨機數時的參考策略不同,linux默認的隨機數會被取完,導致返回-1.而制定/dev/./urandom這個取隨機數的策略時,當隨機數取完之後會返回僞隨機數,不至於影響業務。

3 執行命令 docker build -t dockertest/jar_test:0.01 . 創建鏡像

-t 表示打包成功後的鏡像tag 不要忘了最後一個點。.表示Dockerfile文件和jar包在同一個路徑,如果不在需要寫出Dockerfile的絕對路徑

4 啓動鏡像
docker run -p 8805:8805--name jar_test -d dockertest/jar_test:0.01

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