Docker那些事兒之編排工具docker-compose

前面已經講解過docker的一些基礎使用,鏡像建立的操做過程,若是大量容器須要同時部署,一個一個容器進行服務器上的部署,估計要瘋掉,在使用上咱們須要找到更好更便捷的使用方式,今天要講解的容器編排工具docker-compose就是其中之一python

簡介

Compose是一個用於定義和運行多容器Docker應用程序的工具。使用Compose,您可使用YAML文件來配置應用程序的服務。而後,使用單個命令,您能夠從配置中建立並啓動全部服務。mysql

docker-compose做爲容器編排工具,專門用於處理多容器部署問題,固然,目前對於系統運維有更好的處理方式,好比k8s,因爲筆者並非系統運維人員,因此不會涉及這麼深刻,本文也只是淺顯的介紹下docker-compose,記錄下本身的使用過程nginx

特徵

單個主機上的多個隔離環境

compose使用項目名稱將環境彼此隔離。每次咱們使用docker-compose建立多個容器時,其會自動幫咱們將彼此環境進行隔離,很是有用sql

  • 在開發主機上,建立單個環境的多個副本,例如當您要爲項目的每一個功能分支運行穩定副本時
  • 在CI服務器上,爲了防止構建相互干擾,能夠將項目名稱設置爲惟一的構建號
  • 在共享主機或開發主機上,以防止可能使用相同服務名稱的不一樣項目相互干擾

這裏可使用-p參數來設置這次compose啓動的項目名,能夠自行安裝測試下docker

僅從新建立已更改的容器

compose會緩存用於建立容器的配置。當從新啓動未更改的服務時,compose將從新使用現有容器。重用容器意味着您能夠很是快速地更改環境。好比當咱們使用compose啓動一組容器時,若是咱們更新了其中一個容器所使用的鏡像,當咱們執行更新容器命令時,docker-compose不會更新全部容器,只會更新那個改變了鏡像的容器shell

共享文件和項目配置

compose支持在compose文件中定義變量。您可使用這些變量爲不一樣環境或不一樣用戶自定義組合,參考官方文檔:數據庫

https://docs.docker.com/compose/extends/vim

使用步驟

  • 定義您的應用程序環境,Dockerfile以即可以在任何地方進行復制
  • 定義構成應用程序的服務,docker-compose.yml 以便它們能夠在隔離的環境中一塊兒運行
  • Run docker-compose up和Compose啓動並運行整個應用程序

安裝

首先須要安裝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進行部署,目前環境以下:

  • nginx前置機
  • solo博客服務
  • 數據庫mysql

關於博客系統的部分,本人已部署過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的過程當中,愈來愈感受到這種技術對運維的重要性(雖然我不是運維),開發人員固然也須要去了解其使用,會讓你看到一個更開闊的技術領域

以上內容若有問題歡迎指出,筆者驗證後將及時修正,謝謝

相關文章
相關標籤/搜索