Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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名が使えるようになったらよりシンプルにできるので、バージョンアップを楽しみに待ちたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away