今回はDockerfileについての基本的な役割とその操作方法をみていこうと思います。
この内容は【初心者向け】基本的なDockerコマンド⑵の続きの内容となります。
Dockerfileとは?
Docker imageを作成するテキストファイル(Docker imageの設計図みたいなもの)です。
Dockerfile内にあらかじめ様々なインストラクション(※後述します)を組み合わせて独自のDocker imageを作成することができます。
Dockerfileをbuildする
まずは簡単にDockerfileで、Docker imageを作成してみます。
そのまま「Dockerfile」というファイルを作成します。(今回はDesktop上に作成)
このファイル内にお使いのエディタで以下の二行を記述します。
コンテナを起動時、ubuntuのホームディレクトリ内にtestファイルが作成されている想定です。
Dockerfileがあるディレクトリ上でビルドを行います。
そうすることでDockerfileを元にDocker imageを作成することができます。
ー公式ー
$ docker build <directory>
カレントディレクトリにDockerfileがある場合は
$ docker build .なお、このままDocker imageを作成するとdangling imageと呼ばれるDocker imageの名前とタグ名がそれぞれ<none>と表示されるので、以下でDockerfileをビルドする。
$ docker build -t <dockerImageName>:<dockerTagName> <directory>
$ docker build -t new_ubuntu:latest .
このDocker imageをコンテナで起動してみるとubuntuのルートフォルダの中にtestファイルがあることがわかります。
では以下よりDockerfile内をもう少し細かくみていきます。
Dockerインストラクション
先ほどのDockerfile内に記述したFROM , RUNなどがDockerインストラクションです。
DockerfileはこのDocker インストラクションを使用することでオリジナルのDocker imageを作成することができます。
Docker インストラクション
(1)FROM
- ベースとなるイメージを決定(今回のベースのイメージはubuntu)
- ベースの上に様々なimageが重なっていくイメージ
- DockerfileはFROMから書き始める
(2)RUN
- Linuxコマンドを実行
- RUNを使うことで好きなようにDocker imageをカスタマイズすることができる
- RUN毎にLayerが作られる
Dockerfile内に複数のインストラクションを記述し、Docker imageを作成・コンテナを起動する
DockerfileからDocker imageを作成します。
$ docker build -t ubuntu:latest .
コンテナを起動させます。
$ docker run -it 81541f7c1af7 bash
コンテナ内に初めからsampleファイルが作成され、
そのファイル内に「hello docker」と記述されていることが確認できました。
ただLayer層が増えるとDocker imageの容量が増えてします。
ベストプラクティスはDocker imageのLayer層を最小限にすることです。
Docker imageのLayer層を最小限にする
方法として
- コマンドを&&で繋げて、一つのRUNで実行できるようにする
- またバックスラッシュ(\)で改行する
上記でも良いが可読性をあげるために以下のように改行を行います。
既存のDockerfileを更新したので、Docker imageも更新する。
今回は以下で実行
$ docker build -t ubuntu:latest .
同様にコンテナ内に初めからsampleファイルが作成され、
そのファイル内に「hello docker」と記述されていることが確認できると思います。
少し間があきましたが、DockerインストラクションのCMDについてです。
(3)CMD
- コンテナ起動時のデフォルトコマンドを指定
- CMD[ “executable(コマンド)” , “param1” , “param2”]
- 原則Dockerfileの最後に記述する
docker run 〜を行うとLinuxのホームディレクトリ内のファイルやディレクトリを表示していることがわかります。
※lsコマンドの実行動作
Dockerfileを作成するときはcacheをうまく利用する(余談)
Dockerfileに新たにコマンドやパッケージを加えてビルドする際に、前回ビルドしたものに関してはcacheを用いて再ビルドの対象にならないようにします。そうすることで、ビルド時間の短縮を行うことができます。
この後にコマンドを追加するためにすでにビルドしたコマンドをまたビルドしないようにcacheを用いる。
とは言ってもやり方は簡単で下の画像のようにRUNを追加するだけで良いです。
以上が基本的なDockerfileの役割と操作方法についての内容になります。
実際に手を動かしながら同じ動作になるか確認してみることで、定着度合いが上がると思いますので、お時間ある方はぜひこの内容を確認しながら動作確認を行っていただければと思います。
udemyオススメ動画講座
まずはコースのプレビュー(無料)からみてみてください。
コメント