0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker基礎 Dockerfileについて

Last updated at Posted at 2021-10-17

Docker初心者がDockerfileについて勉強した時のメモです。

Dockerfileとは?

  • Docker imageの設計図 DockerfileからDocker imageを作る。
  • Dockerfileという名のテキストファイル。
  • INSTRACTION argument 形式で記載する。
  • DockerfileはDockerfileという名前で必ず作る。

Dockerfileのinstruction

FROM

  • ベースとなるイメージを決定する。
  • DokerfileはFROMから書き始める。
  • FROMの上にLayerが積み重なっていくイメージ。
  • 指定するのは基本OSを指定することが多い。
Dockerfile
FROM ubuntu:latest

RUN

  • Linux コマンドを実行してくれる。
  • RUNを使うことで好きなようにカスタマイズできる。
  • RUN毎にLayerができる。
Dockerfile
FROM ubuntu:latest
RUN touch test
RUN echo 'hello world' > test

Layerを最小限にするために

  • DockerfileではRUN毎にimage Layerが作成されるので、RUNを連発するとdocker imageのサイズが大きくなってしまう。
  • 解決策は、&&で繋げて1行にまとめる。バックスラッシュ( \ )で改行すると見やすくなる。
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install\
  xxx\
  yyy\

apt-get update : 新しいパッケージを取得。
apt-get install <package> : をインストール。

cache

  • RUNで一度インスールしたパッケージは、インストール後まとめておくことで後から他のパッケージをRUNで追加した時キャッシュを使ってくれる。
  • キャッシュを使うことで再度実行することなく追加したパッケージ分だけRUNを実行してくれる。

この場合、新しくzzzというパッケージを新しく追加。
-y はインストール時インタラクティブな質問に対して全てyesで実行してくれる。

Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \  
		xxx\
		yyy\
RUN apt-get install -y zzz

インストール後1行にまとめることで次回からキャッシュを使ってくれる。

Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
  xxx\
  yyy\
  zzz

CMD

  • CMDはコンテナのデフォルトのコマンド。
  • 原則Dockerfileの最後に記述。
CMD ["実行可能なコマンド", "コマンドの引数1", "コマンドの引数2"]
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
  xxx\
  yyy\
  zzz

CMD ["/bin/bash"]

RUNとCMDの違いは?

  • RUNはimage Layerを作るがCMDは作らない

Dockerfileをbuildする

DockerfileをbildしてDocker imageを作る。

$ docker bulid <directory>

buildするにはそのファイルまで移動してからbuildするのが一般的。
現在いる場所(current directory)の場合は.

$ docker bulid .

buildしたimageはdangling image(noneで表示されるタグのついていないimage)なので名前をつけることができる。

$ docker build -t <name> <directory>

Dockerfile詳細

$ docker buildの挙動

build時に指定したbuild contextをDocker demonに渡している。

Docker demon

  • コンテナやdocker imegeなどDockerオブジェクトと呼ばれるものを管理もの。
  • クライアントはCLIツールを使ってDocker demonにコマンドを投げそれを解釈しDocker demonがイメージのビルドやコンテナの起動などを行っている。

build context

  • Dokerfileが入ったフォルダのこと。
  • Docker imageをbuildする時、build contextをDocker demonに渡し、build contextの内のDockerfileと他のファイルを使ってDocker imageを作成する。
  • 基本buildに使わないファイルはbuild contextに入れない。

続き

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?