Docker初心者が練習のため公式のクイックスタートをやった記録

# はじめに

千里の道も一歩から
Docker初心者が練習のため公式のクイックスタートをやった記録
https://docs.docker.com/compose/rails/

# 環境
OS: OSX
Docker: Docker for Mac
Editor: emacs
Shell: zsh

# 手順(記録)

```zsh
# テキトウな空のディレクトリを作成する
$ mkdir docker_practice
$ cd docker_practice

# Dockerファイルを作成する
$ emacs Dockerfile
```

Dockerfileの中身は以下の通り

```　Dockerfile
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
```


`Gemfile` を作成する

```zsh
$ emacs Gemfile
```

`Gemfile` の中身は以下の通り

``` Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.0'
```

空でも `Gemfile.lock` が必要なのでとりあえず作っておく

```zsh
$ touch Gemfile.lock
```

`docker-compose.yml` を作成する。

```zsh
$ emacs docker-compose.yml
```

`docker-compose.yml` の中身は以下の通り
環境変数から取る方が・・・などと深く考えずべた書きする

```docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
```


Railsを動かすコンテナで `rails new` してみる

```zsh
$ docker-compose run web rails new . --force --database=postgresql
```

ここまで来たら `web` の中身を覗くことができる

```
$ docker-compose run web bash

/myapp# ls -l
total 36
-rw-r--r--  1 root root  223 Sep  4 18:38 Dockerfile
-rw-r--r--  1 root root 2223 Sep  4 18:41 Gemfile
-rw-r--r--  1 root root 5300 Sep  4 18:42 Gemfile.lock
-rw-r--r--  1 root root  374 Sep  4 18:41 README.md
-rw-r--r--  1 root root  227 Sep  4 18:41 Rakefile
drwxr-xr-x 10 root root  320 Sep  4 18:41 app
drwxr-xr-x  9 root root  288 Sep  4 18:42 bin
drwxr-xr-x 16 root root  512 Sep  4 19:09 config
-rw-r--r--  1 root root  130 Sep  4 18:41 config.ru
drwxr-xr-x  3 root root   96 Sep  4 18:41 db
-rw-r--r--  1 root root  266 Sep  4 18:39 docker-compose.yml
drwxr-xr-x  4 root root  128 Sep  4 18:41 lib
drwxr-xr-x  4 root root  128 Sep  4 18:51 log
-rw-r--r--  1 root root   63 Sep  4 18:41 package.json
drwxr-xr-x  9 root root  288 Sep  4 18:41 public
drwxr-xr-x  3 root root   96 Sep  4 18:41 storage
drwxr-xr-x 11 root root  352 Sep  4 18:41 test
drwxr-xr-x  9 root root  288 Sep  4 18:59 tmp
drwxr-xr-x  3 root root   96 Sep  4 18:41 vendor

/myapp# exit
```

`docker-compose.yml` で定義したサービスをビルドする

```zsh
$ docker-compose build
```

rails を立ち上げるために `db` の設定も必要

```zsh
$ emacs config/database.yml 
```

`postgresql` 使ってるので以下の通り

```config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test
```

マイグレーションを流す

```zsh
$ docker-compose run web rake db:create
```

立ち上げてみる

```zsh
$ docker-compose up
```

http://localhost:3000/
に接続するとRailsの動作を確認できるはず。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180193/60e36881-e6d1-29b5-e7e5-7d0d7ff82b1a.png)

# リンク

- [Quickstart: Compose and Rails](https://docs.docker.com/compose/rails/#connect-the-database)
- [DockerでRuby2.4.0,Rails5.1.0の環境構築](https://qiita.com/tomoyamachi/items/67fb2c41ac4f9d75fe48)