0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【備忘録】Docker-compose.yml (Rails + PostgreSQL)

Posted at

Docker-composeとは

Compose とは、複数のコンテナを定義し実行する Docker アプリケーションのためのツールです。Compose においては YAML ファイルを使ってアプリケーションサービスの設定を行います。コマンドを1つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います
https://docs.docker.jp/compose/overview.html

対象ファイル

https://github.com/naokikubo2/quickstart
上記URLに、docker環境でrailsの開発がすぐに初められるリポジトリがあります。
こちらでは、シェルスクリプトを利用して、1つのコマンドでdockerの様々なコマンドを自動的に処理可能です。
今回解説するのは、「docker-compose.yml」というファイルです。

composeのヴァージョン指定

version: '3'

Docker-composeのファイル形式のヴァージョンを表している。現状では3が最新。

service 作成

  • 下記のdb, redisなどはサービス名。任意の名前を設定できる。

  • 1つのサービスで、1つのコンテナが起動する。

  • マウント時に、cachedオプションを使用していますが、これにより速度をあげることができます。詳細は、以下参照。

web: &app

  web: &app
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app:cached
      - bundle:/usr/local/bundle:cached
      - /app/.git
    environment:
      HOME: /app
      RAILS_ENV: development
    ports:
      - "3000:3000"
    tty: true
    links:
      - db

  (中略)

volumes:
  bundle:
    driver: local
  • build: . の「ドット」: docker-compose.ymlと同じディレクトリをビルドコンテキストとしている
     ⇨ymlファイルと同じディレクトリに、webサービス用のDockerfileを作成しておく必要がある。
  • ports: コンテナ外部に公開するポート & マッピング先のポート
  • volumes :
    • .:/app:cached : バインドマウント。docker-compose.ymlの存在するディレクトリにをコンテナの/appディレクトリにマウントしている。
    • bundle:/usr/local/bundle:cached : volumesに定義したbundleのvolumeをwebサーバのコンテナの/usr/local/bundleにマウントしている。名前を付けたvolumeをマウントする場合は、volumesに定義しておく必要がある。
  • link : webサービスからdbサービスへのリンクを設定。

DB

db:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - data:/var/lib/postgresql/data:cached
    environment:
      POSTGRES_PASSWORD: postgres

DBはpostgresを使用しています。

以下オプション

以下のseviceは、webサービスを起動しても同時起動しない設定になってます。

redis

 redis:
    image: redis
    ports:
      - "6379:6379"
    command: redis-server --appendonly yes
    volumes:
       - redis-data:/data:cached

Redisとは、オープンソースの永続化可能なインメモリデータベース(In-memory database)で、BSDライセンスで公開されています。
webアプリケーションのセッション管理に利用されます。また、HTMLコード片やページのキャッシュを行うことで、より速くwebページが表示される様にできます。

chrome

chrome:
    image: selenium/standalone-chrome
    ports:
      - "4444:4444"

seleniumとは、webブラウザのテストを自動化するためのツール。webブラウザは、chromeを使用するイメージを利用するので、sevice名は、chromeにしています。

spring

  spring:
    <<: *app
    command: bundle exec spring server
    ports: []
  • springは、railsコマンドの高速化に使うサービス
  • <<: *app:web serviceを継承
  • commandとportsをオーバーライド

solagraph

  solargraph:
    <<: *app
    command: bundle exec solargraph socket --host=0.0.0.0 --port=7658
    ports:
      - "8091:7658"
    links: []
  • solargraphは、グラフ化を行う際に使用。

最後に

自分自身まとめながら、「今まで気にしていなかったけど、これは何だろう」という疑問を解消することができました。実践的に学んでいくのが一番なんだなと実感しました。(一方で、写経だけをしていては絶対に身につかない)
もし、記事が少しでも役立った場合はLGTMお願い致します!!

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?