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到同一個目錄

環境變數的話有兩種方式

  1. env 可以指定到另外一個檔案裡面寫的就是變數的配置ex:MYSQL_ROOT_PASSWORD=123qwe

  2. 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)
    

results matching ""

    No results matching ""