はじめに
こんばんは。
ちょっとした小ネタといういうか、調べた事があったのでブログに書き残しておきます。
現在携わっている案件では、docker-composeを使用して、ローカル開発環境(LAMP + KVS)コンテナ群を立ち上げて開発をしています。
そして、それとは別に、別のタスク(FW完全リプレイス案件)も降ってきています。
FW自体がガラッと変わるタスクなので、そもそもレポジトリ自体を分けています。
今までは、検証環境用のテストDB(RDB)にVPN経由で接続して、ビルトインサーバーを立ち上げてリプレイス案件は対応していました。
ただ、もうそれめんどくさいなと思って、ローカル環境作ることにしたのですが、DatabaseとKVS(Redis)は、既存の旧docker開発環境のものを共有して使いたいと思いました。
表側のFWの構成のみ変わるので、インフラ層は変わらないからです。
なんかそんなのないかなーと探していると、
- http://docs.docker.jp/compose/networking.html#specifying-custom-networks
- http://docs.docker.jp/compose/compose-file.html#id8
このあたりのやつを使えば行けそうな気がしたので、やってみました。
やってみた
現状立ち上がっている旧docker開発環境のAPサーバと同じネットワークにする事が必要なので、現状立ち上がっているdockerコンテナのネットワーク設定を調べられるものがないかを探してみました。
http://docs.docker.jp/engine/reference/commandline/network_ls.html#network-ls
なんかそれっぽいのがあったので実行してみます。
$ docker network ls NETWORK ID NAME DRIVER SCOPE aaaaaaaaaaaa bridge bridge local bbbbbbbbbbbb host host local cccccccccccc none null local dddddddddddd xxxxxxx_default bridge local
出てきました。
一覧の一番下に、共有したい対象の旧docker開発環境のAPサーバの名前がありました。 _defaultっていうsuffixが付いてるのは、なんでだろうと調べてると、なんかそれっぽい一文を見つけました。
https://docs.docker.com/compose/networking/
version: "3" services: web: build: . ports: - "8000:8000" db: image: postgres ports: - "8001:5432"
When you run docker-compose up, the following happens:
- A network called myapp_default is created.
- A container is created using web’s configuration. It joins the network myapp_default under the name web.
- A container is created using db’s configuration. It joins the network myapp_default under the name db.
Let's Google翻訳
docker-composeを実行すると、次のようになります。
myapp_defaultというネットワークが作成されます。 コンテナは、Webの構成を使用して作成されます。これは、webという名前でmyapp_defaultというネットワークに参加します。 コンテナは、dbの構成を使用して作成されます。 myapp_defaultという名前のネットワークにdbという名前で参加します。
特に指定しないと、_defaultのsuffixがつくみたいです。たぶん。
というわけで作ってみました。
version: '3' services: replace_app: tty: true container_name: replace_container build: context: ./docker_files/ dockerfile: ./Dockerfile args: - ENVIRONMENT=local ports: - 5260:80 volumes: - ./:/var/www/project:cached networks: - xxxxxxx_default networks: xxxxxxx_default: external: true
networksで、対象のコンテナのネットワーク名を指定して、トップレベルのnetworksキーで対象のネットワークの定義をしています。
externalをtrueにすることで、外へのアクセスが可能になり、dockerが別でネットワークの作成をすることがなくなります。
これで、実際に新コンテナから、旧コンテナ群のmysqlに接続することが出来ました。
終わりに
ネットワーク系は全く知識ないんですが、ドキュメント見ればなんとかなりますね。
ローカルで使用するだけのコンテナだから、おかしかったら捨てりゃいいので、心理的ストレスもなくよかったです。
すごいなーと思ってたら、全く同じことをしていた人がいて、世の中狭いなとなりました。
おやすみなさい。