自分的Dockerのユースケースをまとめてみた

ふだん雰囲気でDocker使っているのですが、もっと自由にDockerを使えるようになりたい!
ということで、自分的なDockerのユースケースを振り返ってまとめてみました。

1. リポジトリごとの開発環境の構築

リポジトリごとに開発で利用するPythonの環境を、Dockerを使って構築しています。

コマンド

`docker-compose run --rm python /bin/bash

version: '3'
services:
  python:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src:/root/work

2. 開発用のデータベースの構築

command

(開発用のサーバーの起動前などに) docker-compose up -d dynamo

docker-compose.yml

version: '3'

services:
  dynamo:
    image: amazon/dynamodb-local:1.11.477
    ports:
      - "8001:8000"

3. ミドルウェアの実行

技術書典で出品するPDFファイルのビルドのために利用しています。 (Thanks for カウプラン機関極東支部 さん!)

コマンド

docker-compose run --rm review

docker-compose.yml

version: "3"
services:
  review:
    image:
      kauplan/review2.5
    volumes:
      - $PWD:/work
    entrypoint:
      /bin/bash -c "cd /work; rake pdf"

4. cliツールのバイナリを直接インストールする代わりにする

例えば jq のバイナリを直接ローカルに置かない。
alias jq="docker run -i --rm mbentley/jq"

jq以外にも、例えばβ版のcliツールを利用する場合なんかは安心して使えますね。

参考
hub.docker.com

反省

ブログを書くに当たり、改めてDockerについて学びがありました。

  • 基本的に docker-composeを利用すること。

  • docker-compose up には --build オプション、 docker-compose run には --rm オプションをつけること。
    ...しかし、どうして docker-compose run には --build オプションがないんだろう。一貫性が足りないよね。

github.com

  • Dockerの仕様として、ADD, COPYで取得したファイルのハッシュが代わっていたら、それ以降のRUNのキャッシュは利用されないこと(つまり、 package.json が変更されていれば npm install は再実行される)