dockerのメモ その2

はじめに

dockerのメモその2です。 前のメモではdockerイメージをdockerhubから取得してきてそのコンテナを起動してみたという感じでした。 今回はDockerfileを作成し、自分でDockerimageを作成することをやっていきます。

Dockerfileのサンプル

実際に作成されているDockerfileを見てみたいと思います。 ここではdockerhub上にあるDockerfileを例にしてみたいと思います。

前回に行ったMysqlを対象にすると以下がimageとしてリンクされていました。 mysql/Dockerfile.debian at c506174eab8ae160f56483e8d72410f8f1e1470f · docker-library/mysql · GitHub

Dockerfileを作成する

試しにlinuxを起動し、そのコンテナに入ってみるというのを目指していきます。 ファイル名はDockerfileという名前で作ります。

FROM

まずはFROMでベースとなるイメージを指定します。 以下はubuntuの最新版を指定するサンプルになります。

FROM ubuntu:latest

build

Dockerfileを作成したらdocker buildコマンドを使って docker imageを生成します。

以下はカレントディレクトリにDockerfileがある状態で実行するサンプルになります。

docker build .

以下のようなログがでます。最後のところでイメージIDがでます。

 => exporting to image                                                                                                                                                       0.0s
 => => exporting layers                                                                                                                                                      0.0s
 => => writing image sha256:0d450123e3e93cd5abb3898071a7ba6c114ba711ca115be3eecdb7398acc726e                                                                                 0.0s

実行した後、Docker imageが作成されているか確認するために以下を実行します。 先程のログで確認できた0d450123xxxというIMAGE IDが確認できます。

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
<none>       <none>    0d450123e3e9   11 hours ago   72.8MB

docker imageに名前をつける。

以下のようにすると名前をつけることができます。 (-tの引数に設定しているtestが名前)

docker build -t test .

上記コマンド後、docker imagesで確認すると以下のようになります。

docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
test         latest    0d450123e3e9   11 hours ago   72.8MB

docker imageをrunする

以下コマンドで実行します。

docker run -it test bash

上記の実行が成功するとコンテナの中に入り、実際にbashでコマンド入力ができる状態になっていることがわかります。

もうちょっといろいろやるDockerfileを作成

以下のようにDockerfileを修正します。

FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
    vim
RUN touch test.txt
CMD ["/bin/bash"]

やっていることを書くと ubuntuの最新のイメージで apt-getをupdateしてからvimをインストール、 そしてtest.txtを作成し最後に/bin/bashで起動した状態にするという感じになります。 次の項目でFROMとか、RUNとか、CMDの行っていることを書いていきます。

Dockerfileのコマンドの整理

以下のコマンドのやっていることを書いていきます。 * FROM * RUN * CMD

FROM

役割はベースになるイメージを設定します。 本記事ではubuntuを指定したがalpineのイメージを指定するのも よくあるようです。

RUN

こちらはlinuxのコマンドを実行することができます。 例えばファイルを作成するなら以下のようなコマンドになります。 (test.txtを作成するコマンド)

RUN touch test.txt

このRUNを使うことで好きなようにカスタマイズすることができます。 注意点としてはRUNコマンドを実行するごとにLayerが作成されることになり、 これはDockerimageのサイズが大きくなることになります。

そのためLayer数を少なくすることはDockerimageを作成する中で重要になります。 対応としてはコマンドを&&でつなげることでLayerの増加を防ぐことができます。

CMD

コンテナのデフォルトのコマンドを指定することができます。 よくあるのはbin/bashを指定するような実装で以下のようなものです。

CMD ["/bin/bash"]

またDockerfileの最後に1つ書くという感じのようです。

まとめ

今回は自分でDockerfileを作成しDockerimageを作成し、以下のことについて 取り組みました。

  • Dockerfileという名前でファイルを作成する
  • FROMでイメージを指定する
  • RUNでコマンドを実行する
  • CMDでコンテナのデフォルトのコマンドを指定する