既存アプリの環境をdockerで、さっと構築しよう

##1.GitHubからデータを持ってくる

https://github.com/WatanabeKazuyoshi/docker_training_180421

にアクセスして下さい。

緑色の「Clone or download」ボタンを押し、URLをコピーして下さい。

そして、ターミナルを開き、デスクトップに移動して下さい。

    $ cd Desktop

移動できたら、git cloneと先ほどコピーしたURLを使ってデスクトップにクローンします。

    $ git clone https://github.com/WatanabeKazuyoshi/docker_training_180421.git
    Cloning into 'docker_training_180421'...
    remote: Counting objects: 200, done.
    remote: Compressing objects: 100% (155/155), done.
    remote: Total 200 (delta 10), reused 200 (delta 10), pack-reused 0
    Receiving objects: 100% (200/200), 683.96 KiB | 1.04 MiB/s, done.
    Resolving deltas: 100% (10/10), done.

デスクトップを確認して下さい。

「docker_training_180421」フォルダができているはずです。

##2.「docker-compose up」しよう

「docker_training_180421」フォルダの中身をみて下さい。

「testapp」フォルダと「docker-compose.yml」ファイルがあるはずです。

---

▼testappフォルダ

　アプリのデータが入ったフォルダ

▼docker-compose.ymlファイル

　dockerでの環境設定が書いたファイル

---

「docker-compose.yml」は、アプリの初期作成者が作ることが多く、

このファイルがあれば、docker上で簡単に環境構築ができます。



では、ターミナルで「docker-compose.yml」があるディレクトリに移動します。

    $ cd docker_training_180421

lsコマンドでカレントディレクトリにあるファイルを確認します。

    $ ls
    docker-compose.yml	testapp

ちゃんと「docker-compose.yml」があります。

ここで、「docker-compose.yml」に対しdocker-compose up -dで環境構築＆コンテナの起動を行います。

    $ docker-compose up -d
    Creating network "dockertraining180421_default" with the default driver
    Creating dockertraining180421_db_1 ... done
    Creating dockertraining180421_app_1 ... done

docker psで起動中のコンテナを確認しましょう。

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    cf1827a9beb8        rails:5             "irb"                    5 minutes ago       Up 5 minutes        0.0.0.0:3000->3000/tcp   dockertraining180421_app_1
    45004b1a7a78        mysql               "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        3306/tcp                 dockertraining180421_db_1

http://localhost:3000/にアクセスして、何も表示されていないことを確認して下さい。

##3.Railsサーバーを起動しよう

railsのコンテナに入ります。

    $ docker exec -it dockertraining180421_app_1 /bin/bash

「docker-compose.yml」で、共有されているディレクトリに移動します。

    # cd home

Rails サーバーを起動します。

    # rails s
    Your bundle is locked to rake (12.3.1), but that version could not be found in any of the sources listed in your Gemfile. If you haven't changed sources, that means the author of rake (12.3.1) has removed it. You'll need to update your bundle to a different version of rake (12.3.1) that hasn't been removed in order to install.
    Run `bundle install` to install missing gems.

bundle installしてくれと言われるので、します。

    # bundle install
    Fetching gem metadata from https://rubygems.org/.........
    Fetching version metadata from https://rubygems.org/..
    Fetching dependency metadata from https://rubygems.org/.
    -省略-
    Bundle complete! 15 Gemfile dependencies, 63 gems now installed.
    Bundled gems are installed into /usr/local/bundle.

railsのGemfileを使って諸々インストールしました。

（Gemfileはrailsの話なので省略します）

ここで、もう一度railsサーバーを起動します。

    # rails s
    => Booting Puma
    => Rails 5.0.7 application starting in development on http://localhost:3000
    => Run `rails server -h` for more startup options
    Puma starting in single mode...
    * Version 3.11.4 (ruby 2.3.3-p222), codename: Love Song
    * Min threads: 5, max threads: 5
    * Environment: development
    * Listening on tcp://0.0.0.0:3000
    Use Ctrl-C to stop

起動できました！

それでは、もう一度http://localhost:3000/にアクセスして、表示を確認しましょう。

どうやら繋がっているようですが「NoDatabaseError」が出たはずです。

![スクリーンショット 2018-04-20 20.50.21.png](https://qiita-image-store.s3.amazonaws.com/0/251273/e63756ee-c7d2-0481-28c5-ce04c8ae3236.png)


##4.RailsからDBを作ろう

データベースがないと怒られたので、Rails側からデータベースを作ります。



今のターミナルはそのままで（railsサーバーを起動したまま）、新しいターミナルを開いて下さい。

Rails側からデータベースを作りたいので、もう一度railsコンテナに入ります。

    $ docker exec -it dockertraining180421_app_1 /bin/bash

railsがいるディレクトリに移動します。

    # cd home

ここでrailsのコマンドrake db:createとrake db:migrateでDBを作ります。

    # rake db:create
    Created database 'testapp_development'
    Created database 'testapp_test'
    # rake db:migrate
    # 

DBができました！

では、もう一度http://localhost:3000/にアクセスして、表示を確認しましょう！

![dev8.jpg](https://qiita-image-store.s3.amazonaws.com/0/251273/1ae4a882-33dc-724c-bbcc-eaf95c2c1dd8.jpeg)