Docker fileとは
Docker imageを作成するためのテキストファイル(Docker imageの設計書)です。
Docker fileという名前のテキストファイル(文字コードで定義される文字データのみを含むシンプルなファイル)で表記されます。
Docker fileコマンド集
$ docker build `<directory>` docker build .`(カレントディレクトリ)`
カレントディレクトリ(現在いるディレクトリ)からDocker fileを探しDocker fileを元にDocker imageを作成する。
$ docker build -t `<name>` `<directory>`
作成されたディレクトリは<none>表記になる。(dangling imageのこと)
そのため、名前をつけてあげる。
Docker fileのinsturuction(命令)について
Docker fileのinstructionとはわかりやすく説明すると
Docker fileを作る際の規則になります。
Dockerfile に記載する FROM [値]や RUN [値]などのことです。
Dockerfile には以下のインストラクションがあります。
主要なinsturuction
主要なinstuructionについて整理していこうと思います。
- FROM
- RUN
- CMD
こちらの3種類について説明していきます。
FROM
ベースとなるimageを決定し、Osを指定することが基本です。(Ubuntu、alpineなど)
Ubuntuの上にレイヤーを積み重ねいくイメージ 例:(touch test)
FROM は Dockerfile の先頭に記載します。
RUN
Linuxのコマンドを実行する際に使用します。
RUNを使用することで好きなようにやりたいことを実行させることができます。
ただし、RUN毎にLayerが作られるのでそちらに関しては注意が必要です。(Docker imageが大きくなってしまうため)
RUNコマンドを使用する時のポイント
-
RUNを1行にする:Docker fileとして見やすくなる。しかし、何度も同じものをinstallすることになるので手間がかかる。 -
RUNを複数行にする:cacheを利用するので手間(同じもののインストール)が省かれる。しかしRUNすることによりLayerが作成される。
結論:Docker fileをメンテナンス中は効率よく手間を省く。最後に一行にしてDocker fileとして見やすくすることが大事である。
CMD
CMD(コマンドの略)はコンテナのデフォルトのコマンドを指定します。
原則としてDocker fileの最後に記述します。
RUN vs CMD
RUNとCMDの違いについて
- RUN:Layerを作る
- CMD:作らない
シンプルに考えて見て、そのコマンドはLayerを作って手間を省くべきかを考える。
CMD apt-get update && apt-get install -y \
curl\
nginx
これだと、Layerには保存されていないので、runされたタイミングで実行される。runするたびにupdateとinstallされたらたまったもんじゃないよね(笑)
なのでRUNすべきだ!今すぐ!
理解を深めたいと思ったコマンドについて
主要なinstuructionはアウトプットしましたが
これも必要だなと感じたものについても自分のためにアウトプットしていきます。
- docker fileという名前のファイルがビルドコンテキストに入っていない場合
docker build -f `<dockerfilename>` `<build context>`
理解するために必要なポイントを3点挙げます。
- dockerfileは何を使っているのか
- build contextはどこなのか
- linuxコマンドの基礎知識(
..:親ディレクトリ./file:カレントディレクトリのfilemv: ファイルやディレクトリの移動、名前の変更等)
以上、凡事徹底すべきであり基礎を大事にしていこうと感じました。
感想
udemy等を視聴して気づいたのですがやはり人より理解することが苦手です。
そのため人の3倍はやらないといけないんだなと気づけました。
プログラミングに精進します。