LoginSignup
32
19

More than 3 years have passed since last update.

alpineベースのdockerイメージでrailsを動かすまで

Last updated at Posted at 2019-05-17

目的

何かあるとすぐにローカルのイメージ、コンテナ、ボリュームをまっさらにする癖があるが
ローカルでのDockerfileからのイメージのビルドが遅すぎる
高速化して開発効率をあげたい

ゴール

軽量なイメージを作成し、docker hubにあげて
それを参照するようにしたい

実践

軽量なイメージを作る

参考記事
- RailsのDockerイメージを一番小さくする方法

scratchは面倒くさそうなので一旦alpineでやります

ちなみに
https://imagelayers.io/
は死んでるので
https://microbadger.com
を使ってイメージの中身を解析できる

完成したDockerfile
FROM ruby:2.6.1-alpine

WORKDIR /usr/src/app
ENV TZ=Asia/Tokyo

COPY Gemfile .
COPY Gemfile.lock .

COPY package.json .
COPY yarn.lock .

RUN apk update && \
    apk add --no-cache yarn tzdata libxml2-dev curl-dev make gcc libc-dev g++ mariadb-dev imagemagick6-dev && \
    bundle install && \
    yarn install && \
    rm -rf /usr/local/bundle/cache/* /usr/local/share/.cache/* /var/cache/* /tmp/* && \
    apk del libxml2-dev curl-dev make gcc libc-dev g++

解説

  • apkについて
    • yarnはwebpacker使うので
    • tzdataはないとrails sをした時にtzinfo-data周りでコケる
    • libxml2-dev curl-dev make gcc libc-dev g++はnative extensionで必要(nokogiriとか)
    • mariadb-devはmysql使うために必要
    • imagemagick6-devはrmagick使うために必要
    • なんかよくわからんけど6じゃないとダメらしい
  • RUNについて
    • 1個にまとめて&&で繋ぐと少し軽くなるらしい
  • /usr/local/bundle/cache /usr/local/share/.cacheについて
    • 参考記事にも書いてある通りキャッシュが意外と容量食ってた

docker hubへのイメージのpush

参考資料
- DockerImageをDockerHubに登録の仕方

こちらの記事読めばそのままいけます

ハマりどころ

最後にrails sしようとしたらtzinfo-dataがないよって言われたり(tzdata追加で解決)
bundle installでいろいろパッケージが足りないよって言われたり
手探りでパッケージ入れてく必要があったので大変でした

最終的に

最初に適当に作ってたイメージが1.9GB
最終的に1GBを切ったのでだいたい半分ぐらい

雑なメモ書きみたいになってるので運用法含めていつか記事を書き直す

32
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
19