🛢️

(初心者用)Dockerイメージの最下層はどうなっているのか?

2022/10/27に公開

Dockerを使いたての私がDockerに対する偏見を恥ずかしげもなくさらけ出しつつ、ふと思った疑問を払拭していこうと思います。

疑問点

NodeやPythonなどのDockerイメージの最下層には何があるのだろうか?

なぜこう思ったのか

FROM で呼んできているのはよく見かけるが、実際の中身がどうなっているのかを見たことも聞いたこともない。恐らく最下層にLinuxがあってそこからレイヤを重ねて作られているのだろう。 という想像はあるが、実際にはもっと違う技術が使われているのかもしれない? 実際のところはどうなのだろうか。

調べてみた

Docker hub でNodeのOfficialImageを検索してみる

実際にdocker-hubでNodeのOfficialImageを調べてみる。

このページをよく見てみると、
Supported tags and respective Dockerfile links なる項目があるではありませんか!!

はいはい。分かりましたよ。このリンク先で問題のDockerfileが見られるのですね。
というわけで、適当に新しいやつを一つ選んで中を見ていきましょう。

NodeのDockerfileを見てみる。

気になるところを適当に抜粋すると、

FROM alpine:3.15
RUN apk add いろいろ
CMD [ "node" ]

今回知りたかったのが、最初の一行です!!
alpineですよ。alpine!!!(alpine linux は軽量なLinuxディストリビューションです。)

というわけで、次はalpineのdockerfileを見てみましょう。

(ついでに、
いろいろの部分には色々なパッケージが含まれていましたが、気になることろだと、

  • node
  • npm
  • yarn
  • python3

これくらいですかね。
何かに必要なんでしょうかねPython3。)

alpineのdockerfileを見てみた

さてさて、docker-hubでalpineのOfficialImageを調べてみましょう。
はいはい。
alpineのdockerfileの全文はこれです!!

FROM scratch
ADD alpine-minirootfs-3.16.2-x86_64.tar.gz /
CMD ["/bin/sh"]

みじかっ!!
みじかいな。 ..... ふぅ。
まあ、そんなこともあるでしょう。さて、読み解いていきましょうか。

FROM scratch

まず、初めましての方がおられますね。
調べてみると、
ベースとなるImageはないよー
「ここから新たに作り始めるよー」
と言っているに過ぎないようですね。無くても大丈夫なようです。
少し気になったので、語源を調べてみました。

From scratch は、「ゼロから」「一から」「何もないところから」といった熟語になります。語源は、徒競走のために地面に描くスタートラインを示す線のことを指していたと言われています。

へーー。なんかFROMを使って上手く言ってやった感がありますね。
次に行きましょう。

ADD alpine-minirootfs-3.16.2-x86_64.tar.gz /

ADD によって圧縮ファイルが追加されていますね。
ADD は自動で解凍もしてくれるので、便利?厄介?ですね!!

CMD ["/bin/sh"]

bashを起動しているようですね。
shについては参考になる記事を載せておきます。

https://penpen-dev.com/blog/bin-sh-bin-bash/

まとめ

というわけで、やはり最下層のレイヤはLinuxでしたね!!
という、そりゃ考えればそうだろという結論で締めたいと思います。

では、皆様も良いコーディングライフをお送りください!!

Discussion