看了《微服務那些事》之后,Spring boot和Spring Cloud的關系理清楚了,Spring cloud各個模塊的作用也了解了。
但是,Spring cloud 與Docker的關系,Spring boot 與 Docker的關系,Spring cloud 的詳細使用,還是不了解。
《springcloud與docker微服務架構實戰》這本書,一共270頁,雖然介紹的不會太深入,不過,對於入門來說是很好的書,畢竟太厚的書不適合入門用。
這本書一共14章
第一章、微服務架構概述
第二章、Spring cloud 簡介
第三章、開始使用Spring cloud
第四章、微服務注冊與發現 Eureka
第五章、Ribbon實現客戶端負載均衡
第六章、Feign實現REST調用
第七章、Hystrix實現容錯處理
第八章、使用Zuul構建微服務網關
第九章、使用Spring Cloud Config 統一管理微服務的配置
第十章、Sleuth 實現微服務跟蹤
第11章、常見問題與總結
第12章、Docker
第13章、將微服務運行在Docker上
第14章、用Docker Compose編排微服務
第一章到第11章已經大體了解了,因此略看。
重點看12、13、14章,弄明白springboot、SpringCloud、Docker、Docker Compose之間的關系
第12章、Docker簡介
Client、Images、Container、Registry、Docker Hub
介紹了Docker的基本命令,由於我已經學了docker基礎,所以這部分就不再記錄。
第13章、將微服務運行在Docker上
構建一個Dockerfile文件。
執行docker build命令,示例如下:
docker build -t nginx:my.
Dockerfile的常用指令
ADD
ARG
ENV
CMD
EXPOSE
FROM
LABEL
MAINTAINER
RUN
USER
VOLUME
WORKDIR
使用方式
使用gradle打包項目
項目根目錄下建立文件Dockerfile,內容如下:
FROM java:8 VOLUME /tmp ADD build/libs/discovery-0.0.1-SNAPSHOT.jar /app.jar #修改文件的時間屬性為當前系統時間 RUN bash -c 'touch /app.jar' EXPOSE 8761 ENTRYPOINT java -jar /app.jar
docker build -t lakeslove/springcloud-blog-discovery:0.01 .
docker run -it -d -p 8761:8761 lakeslove/springcloud-blog-discovery:0.01
訪問 locahost:8761
推送到dockerhub
docker login
docker push lakeslove/springcloud-blog-discovery:0.01
插件的使用:docker-maven-plugin、gradle-docker-plugin等,插件挺多的,不過我們項目里沒用這類插件,直接在jenkins腳本里寫的,這塊暫時不研究。
第14章、使用DockerCompose 編排微服務
Compose是一個用於定義和運行多容器Docker應用程序的工具,非常適合在開發、測試、構建CI工作流等場景。
使用Compose大致有3步:
使用Dockerfile定義應用程序環境,以便在任何地方重現該環境
在docker-compose.yml文件中定義組成應用程序的服務,以便各個服務在一個隔離的環境中一起運行。
運行doker-compose up命令,啟動並運行整個應用程序
docker-compose.yml常用命令
通過 .env 文件來為 docker-compose.yml 文件引用的所有環境變量設置默認值,詳細參考 https://www.cnblogs.com/sparkdev/p/9826520.html
示例如下:
version: "3.3" services: eureka: build: . ports: - "8761:8761"
volumes:
- /opt/data:/var/lib/mysql
build 構建,后面跟Dockerfile路徑
ports 功能類似於 docker run -p
volumes 卷掛載路徑設置,通常作為路徑映射(host:container)
volumes_from 從另一個服務或容器掛載卷,可指定只讀ro,讀寫rw,默認是讀寫rw
docker-compose常用命令
build 構建或重新構建服務。
kill 停止指定服務的容器,例如:docker-compose kill eureka
logs 查看服務的日志輸出
port 打印綁定的公共端口,例如:docker-compose port eureka 8761,這樣就可以輸出eureka服務8761端口綁定的公共端口
ps 列出所有容器,例如:docker-compose ps
pull 下載服務鏡像
rm 刪除指定服務的容器,例如:docker-compose rm eureka
run 在一個服務上執行一個命令,例如:docker-compose run web bash
scale 設置指定服務運行容器的個數,以 service=num的形式指定,實例:docker-compose scale user=3 movie=3
start 啟動指定服務已存在的容器,例如:docker-compose start eureka
stop 停止已運行的容器,例如:docker-compose stop eureka
up 構建、創建、重新創建、啟動、連接服務的相關容器,所有連接的服務都會啟動,除非它們已經運行。
docker-compose up 命令會聚合所有容器的輸出,當命令退出時,所有容器都會停止,后台運行 docker-compose up -d
docker-compse的網絡設置
默認情況下,Compose 會為應用創建一個網絡,服務的每個容器都會加入該網絡中,這樣,容器就可以被該網絡中的其他容器訪問,不僅如此,該容器還能已服務名作為hostname被其他容器訪問。
默認情況下,應用程序的網絡名稱基於Compose的工程名稱,而工程名稱基於docker-compose.yml所在目錄的名稱,
如需修改工程名稱,可使用--project-name標識或COMPOSE_PROJECT_NAME環境變量
默認的是bridge網絡架構
Docker Compose,Docker Swarm,Kubernetes之間的區別:
Docker Compose是一個基於Docker的單主機容器編排工具,不能去啟動其他主機上的Docker容器
Docker Swarm和Kubernetes是基於Dcoker的跨主機的容器管理平台,
Docker Swarm則是由Docker 公司研發的,在與Kubernetes競爭中已經失勢,不必學習了。
所以,簡單了解一下Docker Compose,深入研究Kubernetes。