page_adsence

2016年6月15日水曜日

docker-composeのextra_hosts

docker-composeのリファレンスを読んでいたら、extra_hostsなるオプションがあった。
自分が初めてDocker使った時にあったのかどうかは調べてないのですが、こんな便利なオプションを見逃していたなんて・・・。
dockerコンテナは基本的に起動時にIPを動的に割り当てているため、毎回コンテナ上のhostsファイルが書き換わってしまい、独自の設定を入れる方法がなかった。
力技でやる場合は、ENTRYPOINTとかのシェルスクリプト内でhosts書き換えたりする程度しか思いついていなかった。

早速使ってみた。
※ローカルにphpやmysqlという名前のイメージがある状態で行っています。
適当なディレクトリにdocker-compose.ymlを作って、下記の内容を記述します。
$ vi docker-compose.yml
mysql:
  image: mysql
  container_name: mysql
  hostname: mysqldb
  ports:
    - 3306:3306

php:
  image: php
  container_name: php
  hostname: php
  extra_hosts:
    - test1.com:111.111.111.111
    - test2.com:222.222.222.222
  links:
    - mysql
この状態で
$ docker-compose up -d
してから、コンテナ内に入る。
$ docker exec -it php bash
で、hostsファイルを確認する。
# view /etc/hosts
172.17.2.103    php
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.2.95       mysql mysqldb
172.17.2.95       mysql_1 mysqldb mysql
111.111.111.111   test1.com
222.222.222.222   test2.com
こんな感じで、記載される様になります。
便利!

※但し、大量のhostsを記載する場合はdocker-compose.ymlのファイル内が長くなってしまうので、
その辺はある程度長くなってしまったら力技の方がいいのかもしれないです。
extra_hostsもファイル指定出来ればいいんですけどね。