概要
docker
コマンドをメンテしやすく綺麗に書ければ
docker-compose
使わなくてもいいのではないかと思い、書き比べてみました。
(いやまあ、docker-compose
のメリットはメンテしやすさだけでは無いでしょうけども。)
docker-compose.yml版
version: '2'
services:
mysql:
image: mysql:5.7
container_name: mysql
hostname: mysql
environment:
- "MYSQL_ROOT_PASSWORD=xxx"
- "MYSQL_DATABASE=xxx"
- "MYSQL_USER=xxx"
- "MYSQL_PASSWORD=xxx"
- "TZ=Asia/Tokyo"
command: >
mysqld
--character-set-server=utf8
--collation-server=utf8_unicode_ci
--skip-character-set-client-handshake
volumes:
- "./sql:/docker-entrypoint-initdb.d"
- "/opt/datastore:/var/lib/mysql"
ports:
- "3306:3306"
node:
image: node:boron-alpine
container_name: node
hostname: node
volumes:
- "./app:/app"
working_dir: /app
command: [sh, -c, npm install --no-bin-links && node app]
ports:
- "1337:1337"
depends_on:
- mysql
docker+sh版
#!/bin/sh
docker run \
--name mysql \
--hostname mysql \
-e MYSQL_ROOT_PASSWORD=xxx \
-e MYSQL_DATABASE=xxx \
-e MYSQL_USER=xxx \
-e MYSQL_PASSWORD=xxx \
-e TZ=Asia/Tokyo \
-v /vagrant/app/sql:/docker-entrypoint-initdb.d \
-v /opt/datastore:/var/lib/mysql \
-p 3306:3306 \
-d \
mysql:5.7 \
mysqld \
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci \
--skip-character-set-client-handshake
docker run \
--name node \
--hostname node \
-v /vagrant/app:/app \
-w /app \
--link mysql \
-p 1337:1337 \
-d \
node:boron-alpine \
sh -c "npm install --no-bin-links && node app"
どちらも同様に動きましたが下記の点に注意が必要:
- docker版は
volume
で相対パスが使えない。
個人的結論
bash:docker+sh版
もアリかなと思いました。
docker-compose
という層が無ければ、その分、インストール/学習/動かない場合の調査も減りますし。
この方法、もう少し使ってみて困ったことがあれば追記します。
もし、docker-compose
の大きなメリット、お気づきの方がいらっしゃいましたら、コメント欄等でご指摘頂けると嬉しいです。