自由気ままに書いちゃおう

好きなことをつらつらと・・・

【docker】Dockerイメージの作成について(dockerfileとdocker buildコマンド)

過去の記事でDockerイメージの作成について触れています。

 

www.guri2o1667.work


今回は、「Dockerイメージを作成する際の手段」について整理したいと思います。

■はじめに

Dockerイメージを作成する(=自分の思い通りのDockerイメージを作成する)には、
以下の方法があります。

① docker commitコマンドを利用する
  ⇒ 冒頭の記事の内容です。
    ベースとなるDockerイメージをコンテナ化して、コンテナ上で修正を加えた上で、Dockerイメージを(再)作成する方法です。

② docker buildコマンドを利用する
  ⇒ 本記事の記載範囲です。
    ※詳細は後述致します。

■(概要)docker buildコマンドとは

dockerfileの情報を基にDockerイメージを作成するコマンドです。
※dockerfileは後述致します。

■dockerfileとは

dockerfileは、Dockerイメージの定義ファイルです。
もう少しかみ砕くと、
dockerfileの内容を実行することでDockerイメージを作成することができます。

■dockerfileの記述内容例

dockerfileは以下のようなものです。

f:id:guri2o1667:20201120142702p:plain

※参照元: こちら

上図をみると、
紫色がコマンド
赤色や緑色がオプション(実行内容)
のような感じです。
※詳細は後述致します。

このdockerfileを利用してdocker buildコマンドを実行することで、dockerfileの内容が実行されたDockerイメージを作成することができます。

■dockerfileの書式について

dockerfileにもリファレンスやベストプラクティスがあります。
詳細は下記リンク先を参照いただき、
本記事では重要なところや利用頻度が高いものをピックアップして記載致します。

Dockerfile リファレンス — Docker-docs-ja 17.06 ドキュメント

Dockerfile を書くベスト・プラクティス — Docker-docs-ja 17.06.Beta ドキュメント

 

■とりあえずやってみる

とりあえずやってみます。
流れは以下の通りです。
1.dockerfile作成
2.docker buildコマンド実行
3.前の手順で作成したDockerイメージを利用してコンテナを起動


■1.dockerfile作成

作成場所はどこでもよいのですが、空のディレクトリ/フォルダにdockerfileを格納するのがベストプラクティスに沿ったやり方です。

1.作業用フォルダを作成します。
※今回はデスクトップ上にwork1というフォルダを作成し、その中にDockerfileを作成しています。
※Dockerfileの命名規則は先頭が大文字のDです。

f:id:guri2o1667:20201120152755p:plain


2.Dockerfileを修正し、保存します。

※VSCodeを使って修正しておりますが、好きなテキストエディタで構いません。
※中身は下図の通りです。

f:id:guri2o1667:20201120152946p:plain


1行目でDockerイメージのベースを指定し、2行目でイメージ作成時点で実行したいコマンドを記載しています。

■2.docker buildコマンド実行

1.ベースとなるDockerイメージの存在状況を確認しておきます。
※ここでは、centos:centos8をベースにしているので、それが存在するかを確認しています。下から2つ目が該当します。

f:id:guri2o1667:20201120154000p:plain


2.docker buildコマンドを実行します。

cd C:\Users\test\Desktop\work1
docker image build -t centos:centos8-build .

f:id:guri2o1667:20201120153155p:plain


docker buildコマンドの最後の.(ドット)は、
「コマンド実行時のカレントディレクトリに存在するDockerfileを利用する」
を意味しております。
なので、カレントディレクトリにDockerfileがないのであれば、カレントディレクトリまで移動する必要があります。

3.Dockerイメージが作成されているかを確認します。
※一番上のものが、今回作成したものです。

f:id:guri2o1667:20201120154722p:plain

 

■3.前の手順で作成したDockerイメージを利用してコンテナを起動

では、コンテナを起動してみます。

f:id:guri2o1667:20201120154913p:plain

net-toolsパッケージも無事インストールされていることがわかりました。


以上です。