コーヒー飲みながら仕事したい

仕事で使う技術的なことの備忘録とか

Dockerfile を使って、自分用の Ubuntu の Docker イメージを作成する

前回の続き。

tassi-yuzukko.hatenablog.com

今回の目的

docker pull ubuntuで最新版のubuntuイメージを取得することはできる。
しかし、その場合、 sudoすら入っていない状態なので、一つずつ apt-get で環境整備する必要が出てくる。 そこで、Dcokerfile を使用して楽をする。

Dockerfile とは

イメージのカスタマイズをスクリプトで実現することができる。
Dockerfile を使用することで、物理的に異なるデバイスでも、同一の環境をすぐ用意できるようになる。たぶん。

Ubuntu 用の Dockerfile 導入手順

参考

前提

そもそも Docker を導入した最終目的は protobuf-cで遊ぶためのコンパイル環境を用意することである。
そのため、 Ubuntu 用の Dockerfile も protobuf-c のコンパイルのためにカスタマイズする。

  • protobuf-c をコンパイルするために必要なもの一覧
    • sudo
    • autoconf
    • automake
    • libtool
    • curl
    • make
    • g++
    • unzip
    • pkg-config
    • protobuf(後述の注意の通り、apt-getで取得するのはNG)
  • あと、あれば便利なもの一覧

注意:protobuf-c と protobuf の互換性問題

現状、protobuf-c の最終リリース版(protobuf-c Ver1.30)自体に、本家 protobuf との互換問題があるらしい。
(protobuf Ver3.00 以上を用意しないと protobuf-c がコンパイルできない。しかし、Ubuntu 用の apt-get では protobuf のバージョンがVer2.6X らしいので、普通に本家 protobuf を用意するのではなく、自前で用意する必要がある)

上記を踏まえて Dockerfile を作る

そもそも、Dockerfileの置き場所はどこが適切なのか調べたが、ぱっと出てこない。
たぶん、どこでもいいような気がするので、今回はDocker ToolBox のルートパスである C:\Program Files\Docker Toolbox 直下に置いてみる。
Windows 10 では Program Files 内に直接ファイルを作ることはできないので、℃っか違うところで作って move する)

ファイル名は、まんまDockerfile (拡張子なし)でたぶんOK。

ファイルの中身は以下のようにしてみた。

#利用するUbuntuのイメージ
FROM ubuntu:14.04

#プロキシ設定が必要な場合のみ
#ENV https_proxy=XXX
#ENV http_proxy=XXX

#各種インストール
RUN apt-get update
#protobuf はあえてインストールしない
RUN apt-get install -y sudo autoconf automake libtool curl make g++ unzip pkg-config wget git

Dockerfile をビルド

docker build -t ubuntu1404 . でビルドする。(-t はタグ名なので必須だが任意の文字列)

イメージの取得も行うため、結構時間かかる。

追記

しかも、私の環境では powershell の描画更新がバグって

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype

とか出たりしたけど、気にしないでおこう・・・

さらに追記

さらに私の環境ではビルドが終了すると、上記の描画問題に加え、以下の警告が表示された。

SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

うーん、大丈夫なのかなぁ。
内容としては「 '-rwxr-xr-x' になってるよ!」ってだけだから問題なさそうだけど。

イメージの確認

docker images でイメージが作成されたことを確認する。

PS C:\Program Files\Docker Toolbox> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu1404          latest              1d8f1efde705        10 minutes ago      382MB

たぶん入ってるっぽい。

コンテナの起動

docker run -it -v /work:/work ubuntu1404 で起動する。(前回行った共有フォルダのマウントも有効にしている)

Dockerfile によるカスタマイズの確認

とりあえず make あたりを実行すしてみる。

root@8c8f74f92f1a:/# make
make: *** No targets specified and no makefile found.  Stop.

と出て、 make というコマンドを認識してるっぽいので、成功していることがわかる。


とりあえず今回は Dockerfile を使用して、 Ubuntu による protobuf-c のコンパイルの準備までやった。
次回は、protobuf および protobuf-c のコンパイルに焦点を当てて記事を書く。