前面已經講解過docker的一些基礎使用,鏡像建立的操做過程,若是大量容器須要同時部署,一個一個容器進行服務器上的部署,估計要瘋掉,在使用上咱們須要找到更好更便捷的使用方式,今天要講解的容器編排工具docker-compose就是其中之一python
Compose是一個用於定義和運行多容器Docker應用程序的工具。使用Compose,您可使用YAML文件來配置應用程序的服務。而後,使用單個命令,您能夠從配置中建立並啓動全部服務。mysql
docker-compose做爲容器編排工具,專門用於處理多容器部署問題,固然,目前對於系統運維有更好的處理方式,好比k8s,因爲筆者並非系統運維人員,因此不會涉及這麼深刻,本文也只是淺顯的介紹下docker-compose,記錄下本身的使用過程nginx
compose使用項目名稱將環境彼此隔離。每次咱們使用docker-compose建立多個容器時,其會自動幫咱們將彼此環境進行隔離,很是有用sql
這裏可使用-p
參數來設置這次compose啓動的項目名,能夠自行安裝測試下docker
compose會緩存用於建立容器的配置。當從新啓動未更改的服務時,compose將從新使用現有容器。重用容器意味着您能夠很是快速地更改環境。好比當咱們使用compose啓動一組容器時,若是咱們更新了其中一個容器所使用的鏡像,當咱們執行更新容器命令時,docker-compose不會更新全部容器,只會更新那個改變了鏡像的容器shell
compose支持在compose文件中定義變量。您可使用這些變量爲不一樣環境或不一樣用戶自定義組合,參考官方文檔:數據庫
https://docs.docker.com/compose/extends/vim
首先須要安裝docker環境,而後再安裝docker-compose,筆者是在centos7環境下安裝的centos
1.安裝依賴環境緩存
sudo yum install epel-release sudo yum install -y python-pip
2.安裝docker-compose
sudo pip install docker-compose
以我本身的網站爲例,目前我的網站部署在阿里雲服務器上,以使用docker-compose進行部署,目前環境以下:
關於博客系統的部分,本人已部署過ghost,wordpress,太複雜感受不適合我,目前選擇了輕量級博客solo,後期有更適合的可能會進行替換
雖然只有一臺雲服務器,本人仍是部署了集羣服務,雖然沒什麼用,只是想多實踐下,nginx單節點,solo雙節點,mysql單節點,目前我的博客環境就是這樣
建立docker-compose.yml文件,vim操做修改以下,其中有些地方解釋下:
在配置文件中,將須要保存的文件映射到宿主機上,即你本身的服務器真實目錄或文件上,方便下次進行遷移或者容器出現沒法恢復的問題時從新部署,其中須要注意的是,若是沒有進行網絡相關配置,且沒有將端口與主機進行映射,則其會自行建立網絡,使得這組容器能夠相互訪問,可是外界不能訪問,宿主機也不行。這裏將nginx容器進行了端口映射,這組容器只能經過這兩個端口進行訪問
nginx的配置文件中,若是配置了upstream,這裏對應的server寫solo_1:8080便可,對應配置文件,你能夠把這裏理解成這組容器中這個域名對應solo_1容器服務,至於nginx的配置文件部分,就不貼出來了,沒有太多複雜的部分,自行找資料進行配置
version: '2' services: solo_db: image: mysql:latest container_name: solo_db volumes: - /var/solomysql/data:/var/lib/mysql # 將數據庫文件映射到本地服務器便於遷移 restart: always expose: - 3306 environment: MYSQL_ROOT_PASSWORD: 1234 MYSQL_USER: root MYSQL_PASSWORD: so MYSQL_DATABASE: so solo_1: depends_on: - solo_db image: b3log/solo:v3.6.3 container_name: solo_1 volumes: # 日誌配置文件和皮膚映射便於我配置修改,添加皮膚 - /root/solodata/log4j.properties:/opt/solo/WEB-INF/classes/log4j.properties - /root/solodata/skins/:/opt/solo/skins/ links: - solo_db expose: - 8080 restart: always environment: RUNTIME_DB: MYSQL JDBC_USERNAME: so JDBC_PASSWORD: so JDBC_DRIVER: com.mysql.jdbc.Driver JDBC_URL: jdbc:mysql://solo_db:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.gclearning.cn solo_2: depends_on: - solo_db image: b3log/solo:v3.6.3 container_name: solo_2 volumes: - /root/solodata/log4j.properties:/opt/solo/WEB-INF/classes/log4j.properties - /root/solodata/skins/:/opt/solo/skins/ links: - solo_db expose: - 8080 restart: always environment: RUNTIME_DB: MYSQL JDBC_USERNAME: so JDBC_PASSWORD: so JDBC_DRIVER: com.mysql.jdbc.Driver JDBC_URL: jdbc:mysql://solo_db:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.gclearning.cn solonginx: image: docker.io/nginx:1.0 # 我本身將官方nginx鏡像時區修改了下從新打包的鏡像,用官方鏡像也可,日誌部分時間相差8個時區 container_name: solonginx links: - solo_1 - solo_2 ports: - 80:80 - 443:443 volumes: # nginx配置文件,靜態資源,證書等目錄映射到宿主機上,可根據須要自行配置 - /root/solonginx/nginxconfig/nginx.conf:/etc/nginx/nginx.conf - /root/solonginx/nginxconfig/conf.d:/etc/nginx/conf.d - /root/solonginx/log/:/var/log/nginx/ - /root/solonginx/nginxconfig/cert/:/etc/nginx/cert/ - /root/solonginx/nginxconfig/www/:/var/www/
在你所建立的docker-compose目錄下,執行以下命令,便可啓動一組容器
docker-compose up -d
docker-compose ps
查看容器狀態,處於up狀態,則表示容器建立成功,以下:
若是咱們修改了nginx配置,只須要對其中的nginx容器進行重啓便可,執行以下命令:
docker-compose restart solonginx
docker-compose爲咱們同時操做一組容器提供了便捷的方式,多個服務之間須要進行編排,端口,網絡,硬件配置等在咱們定義好了以後能夠方便咱們進行部署,遷移,若是以後出現了沒法恢復的問題,咱們能夠將落地的數據進行遷移,瞬間啓動一組環境來對外提供服務,極大的解放了運維人員的生產力,也不用再爲安裝一堆依賴環境而頭疼,也不用再記錄各個服務之間的關係,配置等而憂慮
在學習與使用docker的過程當中,愈來愈感受到這種技術對運維的重要性(雖然我不是運維),開發人員固然也須要去了解其使用,會讓你看到一個更開闊的技術領域
以上內容若有問題歡迎指出,筆者驗證後將及時修正,謝謝