24
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tech-Circle Hands onAdvent Calendar 2016

Day 13

ビルド職人、Dockerの旨味を知る

Last updated at Posted at 2016-12-12

前フリ

この記事はTech-Circle Hands on Advent Calendar 2016の12/13の記事です。
昨日は@akiraabeによるシェル芸人 meets Dockerでした。
シェル芸は良いものです。この記事もDocker関連なのでカブリました。

この記事について

この記事が公開される前日はTechCircle試してわかるSDN~Tremaではじめるパケット生成ハンズオン~を開催しました。
その中のLTである「Trema本をbuildする話」の内容からネタ臭を控えめにDockerの活用という観点で焼き直したものです。

ここから本題。

この記事を3行でいうと

  1. https://yasuhito.github.io/trema-book/ で公開されているTrema本をビルドするためのdockerイメージを作った
  2. docker run --rm -v pwd:/data seiketkm/trema-book-build でTrema本ビルドできる
  3. 一行余った

Trema本のbuildする。

Trema本のフリー版は全文が公開され、更にPDFファイルを生成する手順が公開されています。

なんと、コレだけ。

git clone git@github.com:yasuhito/trema-book.git
cd trema-book
bundle install
bundle exec rake

しかし、実際にやってみると一筋縄ではいかないのがわかります。

  • buildするためのコマンドが入ってない
  • bundle installでnativeモジュールのビルドが出来ない。
  • 実はJDKが必要など。

だいたい、コレくらい引っかかって出来たビルド結果はコノザマだったりします。

つらい。

苦戦の原因はなにか、

間違いなくビルド環境の違いですね。
執筆者と自分の作業環境が異なっているのでしょう。

Trema本のbuildをするのにDockerイメージ作ったぞ:whale:

環境の違いがなければ通るはず。
そこでTrema本のbuild環境のDockerイメージを作りました。(依存関係は根性で突き止めました)

Dockerfileとイメージです。よければGithubでスターください。
github
dockerhub

このイメージを使うと
docker run --rm -v `pwd`:/data seiketkm/trema-book-build
だけでtrema本のPDFが手に入ります。

Dockerfileのつくりかた

イメージ部分に載せる所(環境) と 手順的に実施する所(手順) を分けてます。
以下が作成したものです。

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y git ruby-dev openjdk-8-jdk rake ruby-bundler build-essential fonts-vlgothic && rm -rf /var/lib/apt/lists/*
VOLUME /data
ADD build.sh /
WORKDIR /trema-book
ENTRYPOINT ["/bin/bash", "/build.sh"]

Dockerfileの説明

Dockerfileの説明は世の中にいっぱいあるので、簡単に要点だけ抜粋すると。

RUN RUNで定義するコマンドは、コマンドが動作した結果がイメージ部分になるのでビルド環境に必要なパッケージ群をインストール。

VOLUME Docker上でビルド結果(pdfファイル)を作成したあと、dockerコンテナと共にファイルが消えてしまわないように、ホスト側と共有するディレクトリを指定します。

ENTRYPOINT docker runをしたユーザの手元で動く処理を定義します。この例では具体的には追加したシェルスクリプトです。

ENTRYPOINTやCMDで複数のコマンドを指定を出来ない点をbuild.shに定義することでごまかしています。正攻法だと思うのですが、間違ってたら誰か指摘してほしいです。

Dockerの旨味を知る:yum:

と、このようにDockerfileを作成したことで、Dockerがうごけばどのような環境でもビルドできるようになったはずです。

今回はビルドという題材でDockerを利用しました。
これを実践するまでは、Dockerの旨味はWebアプリを同じ環境で動かす程度の利用価値かと思ってましたが、もっと色々なことに対して応用していけそうですね。

Webの大海にはIDEやらXやらをDockerに入れたりしてる人もいるようで、見識が不足していたカンジです。

宣伝

ちなみに私は Tech-Circle Hands on Advent Calendar 2016は1週間ぶり2度目の登板です。

1本目の未来からやってきたロボホンのアプリを開発したよにも、この記事にも是非**いいね!**をよろしくお願いします。

明日の記事

明日の記事は、
@_BSmile_による、Zabbixっぽいなにかです、お楽しみに。

24
11
2

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
24
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?