[Docker] AlpineベースのRubyコンテナにMySQLとGemをインストールする
Dockerで軽量なAlpine LinuxベースのRubyコンテナにMysql Gemをインストールしようとしたら、いろいろハマったので対策をメモとして残します。
公開日: 2019.2.1
Dockerで軽量なAlpine LinuxベースのRubyコンテナにMysql Gemをインストールしようとしたら、いろいろハマったので対策をメモとして残します。
Dockerfile (成功例)
こちらの例で成功しました。
GemfileはDockerfileと同じディレクトリにある前提です。
FROM ruby:2.4.0-alpine
RUN apk --no-cache add build-base mariadb-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app
RUN bundle install
Dockerfile (失敗例)
FROM ruby:2.4.0-alpine
RUN apk --no-cache add mysql-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app
RUN bundle install
build-baseがないとGemの作成で失敗する
build-baseがない状態だと、Mysql2 Gemをビルドする際に下記のエラーが出ました。
/usr/local/lib/ruby/2.4.0/mkmf.rb:457:in \`try\_do': The compiler failed to
generate an executable file. (RuntimeError)
You have to install development tools first.
from /usr/local/lib/ruby/2.4.0/mkmf.rb:542:in \`try\_link0'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:557:in \`try\_link'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:768:in \`try\_func'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:1055:in \`block in have\_func'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:945:in \`block in checking\_for'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:351:in \`block (2 levels) in postpone'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:321:in \`open'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:351:in \`block in postpone'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:321:in \`open'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:347:in \`postpone'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:944:in \`checking\_for'
from /usr/local/lib/ruby/2.4.0/mkmf.rb:1054:in \`have\_func'
from extconf.rb:25:in \`<main>'
build-baseを追加すればOKでした。
mysql-devでもmariadbがインストールされる
ネットで探していると、「mysql-devじゃなくてmariadb-devをインストールするといい」という情報が出てきますが、2019年2月現在では、mysql-devを指定しても、自動的にmariadb-devがインストールされました。