前の記事
CentOS7にDockerとDocker Composeをインストールする
に、Rocket.Chatを立ち上げました。
構築手順は以下のサイトのサイトを参考にしています。
Rocket.Chat Docs
Docker Composeを使ったRocketChatのインストールと基本的な使い方
補足で、自分が分からなかったところの説明を付け加えています。
事前準備
各コンテナイメージを取得する
- MongoDBのイメージを取得
docker pull mongo
- Rocket.Chatのイメージを取得
docker pull rocketchat/rocket.chat
Docker Composeファイルの作成
- MongoDBのデータをホスト側にマウントするためのディレクトリを作成
mkdir -p /var/www/rocket.chat/data/runtime/db
mkdir -p /var/www/rocket.chat/data/dump
- Docker Composeファイルを作成
vi /var/www/rocket.chat/docker-compose.yml
version: '2'
services:
rocketchat:
image: rocketchat/rocket.chat:latest
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
depends_on:
- mongo
ports:
- 3000:3000
mongo:
image: mongo:latest
restart: unless-stopped
volumes:
- ./data/db:/data/db
- ./data/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0
mongo-init-replica:
image: mongo:latest
command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"'
depends_on:
- mongo
私はローカルに立てたので、
今回はymlファイルにROOT_URLは設定しておらず、http://localhost:3000 になっています。
環境に応じてIPを変更する必要があります
Rocket.Chatの起動
cd /var/www/rocket.chat/
docker-compose up -d
そして、
http://localhost:3000/
に接続すると、Rocket.Chatが表示されました。
補足
docker-compose.ymlの書き方
バージョンについて
参考:Compose ファイル・リファレンス
バージョン1とバージョン2(推奨)があります。
-
バージョン1
composeファイルでバージョンを指定しないとき、バージョン1として認識される。今後廃止予定。 -
バージョン2
冒頭でバージョンを指定する必要がある。services キーの下で全てのサービスを定義する。バージョン2のファイルは Compose 1.6.0 以上 でサポートされており、実行には Docker Engine 1.10.0 以上 が必要。
version: '2'
services:
サービス名1:
build: .
サービス名2:
image:
※ バージョン3もありそうだけど、今回は保留
参考:Compose file version 3 reference
depends_on
composeファイルは初めて書いたけど、基本的にdockerコマンドを叩くときのオプションとあまり変わらないんだなあという認識です。今回使ったものの中で、初めて見たdepends_onについてのみ調べました。
参考:Compose ファイル・リファレンス
- depends_on
サービスの依存関係を指定。この依存関係に従ってサービスの起動の順番が決まる。上のcomposeファイルを例に挙げると、docker-compse upを実行した場合、rocketchatとmongo-init-replicaはmongoに依存しているので、立ち上がる順番は①mongo→②rocketchat、mongo-init-replica。
docker-compose up rocketchatとサービス名を指定して実行しても、依存関係があるので、mongoが立ち上がってからrocketchatが立ち上がる。
linkが高度になったものがdepends_onなのか?と思ったけれど、バージョン2ではそもそもlink機能は不要なものになっているよう。
参考:docker-compose depends_onとlinksの違い
docker-composeコマンド
docker-composeコマンド一覧(今回使ったやつだけ)
| コマンド | 説明 |
|:----------|---------------|:------------------------|
| up | ymlに定義されているサービスをすべて立ち上げる |
| run (サービス名) | 指定されたサービスのみ立ち上げる |
| down | ymlに定義されているサービスをすべて削除する |
| stop | サービスをすべて停止する |
| start | サービスをすべて開始する |
| ps | コンテナの起動状態を確認する |
up,run,startの違い
参考:よくある質問と回答
- up
一般的にはupを使う。upだと、composeファイルで定義されたすべてのサービスを起動させることができる。作成済みでないコンテナにも使える。 - run
指定されたサービスひとつだけ起動させる。だからrunの後ろにはサービス名が必要。 - start
すでに作成済みのコンテナのみに適用される。止まっているコンテナを開始するだけで、新しく作ることができない。
感想
- ファイルさえ書けたら、あっというまにRocketChatが立ち上がったので、とても便利でした。
- VirtualBoxの中でdockerを使ったら、ポートフォワードを2回しなければならないことに気づかず、そこで少し躓きました。