Open3

【未達】DockerのイメージをAlpineに変えてみる

Satoshi TodakaSatoshi Todaka

現在はRubyのフルバージョンで作成しているDockerイメージを、Alpineに変えてみようとした試み(未達となった自分用メモ)

Satoshi TodakaSatoshi Todaka

スタート時点のDockerfile

Dockerfile
FROM ruby:3.1.2
ARG ROOT="/sample_app"
ENV LANG=C.UTF-8 TZ=Asia/Tokyo

WORKDIR ${ROOT}

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN apt-get update; \
    curl -sL https://deb.nodesource.com/setup_16.x | bash -; \
    curl -Ss https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -; \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list; \
    apt-get update -qq && \
    apt-get install -y --no-install-recommends \
		  vim=2:8.2.2434-3+deb11u1 \
          mariadb-client=1:10.5.15-0+deb11u1 \
          tzdata \
          nodejs \
          yarn \
            && apt-get clean \
            && rm -rf /var/lib/apt/lists/*
            
COPY Gemfile ${ROOT}
COPY Gemfile.lock ${ROOT}
RUN gem install bundler:2.3.22;\
    bundle install --jobs 4

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]
Satoshi TodakaSatoshi Todaka

ベースのイメージをruby:3.1.2-alpine3.16に変えてみた。

  • インストールのコマンドがapkに変わる。
  • ビルド中のエラーで怒られたので、以下を追記した。
    • curl
    • build-base
    • mysql-client
    • mysql-dev
  • 以下の内容では、bundle install時にmysql2の処理でエラーが発生してしまう。何らかのパッケージが不足しているようで、また自分の理解が不十分であるが、時間の都合で今回はここまでとする。
  • 諦めてフルパッケージを使う( ;∀;)
Dockerfile
FROM ruby:3.1.2-alpine3.16
ARG ROOT="/sample_app"
ENV LANG=C.UTF-8 TZ=Asia/Tokyo

WORKDIR ${ROOT}

RUN apk update; \
    apk add curl;\
    curl -sL https://deb.nodesource.com/setup_16.x | bash -; \
    curl -Ss https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -; \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list; \
    apk update -qq && \
    apk add --no-cache \
          build-base \
          mysql-client\
          mysql-dev \
          vim \
          mariadb-client \
          tzdata \
          nodejs \
          yarn \
            && rm -rf /var/lib/apk/lists/*
            
COPY Gemfile ${ROOT}
COPY Gemfile.lock ${ROOT}
RUN gem install bundler:2.3.22;\
    bundle install --jobs 4

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]