【비망록】Rails+MySQL의 환경 구축을 Docker로 행한다

3727 단어 alpine도커Rails

전제



로컬 환경


  • macOS Mojave10.14.6
  • Docker for mac 2.2.0.5

  • 버전


  • Ruby ... 2.6.3
  • Rails ... 5.2.4.1
  • alpine

  • 기타



    프로젝트 디렉터리 준비


    $ mkdir myapp
    $ cd myapp
    

    파일 작성


    $ touch docker-compose.yml Dockerfile Gemfile Gemfile.lock
    

    각 파일 편집


  • .env.example
  • DB_NAME=myapp
    DB_TEST_NAME=myapp_test
    DB_USER=admin
    DB_PASS=admin
    DB_ROOT_PASS=password
    TZ=Asia/Tokyo
    
  • docker-compose.yml
  • version: "3"
    services:
      app:
        build: .
        volumes: 
          - .:/var/www/myapp
        command: rails s -p 8000 -b '0.0.0.0'
        ports: 
          - 13000:8000
        links: 
          - db
          - db-test
    
      db:
        image: mysql:5.7
        environment:
          - MYSQL_DATABASE=${DB_NAME}
          - MYSQL_USER=${DB_USER}
          - MYSQL_PASSWORD=${DB_PASS}
          - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
          - TZ=${TZ}
        ports: 
          - 23306:3306
    
      db-test:
        image: mysql:5.7
        environment:
          - MYSQL_DATABASE=${DB_TEST_NAME}
          - MYSQL_USER=${DB_USER}
          - MYSQL_PASSWORD=${DB_PASS}
          - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
          - TZ=${TZ}
        ports: 
          - 33306:3306
    
  • Dockerfile
  • FROM ruby:2.6.3-alpine3.10
    
    RUN apk --update --no-cache add git \
      tzdata \
      libxml2-dev \
      curl-dev \
      make \
      gcc \
      libc-dev \
      g++ \
      mariadb-dev \
      linux-headers \
      nodejs
    
    ENV APP_ROOT /var/www/myapp
    
    WORKDIR $APP_ROOT
    
    COPY ./Gemfile $APP_ROOT/Gemfile
    COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock
    
    RUN bundle install && \
        apk update
    
    COPY . $APP_ROOT
    RUN rm -rf /usr/local/bundle/cache/* ${APP_ROOT}/vendor/bundle/cache/*
    
  • Gemfile
  • source 'https://rubygems.org'
    gem 'rails', '5.2.2'
    

    .env.example을 복사하여 .env 만들기


    $ cp .env.example .env
    // コピー後、値をPJに応じて変更
    

    애플리케이션 작성


    $ docker-compose run app rails new . --force --no-deps --database=mysql --skip-bundle
    
  • 디렉토리가 아래와 같이 되어 있으면 성공
  • $ tree -L 1 .
    .
    ├── Dockerfile
    ├── Gemfile
    ├── Gemfile.lock
    ├── README.md
    ├── Rakefile
    ├── app
    ├── bin
    ├── config
    ├── config.ru
    ├── db
    ├── docker-compose.yml
    ├── lib
    ├── log
    ├── package.json
    ├── public
    ├── storage
    ├── test
    ├── tmp
    └── vendor
    

    config/database.yml 편집


    $ vi config/database.yml
    
    default: &default
      adapter: mysql2
      encoding: utf8
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: admin   # docker-compose.ymlの設定と合わせる
      password: admin   # docker-compose.ymlの設定と合わせる
      host: db   # docker-compose.ymlのサービス名と合わせる
    
    development:
      <<: *default
      database: myapp   # docker-compose.ymlの設定と合わせる
      host: db   # docker-compose.ymlの設定と合わせる
    
    (中略)
    test:
      <<: *default
      database: myapp_test   # docker-compose.ymlの設定と合わせる
      host: db-test   # docker-compose.ymlの設定と合わせる
    
    (中略)
    
    production:
      <<: *default
      database: myapp_production
      username: admin   # docker-compose.ymlの設定と合わせる
      password: <%= ENV['TESTAPP_DATABASE_PASSWORD'] %>
    

    docker-compose


    $ docker-compose build
    $ docker-compose up -d
    $ docker-compose exec app ash
    $ rails -v   // バージョンが表示されれば成功
    $ rails db:create
    

    화면 확인


  • localhost : 13000에 액세스하고 TOP 화면이 표시되면 성공

  • 좋은 웹페이지 즐겨찾기