概要
docker-compose は複数のコンテナで構成されるアプリを管理するためのツールです
昔 fig と言われていたツールがそのまま docker-compose になりました
今回は docker-compose の QuickStart を試してみたので紹介します
環境
- CentOS7 64bit
- docker-engine 1.8.3
- docker-compose 1.4.2
docker-compose のインストール
- VERSION_NUM=1.4.2
- curl -L
https://github.com/docker/compose/releases/download/VERSION_NUM/docker-compose-
`uname -s`-`uname -m` > /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose
- docker-compose version
でインストールします
インストールが完了したらバージョンが表示されることを確認してください
各種ビルド用のファイルの作成
アプリを構成するファイルを作成していきます
DockerFile の作成
- mkdir ~/mydocker
- cd ~/mydocker
- touch DockerFile
FROM ruby:2.2.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
RUN bundle install
ADD . /myapp
イメージは DokcerHub にある ruby というイメージの tag 2.2.0 を使います
他の最新版のバージョンもあるのでそれでもいいかもしれません
Gemfile の作成
- cd ~/mydocker
- touch Gemfile
source 'https://rubygems.org'
gem 'rails', '4.2.0'
単純に rails をインストールするだけの Gemfile です
DockerFile 内の ADD というコマンドで作成した Gemfile をコンテナ上に渡します
docker-compose.yml の作成
- cd ~/mydocker
- touch docker-compose.yml
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- db
docker-compose.yml にアプリを構成するコンテナの定義を記載します
DB には postgres を指定します
ファイル内では環境変数の参照も行えるようです
その他の詳細はこちらのページを参照してください
web コンテナ上で動作する rails のサンプルアプリを作成する
- cd ~/mydocker
docker-compose run web rails new . --force --database=postgresql --skip-bundle
run コマンドのあとに docker-compose.yml に記載したコンテナを指定します ( -> web )
そのあとでコンテナ上で実行するコマンドを記載します ( -> rails new . --force --database=postgresql --skip-bundle
)
コンテナ上で実行されたコマンドの結果はローカルに保存されるのでこのアプリを使ってコンテナ上で動作させます
Gemfile の編集
サンプルアプリを作成した際に生成される Gemfile を編集します
今回はブラウザ上で動作するアプリを実行するための以下の行をコメントアウトします
gem 'therubyracer', platforms: :ruby
コメントアウトしたら保存しましょう
config/database.yml の編集
- cd ~/mydocker
- vim config/database.yml
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
test:
<<: *default
database: myapp_test
上記の設定になるようにローカルの config/database.yml を編集してください
デフォルトで作成される config/database.yml にはいろいろと記載されているので全部消してもいいですし、必要な部分だけ編集しても OK です
ビルドの実行
docker-compose 上で動作するイメージをビルドします
- cd ~/mydocker
- docker-compose build
初回ビルド時はいろいろとダウンロードする必要があるので時間がかかります
ビルドが完了したら docker images
で新しいイメージが作成されていることを確認しましょう
今回の手順で実施すると mydocker_web
というイメージが作成されていると思います
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mydocker_web latest 35147b5838ce 18 seconds ago 914.2 MB
コンテナ上でのアプリの起動
イメージが作成できたらアプリを起動してみましょう
- cd ~/mydocker
- docker-compose up
起動したらプロセスを確認してみます
- docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
mydocker_db_1 /docker-entrypoint.sh postgres Up 5432/tcp
mydocker_web_1 bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp
State が Up になっていれば OK です
動作確認
この状態でブラウザで 3000 番にアクセスすると Rails のサンプル画面が表示されると思います
http://hostname:3000/
コンテナを停止させたい場合は
- docker-compose stop
で OK です
紹介は以上です
次回は docker-compose の特徴的な機能の 1 つである scale を検証できればと思います
Tips
データベースが作成されているか確認してみる
- docker exec -it mydocker_db_1 bash
- su - postgres
- psql -l
- psql postgres
docker exec
は作成したコンテナにログインすることができる便利なコマンドです
デバッグで重宝します
データベースがない場合はdocker-compose run web rake db:create
で作成可能です
イメージが削除できない
Error response from daemon: Conflict, cannot delete 3e2dbcd4b881 because the running container 379975ee952b is using it, stop it and use -f to force
docker-compose で作成したイメージを削除しようとして発生しました
まだイメージを使ったコンテナが動作しているためイメージを削除できないというエラーのようです
docker ps -a
で全コンテナを表示して該当するコンテナを削除しましょう
全コンテナを削除して問題ない場合は
docker rm $(docker ps -aq)
で全コンテナを削除してから、再度 docker rmi
してみましょう
0 件のコメント:
コメントを投稿