docker-compose集群部署說明
docker-compose.yml
YAML是(YAML Ain't Markup Language)的縮寫,一種case-sensitive的樣板標記語言,在編寫的過程中時不時的忘了空格或者縮排就會Error,整個檔案的內容格式都是一個dictionary結構的概念,因此用縮排來表示階層
Example:
version: '2'
services:
git:
container_name: gitlab
image: gitlab/gitlab-ce
volumes:
- "/data/gitlab/:/gitlab/data/"
ci:
container_name: jenkins
image: jenkins
volumes:
- "/data/jenkins/:/jenkins/data/"
db:
container_name: db
image: mariadb
ports:
- "3306:3306"
volumes:
- "/data/mysql/:/var/lib/mysql/"
env_file:
- ./service.env
cache:
container_name: cache
image: redis
api:
container_name: api
image: webdevops/php-nginx
volumes:
- "/opt/production/api/:/opt/production/"
ports:
- "83:80"
depends_on:
- db
- cache
env_file:
- ./service.env
links:
- db:database
- cache
depends_on:
- db
- cache
其中比較tricky的部分有
container_name
如果要做scale out的話就不用寫了,docker-compose會自己幫你命名,通常是{projectname}_{container_name}{#number} {project_name}就是資料夾的名字拉,如果要另外取名字的話在docker-compose up
時--project-name
就可以囉.
這邊嘗試在這scale out時發現mount起來的volume並不會動態的擴增,也就是說多個相同的container將會mount到同一個目錄
環境變數的話有兩種方式
env
可以指定到另外一個檔案裡面寫的就是變數的配置ex:MYSQL_ROOT_PASSWORD=123qwe
enviroment
就直接把變數寫在下方
-- MYSQL_ROOT_PASSWORD=123qwe
links
也是蠻實用的,一旦指定了要link到哪個container時當container建立時就會在host上建立一條routing rule並且在container內部的/etc/hosts上加上對應的hostname和ip
可以用在web-app server scale out時把啟動的container_name加入load balancer的config中upstream { webapp_1 webapp_2 }webapps
但這邊沒這麼方便的是docker-compose scale webapp=2後,已經啟動的load balancer並不會動態的加入webapp_2的routing和hostname,但也只要把docker-compose up一次,重新建立container就會有相關的資訊進去container了
docker-compose是看你切換在哪個目錄裡面就去讀對應的docker-compose.yml
假設有兩個資料夾裡面各有一份docker-compose.yml
- ci/cd 部署gitlab,jenkins
- web 部署nginx,mariadb,nginx-php,...etc
命令說明
把docker-compose.yml定義的
所有
容器建立起來並且跑在前景
>docker-compose up
把docker-compose.yml定義的
所有
建立起來並且跑在背景
>docker-compose up -d
把docker-compose.yml定義的
某一個
容器建立起來並且跑在背景
>docker-compose up {容器名稱} -d (前景就去掉-d吧)
把
所有的
容器幹掉並且!!!!幹掉所有的資料!!!!數據會通通不見
(volume,network)>docker-compose down -v (保留就去掉-v吧)
把
某一個
容器幹掉!!!!幹掉所有的資料!!!!數據會通通不見
>docker-compose down {容器名稱} -v (保留就去掉-v吧)
把
某一個
容器啟動|停止>docker-compose start|stop {容器名稱}
看
某一個
容器log並且不要停下來>docker-compose log {容器名稱} -f (想要停就去掉-f吧)
看
全部
容器log>docker-compose log -f (想要停就去掉-f吧)
把某一個
容器向外擴充
一下,就會蹦出另外一個 web container出來>docker-compose scale web=2
把某一個
容器縮回來
一下,注意一下container數量, 再scale down
>docker-compose scale web=1 (=0的時候就會默默停掉並且移除container)