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でコンテナのデフォルトのコマンドを指定する