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上にRails環境構築(DBはmariadb)

Posted at

Docker上にRails環境(DBはmariadb)を構築したい!

ローカル環境上にRailsの環境構築を行うと、どんどんローカルが汚れていくので嫌だなと。
なのでローカル上でDocker for Windowsを使用してRails環境を構築したく記事を書きました。
※色々弄りすぎた結果、この投稿に記載しているDockerファイルやdocker-composeファイルも汚れた状態での投稿になっています。。。綺麗にしたい。。。

構築にあたっての前提環境

構築手順

  1. プロジェクトを作成したい場所にフォルダを作成

  2. 上記で作成したフォルダ内にDockerファイルを作成

    FROM ruby:2.7
    
    ENV LANG C.UTF-8
    ENV WORKSPACE=/usr/local/src
    
    # install bundler.
    RUN apt-get update && \
        apt-get install -y vim less && \
        apt-get install -y build-essential libpq-dev nodejs && \
        apt install -y lsb-release && \
        apt remove -y libmariadb-dev-compat libmariadb-dev && \
        apt-get install -y nginx
    
    RUN wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-common_8.0.18-1debian10_amd64.deb \
        https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient21_8.0.18-1debian10_amd64.deb \
        https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client-core_8.0.18-1debian10_amd64.deb \
        https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client_8.0.18-1debian10_amd64.deb \
        https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_8.0.18-1debian10_amd64.deb
    
    RUN dpkg -i mysql-common_8.0.18-1debian10_amd64.deb \
        libmysqlclient21_8.0.18-1debian10_amd64.deb \
        mysql-community-client-core_8.0.18-1debian10_amd64.deb \
        mysql-community-client_8.0.18-1debian10_amd64.deb \
        libmysqlclient-dev_8.0.18-1debian10_amd64.deb
    
    RUN gem install bundler && \
        apt-get clean && \
        rm -r /var/lib/apt/lists/*
    
    # create user and group.
    RUN groupadd -r --gid 1000 rails && \
        useradd -m -r --uid 1000 --gid 1000 rails
    
    # create directory.
    RUN mkdir -p $WORKSPACE $BUNDLE_APP_CONFIG && \
        chown -R rails:rails $WORKSPACE && \
        chown -R rails:rails $BUNDLE_APP_CONFIG
    
    
    USER rails
    WORKDIR $WORKSPACE
    
    # install ruby on rails.
    ADD --chown=rails:rails . $WORKSPACE
    RUN bundle install
    
    ADD . /app
    RUN mkdir -p tmp/sockets
    
    # Expose volumes to frontend
    VOLUME /app/public
    VOLUME /app/tmp
    
    # Start Server
    # TODO: environment
    CMD bundle exec puma
    
  3. 同一フォルダにdocker-compose.ymlを作成

    docker-compose.yml
    version: '3.2'
    services:
      api:
        build: .
        command: bundle exec rails s -p 8080 -b '0.0.0.0'
        container_name: '好きなコンテナー名'
        ports:
          - 8080:8080
        volumes:
          - type: bind
            source: ./
            target: /usr/local/src
        restart: always
        environment:
            TZ: Asia/Tokyo
        links:
            - maria-db
      
      maria-db:
        image: mariadb:10.5.2
        command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
        environment:
            MYSQL_ROOT_PASSWORD: hoge
            MYSQL_DATABASE: hoge
            MYSQL_USER: hoge
            MYSQL_PASSWORD: hoge
        ports:
            - '3306:3306'
        command: --innodb-use-native-aio=0
        volumes:
            - ./docker_config/db/volumes:/var/lib/mariadb
            - ./docker_config/db/my.cnf:/etc/mysql/conf.d/my.cnf
    
  4. プロジェクトの作成
    コマンドプロンプトを立ち上げプロジェクトを作成するフォルダまで移動後、下記コマンドを実行する

    $ docker-compose run --rm api rails new . --force --database=mysql --skip-bundle
    $ docker-compose run --rm api bundle exec spring binstub --all
    
  5. databaseの接続情報を設定
    プロジェクトフォルダ/config/database.ymlにDBの接続情報を記載

default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: hoge
password: hoge
host: maria-db
```

  1. 起動する
$ docker-compose up
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?