c0d3man52

Webサイト制作

[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がインストールされました。

タグ