docker compose 快速編排
一、Docker-compose概述
1.Docker-Compose專案是Docker官方的開源專案,負責實現對Docker容叢集的快速編排
2.Docker-Compose將所管理的容器分為三層,分別是工程(project),服務(service)以及容器(container)。Docker-Compose執行目錄下的所有檔案(docker-compose.yml,extends檔案或環境變數檔案等)組成一個工程,若無特殊指定工程名即為當前目錄名。一個工程當中可包含多個服務,每個服務中定義了容器執行的映象、引數、依賴。一個服務當中可包括多個容器例項,Docker-Compose並沒有解決負載均衡的問題,因此需要藉助其它工具實現服務發現及負載均衡,比如 Consul
3.Docker-Compose的工程配置檔案預設為docker-compose.yml,可通過環境變數COMPOSE_FILE或-f引數自定義配置檔案,其定義了多個有依賴關係的服務及每個服務執行的容器
4.使用一個Dockerfile模板檔案,可以讓使用者很方便的定義一個單獨的應用容器。在工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個Web專案,除了Web服務容器本身,往往還需要再加上後端的資料庫服務容器,甚至還包括負載均衡容器等
5.Compose允許使用者通過一個單獨的docker-compose.yml模板檔案(YAML 格式)來定義一組相關聯的應用容器為一個專案(project)。
6.Docker-Compose專案由Python編寫,呼叫Docker服務提供的API來對容器進行管理。因此,只要所操作的平臺支援Docker API, 就可以在其上利用Compose來進行編排管理
二、YAML檔案格式及編寫注意事項
YAML 是一種標記語言,它可以很直觀的展示資料序列化格式,可讀性高。類似於 XML資料描述語言,語法比 XML 簡單的很多。YAML 資料結構通過縮排來表示,連續的專案通過減號來表示,鍵值對用冒號分隔,陣列用中括號 [] 括起來, hash 用花括號 {} 括起來
三、Docker Compose配置常用欄位
欄位 | 說明 |
---|---|
build | 指定 Dockerfile 檔名,要指定Dockerfile檔案需要在build標籤的子級標籤中使用dockerfile標籤指定 |
dockerfile | 構建映象上下文路徑 |
context | 可以是 dockerfile 的路徑,或者是指向 git 倉庫的 url 地址 |
image | 指定映象 |
command | 執行命令,覆蓋預設命令 |
container name | 指定容器名稱,由於容器名稱是唯一的,如果指定自定義名稱,則無法 scale |
deploy | 指定部署和執行服務相關配置,只能在 Swarm 模式使用 |
environment | 新增環境變數 |
networks | 加入網路 |
ports | 暴露容器埠,與 -p 相同,但埠不能低於 60 |
volumes | 掛載宿主機路徑或命令卷 |
hostname | 容器主機名 |
restart | 重啟策略,預設 no,always,no-failure,unless-stoped |
1.no,預設策略,在容器退出時不重啟容器
2.on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器
3.on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
4.always,在容器退出時總是重啟容器
5.unless-stopped,在容器退出時總是重啟容器,但是不考慮在 Docker 守護程序啟動時就已經停止了的容器
四、Docker Compose常用命令
build:重新構建服務
ps:列出容器
up:建立和啟動容器
exec:在容器裡面執行命令
scale:指定一個服務容器啟動數量
top:顯示容器程序
logs:檢視容器輸出
down:刪除容器、網路、資料卷和映象
stop/start/restart:停止/啟動/重啟服務
五、compose部署lnmp
5.1 Docker Compose環境安裝
Docker Compose 是 Docker 的獨立產品,因此需要安裝 Docker 之後在單獨安裝 Docker Compose
#下載 在Linux上我們可以從GitHub上下載它的二進位制包來使用,此命令是下載Docker Compose的當前穩定版本'
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安裝
chmod +x /usr/local/bin/docker-compose
#檢視版本
docker-compose --version
5.2 建立工作目錄並移動相應安裝包、配置檔案
----------------------nginx-----------------------------
1.mkdir -p /opt/compose-lnmp/nginx
2.cd /opt/compose-lnmp/nginx
3.把nginx-1.12.0.tar.gz和wordpress-4.9.4-zh_CN.tar.gz和nginx的配置檔案nginx.conf移進來(配置檔案都已經修改好)
----------------------mysql-----------------------------
1.mkdir -p /opt/compose-lnmp/mysql
2.cd /opt/compose-lnmp/mysql
3.把boost_1_59_0.tar.gz和mysql-5.7.17.tar.gz和mysql配置檔案my.cnf移動到本目錄(配置檔案都已經修改好)
----------------------php--------------------------------
1.mkdir -p /opt/compose-lnmp/php
2.cd /opt/compose-lnmp/php
3.把php-7.1.10.tar.bz2、php-fpm.conf、php.ini、www.conf移動到本目錄(配置檔案都已經修改好)
5.3 編寫dockerfile
在3個服務的工作目錄下編寫dockerfile,與之前的構建lnmp一致,這邊就不敘述了
5.4 構建lnmp的compose檔案
cd /opt/compose-lnmp #compose的工作目錄
vim docker-compose.yml #構建compose的yml檔案
version: '2' #版本2能使用volumes_from
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
ports:
- 1111:80
- 2222:443
volumes:
- ./nginx/html/:/usr/local/nginx/html
networks:
lnmp:
ipv4_address: 172.18.0.10
mysql:
hostname: mysql
build:
context: ./mysql
dockerfile: Dockerfile
container_name: mysql
networks:
lnmp:
ipv4_address: 172.18.0.20
ports:
- 3306:3306
php:
hostname: php
build:
context: ./php
dockerfile: Dockerfile
container_name: php
networks:
lnmp:
ipv4_address: 172.18.0.30
ports:
- 9000:9000
volumes_from:
- nginx
- mysql
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
5.5 啟動compose搭建的lnmp
cd /opt/compose-lnmp/
docker-compose -f docker-compose.yml up -d
----------------------------------------------------------
-f, --file FILE :使用特定的 compose 模板檔案,預設為 docker-compose.yml
-p, --project-name NAME :指定專案名稱,預設使用目錄名稱
-d :在後臺執行
----------------------------------------------------------
docker ps -a
5.6 進入資料庫容器給與許可權
docker exec -it mysql /bin/bash
mysql #進入資料庫
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '264196';
grant all privileges on *.* to 'root'@'%' identified by '264196';
flush privileges;
5.7 瀏覽器訪問
http://192.168.80.11:1111/wordpress/index.php