ふだん雰囲気で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ツールを利用する場合なんかは安心して使えますね。
反省
ブログを書くに当たり、改めてDockerについて学びがありました。
基本的に docker-composeを利用すること。
docker-compose up
には--build
オプション、docker-compose run
には--rm
オプションをつけること。
...しかし、どうしてdocker-compose run
には--build
オプションがないんだろう。一貫性が足りないよね。
- Dockerの仕様として、ADD, COPYで取得したファイルのハッシュが代わっていたら、それ以降のRUNのキャッシュは利用されないこと(つまり、 package.json が変更されていれば npm install は再実行される)