docker
docker-compose

docker コマンドを docker-compose 風に綺麗に書く(書き比べてみる)

概要

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 の大きなメリット、お気づきの方がいらっしゃいましたら、コメント欄等でご指摘頂けると嬉しいです。