Docker compose開發與應用
阿新 • • 發佈:2019-01-03
一.通過容器部署一個WordPress
1.wordpress組成
- 前端軟體
- 資料庫儲存
2.操作流程
- 建立mysql的container
docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql
其中資料庫使用者名稱和密碼都是root,且有一個數據庫叫wordpress - 建立wordpress的container
docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress
- 訪問本地的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 ......
- 從dockerhub中獲得image
三.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
檢視當前啟動的servicedocker-compose stop
停掉當前啟動的service(但不remove,可以重新start)docker-compose start
啟動yml中的servicedocker-compose down
停掉所有的service(沒法再start,但沒有刪除image)docker-compose images
可以檢視docker compose中的container以及他們的imagesdocker-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啟動專案快捷方便