1. 程式人生 > >Docker compose開發與應用

Docker compose開發與應用

一.通過容器部署一個WordPress

1.wordpress組成

  • 前端軟體
  • 資料庫儲存

2.操作流程

  • 建立mysql的containerdocker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql其中資料庫使用者名稱和密碼都是root,且有一個數據庫叫wordpress
  • 建立wordpress的containerdocker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress
    設定wordpress的db主機埠,並通過-p將8080對映到80
  • 訪問本地的127.0.0.1則會啟動wordpress

3.思考

  • 像這樣互相提供服務的container可以統一定義成一個組group,統一的建立,統一的刪除,從而docker compose就誕生了

二.Docker compose簡介——批處理

  • Docker compose是一個工具[安裝docker時會攜帶安裝]
  • 這個工具可以通過一個yml檔案定義多容器的docker應用【預設docker-compose.yml】
  • 通過一條命令就可以根據yml檔案的定義取建立或者管理多個容器

1.docker-compose.yml的三大概念

  • Services
    • 一個service代表一個container,這個container可以從dockerhub的image來建立,或者從本地的Dockerfile build出來的image來建立
    • Service的啟動類似docker run,我們可以給其指定network和volume,所以可以給service指定network和volume的引用
  • Networks
    • 表示network網路連線
  • Volumes
    • 表示儲存volume
  • 示例檔案
    • 從dockerhub中獲得image
      version: '3' #表示使用的是docker compose的第三個版本
      service:
          db:
              image:postgres:9.4 #從dockerhub中拉取的
              volumes:
                  - "db-data:/var/lib/postgresql/data"
              networks:
                  - back-tier #使用的是下方的networks定義的別名
      volumes:
          db-data:
      networks:
          front-tier:
              driver:bridge
          back-tier:
              driver:bridge
      
      相當於
      docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4
      docker volume create db-data
      docker network create -d bridge back-tier
      
    • 從本地建立image
      services:
          worker:
              build: ./worker #指定本地的dockerfile地址
              links:
                  - db
                  - redis
              networks:
                  - back-tier
      ......
      

三.Docker compose使用(docker compose通常用於本地開發,檢視部署結果)

  • docker-compose up啟動docker compose的yml檔案中的所有container,預設尋找docker-compose.yml,如果使用docker-compose -f docker-compose.yml up則可以設定要啟動的yml檔案【如果有的image之前沒有,則可以先執行docker-compose build先build其中的image,這樣之後執行up時就會快些,up命令會先build再up】
  • docker-compose ps檢視當前啟動的service
  • docker-compose stop停掉當前啟動的service(但不remove,可以重新start)
  • docker-compose start啟動yml中的service
  • docker-compose down停掉所有的service(沒法再start,但沒有刪除image)
  • docker-compose images可以檢視docker compose中的container以及他們的images
  • docker-compose exec service名稱 bash在指定service中執行某命令
  • 利用docker-compose做水平擴充套件與負載均衡
    • 可以利用docker-compose --scale service名稱=指定數量 -d up指定啟動某服務多少個
    • 這樣比如啟動4個web服務並訪問同一個redis時,服務前新增load balancer可以做到負載均衡
    • yml檔案內容
      services:
          redis:
              image:redis
          web: #為python寫的flask程式
              build:
                  context: . #表示在當前目錄
                  dockerfile:Dockerfile
              environment:
                  REDIS_HOST:redis
          lb: #load balancer
              image:dockercloud/haproxy
              links:
                  - web
              ports:
                  - 8080:80
              volumes:
                  - /var/run/docker.sock:/var/run/docker.sock
      
    • docker-compose up --scale web=3 -d執行此命令會開啟3個web服務和一個redis服務,訪問127.0.0.1:8080時會經過load balancer負載均衡輪詢訪問其中的web服務
  • 例項部署
    • 功能需求:部署 1個投票伺服器A,接redis伺服器R,接Java伺服器用作實時計算J,接資料儲存的pg伺服器PG,1個檢視投票結果伺服器B直接連pg伺服器
    • A/B/J伺服器專案都自行編寫邏輯完成並新增dockerfile檔案
    • 利用docker-compose設定啟動所有伺服器並相互連線,編寫docker-compose.yml檔案
    • 執行docker-compose up則會一步構建整個專案,直接訪問埠檢視即可
    • 故使用docker-compose啟動專案快捷方便