LoginSignup
3
6

More than 5 years have passed since last update.

docker-composeでrailsを動かす

Posted at

RailsにDockerを導入

  1. Dockerのインストールと起動
  2. imageの作成(imageの作成は割愛)
  3. docker-compose.ymlの作成
  4. docker-compose upでスタート
  5. docker-compose stopでストップ

docker-compose.ymlの構成

docker-compose.yml
version: '2.0'

services:
  db:
    image: postgres:9.6.7-alpine
    volumes:
      - ./docker/pg:/var/lib/postgresql
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: test_db
    ports:
      - '5433:5432'

  web:
    image: <docker_image>:latest
    ports:
      - "3000:3000"
    volumes:
      - .:/my_app
      - bundle:/my_app/vendor/bundle
    working_dir: /my_app
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    links:
      - db

volumes:
  bundle:

基本的な考え方

  1. dbとwebは、それぞれデータベースとrailsで、2つのコンテナを作成したことになる。
  2. dbの情報はdocker-compose.yml内で指定し、これをconfig/database.ymlに書くことで、railsからdockerコンテナのdbに接続できるようにしている。
  3. webからdbに依存するために、links -dbというのをつけている。
  4. volumesとは、Dockerが作成したコンテナ上のデータを実際に自分のマシン上に保存するように、対応を書いてデータを保存しておくことができる。./docker/pg:/var/lib/postgresqlこれは、左側は、実際にマシン上でrailsのrepoのdocker/pg以下にdocker内で立てたpostgresのDBのデータが保存される場所を対応させ、データを保存している。
  5. portsは、コンテナ内のポートを自分のマシン(外部)にオープンする。今回の例では、3ブラウザからlocalhost:3000を叩いて、開けれるようにするために、コンテナの3000と自分のマシン上の3000を対応付ける必要がある。

陥りやすいポイント

  1. dbなどで、Dockerを使う前にlocalhostとして使っていたhostは、dockerのcontainerの名前と同じようにしないといけない。containerの名前をdbとした場合

    before
    development:
      adapter: postgresql
      encoding: unicode
      pool: 25
      database: test_db
      username: postgres
      password: postgres
      host: localhost
      template: template0
    
    after
    development:
      adapter: postgresql
      encoding: unicode
      pool: 25
      database: test_db
      username: postgres
      password: postgres
      host: db
      template: template0
    
  2. docker-compose downするとすべてデータも消えてしまうので、downはしない。(down: Stops containers and removes containers, networks, volumes, and images created by up. https://docs.docker.com/compose/reference/down/)
    dockerを再起動しても、downしてないものはちゃんと残っているので、stopとupを使っておけば、Volume内に保存されたデータも残る。

3
6
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
3
6