cc老師最新一期的高級架構師課程終於肯定日期了,7月6號正式開課,如今618活動,不限時免費更新課程是最大的賣點,裏面包含了如今主流的架構,以及最新的技術,聽說從理論到運用所有帶着作,像如今面試經常使用的 Netty, Redis, Kafka,Zookeeper, Dubbo, Nginx + openResty + kong + Lua, ElasticSearch等技術都深刻源碼層級,對於有想跟我同樣有着像提升自身技術的同窗,課程的詳情都在私塾的首頁詳細說明了,感興趣的小夥伴,能夠一塊兒去 【 私塾在線 】 學習
Docker的最佳實踐建議:一個容器只運行一個進程。而實際的應用會由多個組件構成,要運行多個組件就須要運行多個容器,這就須要對這多個容器進行編排。
所謂編排:主要就是多個docker容器的自動配置、協做和管理服務的過程。Docker提供了docker-compose工具來實現。python
compose是用來定義和運行一個或多個容器應用的工具,使用python開發,經過yml文件來定義多個容器應用,很是適合在單機環境下部署一個或多個容器,並自動把多個容器互相關聯起來。
其實,docker-compose作的就至關於解析配置文件,而後按照配置去執行一系列的docker命令。mysql
官方安裝文檔:https://docs.docker.com/compo...
Docker-compose基本示例
1:準備好要啓動的鏡像,雖然能夠直接在compose裏面build鏡像,建議仍是先準備好
2:編寫docker-compose.yml
3:而後就docker-compose up -d,啓動就行了
4:docker-compose.yml示例以下:nginx
version: '2' services: mysqldb: image: 'mysql:latest' environment: - MYSQL_ROOT_PASSWORD=cc volumes: - /ccuse/programes/mysqldata:/var/lib/mysql privileged: true web: image: 'cctomcat:9.0' ports: - "9080:8080" volumes: - /ccuse/programes/tomcat9docker/webapps/test:/usr/local/tomcat/webapps/test privileged: true links: - mysqldb:dblink
1:一份標準配置文件能夠包含 version、services、networks 三大部分,詳細的參照指南見官方網站: https://docs.docker.com/compo...
2:version目前是有1,2,3這麼三個
3:srvices常見的配置有:
(1)服務名稱:用來表示一個服務,自定義的
(2)image:指定服務的鏡像名稱或鏡像 ID。若是鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像,Build和image必須使用一個。
(3)build:web
服務除了能夠基於指定的鏡像,還能夠基於一份 Dockerfile,在使用 up 啓動之時執行構建任務,這個構建標籤就是 build,它能夠指定 Dockerfile 所在文件夾的路徑。Compose 將會利用它自動構建這個鏡像,而後使用這個鏡像啓動服務容器。 若是你同時指定了 image 和 build 兩個標籤,那麼 Compose 會構建鏡像而且把鏡像命名爲 image 後面的那個名字。
(4)args:面試
相似Dockerfile 中的 ARG 指令,能夠在構建過程當中指定環境變量,構建成功後取消
(5)command:使用 command 能夠覆蓋容器啓動後默認執行的命令
(6)container_name:自定義容器的名稱
(7)links:指定與其它容器的鏈接,與Docker client的--link同樣效果
(8)volumes:將host主機上的路徑或文件,掛載到容器中
(9)ports:將host主機的端口映射到容器的某個端口
(10)environment:設置環境變量, 與Dockerfile 中的 ENV 指令同樣會把變量一直保存在鏡像、容器中,相似 docker run -e 的效果
(11)privileged:設置掛載目錄的權限
(12)depends_on:通常項目容器啓動的順序是有要求的,能夠用depends_on來解決容器的依賴、啓動前後的問題。
……還有不少,能夠查閱官方文檔。
Docker-compose 的networks配置sql
容器間的通信,除了使用--link外,如今更推薦使用自定義網絡,而後利用服務名進行通信。每一個自定義網絡均可以配置不少東西,包括網絡所使用的驅動、網絡地址範圍等設置。例如: networks: frontend: backend:
1:你會看到frontend、backend後面是空的,這是指一切都使用默認,換句話說,在單機環境中,將意味着使用 bridge 驅動;而在 Swarm 環境中,使用 overlay 驅動,並且地址範圍徹底交給 Docker 引擎決定。
2:而後在每一個services配置裏面,也有一個networks,用來指定服務要鏈接到哪些網絡上,能夠指定多個,例如:docker
services: nginx: ... networks: - frontend web: ... networks: - frontend - backend mysql: ... networks: - backend
3:鏈接到同一個網絡的容器,能夠進行互連;而不一樣網絡的容器則會被隔離。
4:處於同一網絡的容器,可使用服務名訪問對方
5:給前面的例子添加networks的配置,以下:tomcat
version: '2' services: mysqldb: image: 'mysql:latest' environment: - MYSQL_ROOT_PASSWORD=cc volumes: - /ccuse/programes/mysqldata:/var/lib/mysql privileged: true networks: - frontend web: image: 'cctomcat:9.0' ports: - "9080:8080" volumes: - /ccuse/programes/tomcat9docker/webapps/test:/usr/local/tomcat/webapps/test privileged: true links: - mysqldb:dblink networks: - frontend networks: frontend: backend:
1:compose:用來組裝多個容器構成應用的工具
2:machine網絡
machine是一個簡化Docker安裝的命令行工具,支持多平臺安裝docker,能夠方便的在各類環境,好比筆記本、雲平臺、數據中內心安裝docker。 machine本質上就是一個docker host主機和通過配置的docker client的結合體。
3:swarm架構
docker社區原生提供的容器集羣管理工具,能夠把多個docker主機組成的系統轉換成爲單一的虛擬docker主機
google推出的開源的Kubernetes,用於跨主機羣集自動部署,擴展和操做應用程序容器,提供以容器爲中心的基礎架構。利用Kubernetes能很方便管理多臺Docker主機中的容器。 主要功能以下:1:將多臺Docker主機抽象爲一個資源,以集羣方式管理容器,包括任務調度、資源管理、彈性伸縮、滾動升級等功能。2:使用編排系統快速構建容器集羣,提供負載均衡,解決容器直接關聯及通訊問題3:自動管理和修復容器,簡單說,好比建立一個集羣,裏面有十個容器,若是某個容器異常關閉,那麼會嘗試重啓或從新分配容器,始終保證有十個容器在運行。4:相似的主流工具還有: Apache的Mesos等