前回の続き。
今回の目的
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)
- あと、あれば便利なもの一覧
- wget
- git
注意: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 のコンパイルに焦点を当てて記事を書く。
コメント