LoginSignup
9
9

More than 5 years have passed since last update.

Docker-Composeで複数サービスをLink使わずに立ち上げる。

Last updated at Posted at 2015-02-27

Docker-Composeでちょいと複雑なサービスをLink使わずに立ち上げる。

はじめに

現在自前のVPS環境にて以下の様な環境を作っています.

構成図

外からはircクライアントから直でzncに接続、もしくはsshトンネル使った上でshoutで接続。
その上でzncは非公開のbitlbeeにアクセスしているという感じです。

んで、この環境を最近Dockerに移行したのですが、以外にめんどくさいのがコンテナ間通信。
Dockerの基本は-linkを使って環境変数をベースに設定を書き換えるという形になるのですが、複数コンテナを立ち上げてクラスタするわけでもないのにいちいちShell書くのもなぁ…と思っていたところ、この投稿を見て、「お、これなら簡単やん」ということでdocker-compose.ymlを作ってみました。

基本構造

コンテナ間の構造はこんな感じ

コンテナ構造

net_ircというコンテナをこの投稿を参考にbusyboxで作成。
その他をnet: "container:ner_irc"と指定されたコンテナのネットワークに相乗りさせて、コンテナ間はポート指定で通信するというものです。
現在のdocker-composeはnet指定にサービス名を使えない
(現在pr:#686で議論はされている模様)ので、net_ircについては直接dockerから作成して、そののちにdocker-compose upするという方式を取ることで実現しました。

実際のコード

起動スクリプト
docker-compose stop
docker stop net_irc
docker rm net_irc
docker run --name net_irc -d -t -p 16667:16667 -p 127.0.0.1:9000:9000 busybox
docker-compose up -d
docker-compose.yml
znc:
  image: jimeh/znc
  expose:
   - "16667"
  volumes:
   - $HOME/.znc:/znc-data
  net: "container:net_irc"
bitlbee:
  image: aostanin/bitlbee
  expose:
   - "6667"
  volumes:
   - $HOME/.bitlbee:/data
  net: "container:net_irc"
shout:
  image:  cha2maru/shout
  expose:
   - "9000"
  volumes:
   - $HOME/.shout:/root/.shout
  net: "container:net_irc"
  command: shout

やってみて

dockerはpオプションで解放する際にIP制限をしないとufwを超えてポートが解放されてしまうので、個人用のサービスを立ち上げる時にはまずどのポートをどのIPに解放するのかを専用のコンテナで設定して、そのうえでnet: "container:name"でネットワークを共有するというのは確認の上でもいいのかなと思いました。

docker-composeのバージョンアップが来て、net: containerの指定にservice名が使えるようになったらよりシンプルにできるので、バージョンアップを楽しみに待ちたいと思います。

9
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9