docker

Dockerのインストール~Dockerfileでイメージを作る まで

More than 1 year has passed since last update.

Dockerのインストール~Dockerfileでイメージを作る まで

Dockerのインストール~Dockerfileでイメージを作る まで

paiza開発日誌:知らぬはエンジニアの恥。今さら聞けない【コンテナ/仮想化技術】11選
これを読んで面白そうだったので、初めてdockerを触ってみます。

gitがインストールされたcentosのイメージを作ることを目標にします。

1.チュートリアル

https://www.docker.com/tryit/
まずはチュートリアルをやってみます。

"docker run"でイメージからコンテナを作り、コンテナ上で加えた変更を"docker commit"することで、その変更を取り込んだ新しいイメージが生まれるみたいです。
(コンテナとイメージが何者なのか、めもめも:Dockerにおけるコンテナのライフサイクル を読んだことで理解が進みました。)

チュートリアル後、NextStepとしてDockerHubへの登録とDockerのインストールをするように言われました。

DockerHubに登録

https://hub.docker.com/
言われるがまま登録。

Dockerをインストール

https://docs.docker.com/installation/
(自分の環境はWindowsなので http://docs.docker.com/installation/windows/ から)
インストール後、デスクトップに出来た"Boot2Docker Start"というショートカットを実行してしばらく待つと、チュートリアル同様クジラのAAと共にdockerが起動しました。

2.dockerを起動

これでdockerが触れるようになったので少し試してみます。

$ docker images

今の時点では何も表示されません。何か使えるimageを探してくる必要がありそうです。

$ docker search centos

今回はcentosのimageが欲しいので、チュートリアルの真似をして探してみます。
が、search結果が大量に表示され、どれを使えば良いのかわかりません。

$ docker pull centos

よくわからないので、とりあえずpullしてみます。
完了を待って、改めてdocker imagesすると、

> REPOSITORY          TAG                 IMAGE ID            CREATED          VIRTUAL SIZE
> centos              latest              ae0c2d0bdc10        3 weeks ago      224 MB

このように表示されました。230MBほどと小さいので最小構成でしょうか。これを使ってみます。

$ docker run centos /bin/bash

試しにbashを実行して・・・と思ったら、何も表示されません。
docker ps -l すると、↓のように表示されたので、コンテナは作られているようなのですが。

> CONTAINER ID        IMAGE               COMMAND             CREATED          STATUS                      PORTS        NAMES
> 2694b04acf97        centos:latest       "/bin/bash"         57 seconds ago   Exited (0) 56 seconds ago                trusting_thompson

$ docker run -it centos /bin/bash

ググって様子を見ると、"-it"という引数を付けて実行すると上手く行きそうです。
"docker run -h"でドキュメントを見ると、

-i, --interactive=false    Keep STDIN open even if not attached
-t, --tty=false            Allocate a pseudo-TTY

"pseudo-TTY とは"でググったりしつつ、このオプション指定で目の前のコマンドラインとdockerの中の仮想マシンの標準入力とがアタッチされた状態になることが分かりました。

これで、bashから"yum install git"と実行して"docker commit"すれば、「gitがインストールされたcentosのイメージを作る」目標は達成できそうですが、

3.Dockerfileからコンテナを作ってみる

http://docs.docker.com/reference/builder/
Dockerfileという、手順書を元にイメージを作ってくれる仕組みがあるようなのでこれを使ってみます。
調べたところ、元になるイメージの指定+bashで実行するコマンドをそのまま書けば、大体なんとかなるようです。

$ vi Dockerfile

ともあれ、カレントディレクトリにDockerfileを作ってみます。
今回はgitのインストールが目標なので、

FROM centos
RUN yum -y install git

Dockerfileの中身はこんな感じでしょうか?

$ sudo docker build .

"docker build"コマンドで、指定したディレクトリにあるDockerfileが実行されイメージが出来上がるらしいです。
ともかく実行してみます。

少し待つと、

> Successfully built 31f64bc5885d

成功したようです。31f64bc5885dが出来たイメージのIDでしょうか。

$ docker run 31f git version

> git version 1.8.3.1

gitのバージョンが返ってきたので、これで「gitがインストールされたcentosのイメージ」が出来たようです。

終わり

無事目標は達成できました。