(初心者用)Dockerイメージの最下層はどうなっているのか?
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については参考になる記事を載せておきます。
まとめ
というわけで、やはり最下層のレイヤはLinuxでしたね!!
という、そりゃ考えればそうだろという結論で締めたいと思います。
では、皆様も良いコーディングライフをお送りください!!
Discussion