初心者インフラエンジニアが困ったときに試行錯誤するブログ

インフラエンジニアが,開発の勉強をするときのログを残します

DockerでRailsを動かす その4

実現したいこと

AWS Fargateを使って,クラウド上でRailsのコンテナを起動させてみたいと想います.

前回までの戦いはこちら

https://ktaka.hatenablog.com/entry/2018/11/12/002519

今回は,心機一転新しいサンプルアプリを上げてみます.

やったこと

railsのサンプルを拾ってきて,実行してみます

makefile

new:
        echo "$$_gemfile" > Gemfile
        touch Gemfile.lock
        docker-compose run web rails new . --force --database=mysql --skip-bundle --skip-javascript
        sudo chown -R $$USER:$$USER .
        echo "$$_database_yml" > config/database.yml
        docker-compose build
        docker-compose run web rails generate controller welcome index

        docker-compose run web sh -c 'sleep 10 && rake db:create'
        sudo chown -R $$USER:$$USER .

run:
        docker-compose up --build
define _gemfile
source 'https://rubygems.org'
gem 'rails', '~> 5'
endef
export _gemfile

define _database_yml
default: &default
        adapter: mysql2
        encoding: utf8
        pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
        username: root
        password:
        host: db

development:
        <<: *default
        database: myapp_development

test:
        <<: *default
        database: myapp_test

production:
        <<: *default
        url: <%= ENV['DATABASE_URL'] %>
endef
export _database_yml
~

docker-compose.yml

version: '2'
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ''
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
  web:
    image: ${APP_NAME}
    build: .
    volumes:
      - .:/myapp
    ports:
      - "8080:3000"
    environment:
      PORT: "3000"
    depends_on:
      - db

Dockerfile

FROM ruby:2.4-alpine
RUN apk add -U mariadb-client-libs tzdata
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN apk add -U build-base ruby-dev mariadb-dev --virtual .build-deps \
 && bundle install -j 4 \
 && gem sources --clear-all \
 && apk del .build-deps \
 && rm -rf /var/cache/apk/* \
           /root/.gem/ruby/2.4.0/cache/*.gem
COPY . /myapp
CMD exec bundle exec rails s -p ${PORT} -b '0.0.0.0'FROM ruby:2.4-alpine
RUN apk add -U mariadb-client-libs tzdata
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN apk add -U build-base ruby-dev mariadb-dev --virtual .build-deps \
 && bundle install -j 4 \
 && gem sources --clear-all \
 && apk del .build-deps \
 && rm -rf /var/cache/apk/* \
           /root/.gem/ruby/2.4.0/cache/*.gem
COPY . /myapp
CMD exec bundle exec rails s -p ${PORT} -b '0.0.0.0'

さて,とりあえずローカルで動かそうか...と思いきや...

$ APP_NAME=rails make new
....

RROR: unsatisfiable constraints:
  mariadb-client-libs (missing):
    required by: world[mariadb-client-libs]
ERROR: Service 'web' failed to build: The command '/bin/sh -c apk add-U mariadb-client-libs tzdata' returned a non-zero code: 1
make: *** [new] Error 1

あらら,エラーですよ.今度は何だ.そろそろECSに行かせてくれ

更新かなーとか思ったけど,apk addのときに -Uオプションはちゃんとついているし.

ググってもいい感じの解決方法がわからないので,この手法は諦めます.Postgreがいいし.

今日はこの辺にして,また明日以降がんばります.

参考

以下の記事を参考にさせていただきました.

AWS FargateでRuby on Railsを動かしてみる - Qiita

Alpineでパッケージをインストールしようとしたらエラーがでたので解消する - TOEIC940点の文系プログラマー

本記事について

本記事は,学習を目的に書かれています.

間違い,改良案などございましたら,コメントしていただけると幸いです.

基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,

その情報を中心に追記します.