當平台漸漸成形,對於外部套件、方案相依性定調以後,每次都要手動建置測試運行環境,即使docker已經把建置動作簡化到一行指令了,但是還是令人覺得瑣碎。
這個時候,docker-compose這個解決方案,大幅的簡化了我們的部署工作:傳送門
它僅需要配置服務定義檔(yml檔名),就可以跟現有的docker images整合,立即建置出所需的架構環境!
version: '2.1'
services:
memcache:
image: memcached
ports:
- "11211:11211"
command: memcached -m 1024m
hadoop:
image: "sequenceiq/hadoop-docker:2.7.0"
ports:
- "8030:8030"
- "8040:8040"
- "8042:8042"
- "8088:8042"
- "19888:19888"
- "49707:49707"
- "50010:50010"
- "50020:50020"
- "50070:50070"
- "5007:5007"
command: /etc/bootstrap.sh -d
cassandra:
image: "cassandra"
ports:
- "9042:9042"
volumes:
- /mnt/cassandra/data:/var/lib/cassandra
mariadb:
image: mariadb
ports:
- "3306:3306"
volumes:
- /mnt/mariadb/data:/var/lib/mysql
- /mnt/mariadb/config:/etc/mysql/conf.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: 525402040966518776
MYSQL_USER: ap_user
MYSQL_PASSWORD: jUqJ75aFbJEU
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mariadb
environment:
PMA_HOST: mariadb
PMA_PORT: 3306
ports:
- "8088:80"
my-python-app:
depends_on:
- mariadb
- cassandra
- hadoop
- memcache
image: python35-app
volumes:
- /mnt/python-app/src:/usr/src/app
ports:
- "12345:12345"
command: /usr/src/app/run.sh
註:
1.首先是version,據我所知,目前大部分幾個月前安裝的docker,至少可以支持到2.1,但不見得能支持到3.0的版本。相關upgrade的議題,必須持續survey
2.不需要export的port就不要開,可以透過link或是建立network來進行容器互連
3.可以善用command、environment、volumn等docker支持的掛載與注入的方式來配置容器
4.可以透過現成已build好的image或是動態透過build dockerfile來定義服務。這一段上述例子沒有,有需要時再查使用方式
最後,啟動服務群指令(記得加-d,否則會被lock在shell,被script轟炸):
sudo docker-compose up -d
若要下架也很簡單(其他還有run、stop等指令可用)
sudo docker-compose down