前段 注意

  1. 私の Docker の用途は開発環境の構築ですので、本番環境での運用の知見などはありません。
  2. 記事は散文的になっております、 Docker を利用したことのある方を対象としております。

参考リンク

以下のリンクは参考となります、詰まったら読むとためになるかと思います。

名称 URL
公式ドキュメント https://docs.docker.com/reference/
Docker ドキュメント日本語化プロジェクト http://docs.docker.jp
docker-sync 公式サイト http://docker-sync.io
qiita で調べる http://qiita.com/search?q=docker

はじめに

みなさん、 Docker 使っていますか? Docker はとても便利ですよね。 今回は、私が Docker を使っている時に感じたことなどを記載していきたいと思っています。

では、早速いってみましょう

その1. Docker Compose を有効に利用しよう

掲題ままです、 Docker Compose はとても便利です。 Docker Compose を利用すると、複数のコンテナを簡易に立ち上げることができ、連携を行うことができます。 もはや必須ですよね。

その2. 遅さに悩んでいるなら Docker Sync を検討しよう

Docker for mac で Docker を使っていると気づきます。 そう、遅いのです。 その時、 Docker Sync を考慮に入れてください。 きっと、速度改善に貢献してくれます。

その3. 環境変数を利用しよう

開発環境の各種設定ですが、積極的に環境変数を利用した設定を行うようにしましょう。 環境変数は Docker 及びアプリケーション開発のどちらにも相性がいいです。 私は複数の開発環境を構築することがあるので、環境変数の管理を direnv に任せています。

その4. dockerignore は必要か?

ここは難しい問題です。 ケースバイケースになるかと思いますが、もし docker の image サイズが不必要に肥大化してしまう場合には、 dockerignore という存在があることを思い出してください。

その5. 定期的に掃除しよう

Docker を使っていると、知らず知らずの内に容量が肥大化して、ストレージ容量が心もとなくなってきます。 以下のコマンドで、定期的に掃除してあげましょう。 手軽に、掃除をしてくれます。

$ docker system prune

また、大きなイメージをガンガン作りすぎてしまったら、すでに確保されてしまった領域の解放はしてくれませんので、 docker for mac の初期化も検討に入れてもいいかもしれません。 ただし、コンテナ、イメージ、ストレージの全てが削除されてしまうことにご注意ください。

Docker for mac -> Preferences -> Reset -> Reset to factory defaults

その6. コンテナの操作は exec を利用しよう

大抵の場合 attach とか使うよりも、 exec を使うのが無難です。

# docker コマンドの場合
$ docker exec <コンテナ ID> 実行コマンド

# docker-compose コマンドの場合(1.12から exec が使えるようになりました)
$ docker-compose exec <コンテナ名> 実行コマンド

その7. DB の文字コードには気をつけよう

Docker で用意する開発用の DB は公式のイメージを利用する人が多数いると思います。 PostgreSQL でも MySQL でも MariaDB でも同じですが、文字コードの設定を行った方がいいです。 設定方法は公式を参照してください 以下は、 docker-compose で utf-8に設定する例です。

  • PostgreSQL
  # docker-compose
  environment:
    POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
  • MySQL and MariaDB
# docker-compose
  command: "mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci"

その8. 複数の DB の用意をする時は、初期化スクリプトを用意する

公式にも記載されているのですが、コンテナの「 /docker-entrypoint-initdb.d 」に初期化スクリプトを置くことができ、拡張子が「 sh 」、「 sql 」のファイルを置くと順番に実行してくれます。 複数の DB を持つ場合は、環境変数での指定だけでは対処ができませんので、このディレクトリ内に作成する SQL ファイルまたは、初期化スクリプトを置いて対処しましょう。

# Dockerfile
ADD initdb.d /docker-entrypoint-initdb.d

#docker-compose
volumes: initdb.d /docker-entrypoint-initdb.d

最後に

Docker を使っていて、気をつけているところを書かせていただきました。 Docker を利用すると本番環境に近い環境を簡単に用意できるようになって、非常に便利な時代になったなと思っています。 他にも細々としたことが色々とありますが、そこはまた別の機会に。

良い Docker ライフを!!