LoginSignup
7
8

More than 3 years have passed since last update.

DockerでRailsアプリケーション立ち上げ〜Githubプッシュまで

Last updated at Posted at 2020-02-21

学んだこと、細かい設定、エラーをメモ

環境

Ruby 2.6.5
Rails 5.2.4
Docker 19.03.5
bundler 2.1.4

実装:Docker環境

各ファイル用意

適当にディレクトリ作成してその中に下記のファイルを入れる

ターミナル
$ mkdir hoge

Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock

Dockerfile
Dockerの新しいimageを作成する際に使用する設定ファイル。
コンテナはこの設定(image)を元に作成される。
Dockerfile → クラス
コンテナ → インスタンス
みたいなイメージ?

Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

docker-compose.yml
Dockerで複数のコンテナを設定に従ってまとめて起動するために使用する。
今回はRailsを実行するコンテナ、Mysqlを実行するコンテナの2つを起動する設定を記述。

docker-compose.yml
version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - db
    tty: true
    stdin_open: true
  db:
    image: mysql:5.7
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
volumes:
  db-volume:
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.4'
Gemfile.lock
空でOK

Railsプロジェクト作成

ターミナル
$ docker-compose run web rails new . --force --database=mysql

docker-compose run web
docker-compose.ymlで設定したWebコンテナ(Railsコンテナ)の中で後に続くコマンドが実行される。

イメージをビルド

ターミナル
$ docker-compose build

Dockerfileが実行

database.yml編集

passwordhostの指定

database.yml
password: docker-compose.ymlの MYSQL_ROOT_PASSWORD で設定した文字列(今回はpassword)
host: MySQLサーバーのコンテナ名(今回はdb)

コンテナ起動

・起動

ターミナル
$ docker-compose up -d

・起動確認

ターミナル
$ docker-compose ps

stateUpになっていれば起動確認

・コンテナ、ネットワークの削除
--rmi allでイメージも削除

ターミナル
$ docker-compose down --rmi all

データベース作成

ターミナル
$ docker-compose run web bundle exec rails db:create

bundlerのバージョンを変更したらエラー

1系がインストールされていることに気がついたので2系にしたらエラーがでた。
こちらの記事を参考に。

Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN gem install bundler # 追加
RUN bundle install
COPY . /app

bundle installの前に最新のbundlerをインストールすることで解決。

Docker内のMySQL接続方法

ターミナル
dockerで立ち上げた MySQLへの接続
$ docker-compose up -d →コンテナ起動
$ docker-compose ps →現在立ち上がってるコンテナ確認
 ↪︎ NAMEのdb名を確認(my_youtube_space_db_1)
$ docker exec -it my_youtube_space_db_1 bash → コンテナへ接続
# mysql -u root -p →シャープが表示されたら入力する
Enter password: → docker-compose.ymlで設定したパスワード入力

後はローカルのMySQLいじる時の操作と同じ 

実装:Githubへプッシュ

Git Flow

ターミナル
$ git flow init
enter * 7回

リモート作成

github → Your profile → Repositories → NEW → リモート名記述 → Create repository

リモートとローカルの紐付け

ターミナル
$ git remote add origin url
$ git push -u origin master
$ git push --all

.gitignore編集

.gitignore
# 追記
/config/database.yml
docker-compose.yml

add commit push

割愛

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