本文主要談談關於單機 docker 在部署多個依賴的容器的時候如何把敲命令轉換成配置文件形式!html
docker composemysql
簡單的瞭解一個概念,容器編排:git
指定容器以什麼順序,什麼配置,這麼運行,就是容器編排。而 docker compose 就是這也一個容器編排工具,適用於單機 docker!github
須要知道,docker compose 並未集成到 docker 中,須要手動下載:web
找到 Linux 的安裝方法安裝好便可,其實就是一個命令腳本!sql
# 下載 curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 修改權限 chmod +x /usr/local/bin/docker-compose # 創建軟連接 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 查看 docker-compose --version
若是 github 下載慢可使用國內的地址:docker
http://get.daocloud.io/數據庫
下載:flask
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
關於 docker compose 最重要的就是 docker-compose.yml 文件,該文件定義了容器得運行方式。
其主要關鍵字包含:services,networks,volumes
這裏以安裝 wordpress 博客爲例:
version: "3" # 容器 services: # 數據庫容器 wordpress-db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress volumes: - wordpress-db-data:/var/lib/mysql networks: - wordpress-bridge # web 服務容器 wordpress-web: image: wordpress ports: - 8000:80 environment: WORDPRESS_DB_HOST: wordpress-db WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: 123456 WORDPRESS_DB_NAME: wordpress networks: - wordpress-bridge # 存儲卷 volumes: wordpress-db-data: # 網絡 networks: wordpress-bridge: driver: bridge
說明:
1. 在舊版本中,version 可能會有 2 這些狀況,建議咱們的都用 3,兼容性更強,注意須要引號。
2. 注意關鍵字的單數和複數的使用,若是是複數,說明該值是列表,那麼值前面就須要橫線 -。
3. 配置中的環境變量都是來源於該鏡像的官方文檔。
4. 爲了項目分開,咱們通常都會選擇不通的項目建立不一樣的單獨的網絡環境用於區分。
5. 頂級的 volumes 和 networks 其實都相似於聲明的做用。
固然還有一些其它的關鍵字,可是通常不多用,能夠本身去了解,相似 depends_on 這種。
啓動:
docker-compose -f docker-compose.yml up
結果如圖:
使用 -f 指定配置文件,up 啓動,可是是前臺啓動,意味着 ctrl + c 就能中止容器,適用於調試階段。最後加個 -d 參數就能夠後臺運行。
訪問測試:
除此以外,該命令的使用方法其實和 docker 相似,能夠經過 help 查看用法:
docker-compose -f docker-compose.yml --help
結果如圖:
其中主要的包含:ps(查看定義的全部容器),stop(中止全部定義的容器),start,up,down(中止並刪除),固然也可使用 rm 刪除。
docker compose 負載均衡
項目仍是以以前的 Flask redis 爲例:
配置 docker-compose.yml 以下:
version: "3" # 容器 services: redis-demo: image: redis networks: - flask-bridge flask-demo: build: context: . dockerfile: Dockerfile environment: REDIS_HOST: redis-demo networks: - flask-bridge loadblance-demo: image: dockercloud/haproxy links: - flask-demo ports: - 8000:80 volumes: - /var/run/docker.sock:/var/run/docker.sock networks: - flask-bridge # 網絡 networks: flask-bridge: driver: bridge
值得注意的是,咱們這裏 flask 並未直接指定鏡像,而是使用 Dockerfile 構建的鏡像。
這裏也使用了一個新的容器:haproxy
此時運行容器:
docker-compose -f docker-compose.yml up
啓動以後查看生成的鏡像:
能夠發現名字是拼接造成的,一個是目錄的名字,一個是配置中指定名稱。
一樣的查看新增的網絡:
也是如此,都不是咱們直接在文件中配置的,都是通過拼接而來。
固然,這並不能知足標題提到的負載均衡,畢竟 flask 默認只運行了一個容器,此時咱們中止容器再度從新運行:
docker-compose -f docker-compose.yml up --scale flask-demo=3 -d
經過 up 後面的 --scale 參數指定配置文件中的某個容器運行多少個實例。
查看容器運行狀況:
此時訪問測試:
再訪問:
這也就會發現會在三個容器之間不通的切換,以此來實現了負載均衡。