Web界隈ではDockerでの開発が主流になりつつあるかと思います。
一コンテナだけならDockerfileおいて、docker run で起動!ハッピーに開発ができます。
しかし、DatabaseやWorker, proxyなどを入れたいとなると...
手が止まる人も多いかと思います。
コンテナ同士の接続はうまくいかないし、linksやdepends_onなどなどどうやって書くんだよって
なるんですよね。
なので、
僕がよく利用するdocker-compose.ymlを公開します。笑
概要
dockerサービスの構成
用意する環境は、Rails, Nginx, Sidekiq, Redis, PostgreSQLです。
nginxは通常のイメージではなく、proxy用のnginxです。
jwilder/nginx-proxyのイメージですが、これめちゃくちゃ便利です。
bridgeをつくり、環境変数を指定するだけで、自動で名前解決してくれます。
postgresqlでなくmysqlでもさほど変わりません。
他の人のdocker image使っていけるはずです。
docker-compose.ymlの中身
これがdocker-compose.ymlです。
rails5, nginx, redis, postgresql, sidekiqを構築します。
/tmp/postgresql-dataにデータベースの実データを永続化しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
version: "3" services: ngix-proxy: privileged: true image: jwilder/nginx-proxy ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro network_mode: bridge web: build: . command: bundle exec rails s -b 0.0.0.0 volumes: - ./:/app:z expose: - 3000 environment: - VIRTUAL_HOST=$VIRTUAL_HOST_WEBT - APP_SECRET=$APP_SECRET network_mode: bridge depends_on: - redis - db links: - redis - db worker: build: . command: bundle exec sidekiq -C config/sidekiq.yml volumes: - ./:/app environment: - APP_SECRET=$APP_SECRET network_mode: bridge depends_on: - web - db links: - redis - db redis: network_mode: bridge image: "redis:latest" ports: - "6379:6379" volumes: - ./data/redis:/data db: build: ./pg expose: - 5432 volumes: - ./postgresql-data:/var/lib/postgresql/data:z tty: true restart: always environment: - POSTGRES_USER=$POSTGRES_USER - POSTGRES_PASSWORD=$POSTGRES_PASSWORD - POSTGRES_DB=$POSTGRES_DB network_mode: bridge volumes: dbdata: |
ルートディレクトリに.envファイルを作成してください。
そこで、環境変数系のあれこれを書き込めば、動きます。
volumeにzがついているのは、
selinuxでのおまじないみたいなものなので
とりあえず書いといてください。
気が向いたらまとめます。
Rails5 + Alpine のDockerfile
Rails5用のDockerfileは別の記事にありますので、どうぞ。
Posgresql + ubuntu のDockerfile
postgresqlもalpineにしようと思ったけど
UTF設定とかいろいろ扱いやすいようにubuntuにしています。
1 2 3 |
FROM postgres:10 RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 ENV LANG ja_JP.utf8 |
とりえあえず。
postgresqlのDockerfileは
mkdir pgを実行して、その配下に配置してください。
1 2 3 |
$ tree pg pg/ └── Dockerfile |
RailsAPIを使用したアプリケーションの開発!決まったらとりあえずこのdocker-compose.ymlを使えば
いち早く開発・実行環境を用意できます。
みんな使ってみてね。
じゃあね〜〜。