こんにちは。前回の記事で Dockerイメージを作ることに成功したので、手順を少しだけ踏み込んだ形でご紹介できたらなと思い、寄稿いたしました。
ゴールを決める
私は自分のMACに直接Jekyll環境を入れたくなかったので、Jekyllを動かすことをゴールにしました。
Docker ディスクトップをインストールする
コマンドのみでの導入も良いのですが、私は視覚的に分かりやすい Dockerディスクトップを入れました。ここから先はDockerディスクトップを立ち上げた状態です。
Dockerで使うOSを探す
Docker対応のOS(Linux系)を探します。本当はOSではないらしいのですが、あんまり気にせずここではOSと言います。記事は古いですが、Docker公式OS一覧に一覧がありました。
とりあえず空のイメージを作る
空のイメージを作って、runコマンドを打ちます。コマンドはメモしてゆきます。ここで使った Dockerコマンドは下記です。
docker run -it --name=”コンテナ名" OS名:バージョン シェルのパス
これでOSの初期状態のコンテナができますので、コマンドを打ち込んでゆきます。ただし、visudoなど、ファイルを編集する命令はコマンドで済ませるようにします。再編集する際は下記の Dockerコマンドを使います。
docker start コンテナ名
docker exec -it コンテナ名 シェルのパス
目的が達成できたら Dockerfileを作る
OS起動からDockerのイメージを作るためのコマンド群をDockerfile(拡張子なし)記述してゆきます。私の場合、下記のようなファイル内容にしました。
FROM alpine
RUN apk add --no-cache bash sudo curl git
RUN addgroup -S user
RUN adduser -S user -G user -s /bin/bash
RUN echo 'user ALL=(ALL:ALL) NOPASSWD:ALL' | sudo EDITOR='tee -a' visudo
RUN visudo -c
RUN su -s /bin/bash - user
COPY --chown=user:user ./Jekyll /home/user/Jekyll/
RUN sudo apk add --no-cache python3 py3-pillow
RUN curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
RUN echo 'eval "$(rbenv init - bash)"' >> ~/.profile
ENV source ~/.profile
RUN sudo apk add --no-cache alpine-sdk openssl-dev zlib-dev
ENV rbenv install -v 3.1.2
ENV rbenv global 3.1.2
RUN sudo apk add --no-cache build-base ruby-dev linux-headers
RUN gem install jekyll bundler
RUN gem install minima
RUN gem install jekyll-feed
RUN gem install jekyll-sitemap
RUN gem install jekyll-paginate-v2
ENV bundle install
ENV bundle add webrick
CMD ["/bin/bash"]
イメージを作る
MACの場合の話になりますが、cd Dockerfileのある階層に移動し、「Jekyll」フォルダを作った後(マウント先)、イメージを作るコマンドを打ちます。
docker build -t イメージ名:適当なタグ名 .
うまくいけば止まることなく、イメージが完成します。失敗した場合はコードを見直します。またキャッシュが溜まるので随時消してゆきます。キャッシュ削除は下記コマンド。
docker builder prune -f
イメージができたら、run、exec どちらでも好きな方で走らせます。runの場合は、コンテナを抜けると初期化されます。その代わりrunでないと実行できないオプション(-pなど)もあるので、私はイメージに必要なものを全て書き込みました。
こんな感じでした。あくまで一例なので、細かいことは省いています。こんな風に作る人も居るんだなー程度に捉えていただけたら幸いです。
お粗末さまでした🙇