GMOアドマーケティングSSP開発グループのn.yです。
前提
以前コチラの過去記事にてDockerによるローカル環境構築に関する記事を書かせて頂きましたが、今回もDockerの環境構築とりわけAlpine LinuxとLinuxKitを巡る事情に関してお話できればと思います。
まずAlpine Linuxに関して軽くおさらい
- 軽量なLinux OS(ベースイメージは約5MB(ちなみにUbuntuだと100MB以上))
→ 他に同様の軽量なLinux OSで代表的なものにCoreOS, RancherOS, Red Hat’s Atomic Host など色々。
- DockerのオフィシャルのイメージをUbuntuからAlpine Linuxに置き換えている
ぐらいを押さえておくと良いです。要は軽量でDocker推しのLinux OSだということです。
その後、Alpine Linuxはどうなったのか?
早速、主要言語実行環境&Webサーバに関して、オフィシャルのイメージがAlpine Linuxへどれだけ置き換えられているのかをDocker Hubにて調べてみました(2017/08/21時点)
※latestタグに関してのみ調査(docker pullコマンドでlatestタグはデフォルトで使用される為、Docker側が本当に現状で推奨しているかの判断の基準にしてみました)
詳細はコチラのDockerの公式ドキュメントを参照
それでは行ってみましょう!
まずはPythonから。
latestはこの並びにある様ですね。
1 |
3.6.2-jessie, 3.6-jessie, 3-jessie, jessie, 3.6.2, 3.6, 3, latest |
んん。。?jessieの並びにありますね。これはもしやDebianをベースにしているのでは?
試しにDebianのバージョンを下記コマンドで調べてみます。(コンテナが既に立ち上がっている状態)
1 2 |
cat /etc/debian_version 8.9 |
Debianベースなのは間違いないですね。多分無いとは思いますが、下記コマンドにてAlpineベースなのかをチェック。
1 2 3 |
cat /etc/alpine-release cat: /etc/alpine-release: No such file or directory which apk |
残念ながらどれもダメですね。と言うことはつまりデフォルトではPythonの実行環境は現状Debianベースということですね。
ちなみにDockerfileの中身も確認してみます。
1 |
FROM buildpack-deps:jessie |
やはりDebianベースですね。
少し嫌な予感がしますね。幸先が悪い予感が。。
では続けて、他の主要言語の実行環境も調べてみましょう。
- Ruby やはりlatestタグはjessieの並びからのDockerfileもやはりDebianベース
- PHP これまた同様にDebianベース
- Apache(httpd) こちらも同様にDebianベース
最後にこちらも
- Nginx やはりDebianベース
調査結果
今回調査したものは全てDebianベースとなっていました。
つまり現状ではDebianベースがまだデフォルトだけど、Alpineベースもあるよって感じのスタンスみたいです。
続いてLinuxKitについて
そういった状況の中今年4月にアメリカはテキサスで開催されましたDockercon 2017にてLinuxKitなるものが発表されました。
内容を見てみると、コンテナを動かせるようにすることに特化したツールらしくWindowsだったりmac OSなどのネイティブではLinux環境を持たないところでもコンテナの実行環境を構築することが可能になり、例によって軽量で約35MBとのことです。
これはかなり画期的なことで、Linux環境を雑に言えばどこにでも構築できる様になったことを意味します。
そしてこのプロジェクトにDocker社を始め、Intel社やARM社だったり各クラウドプロバイダーも共同で参加しているとのことです。
まとめ
ただし注意して欲しい点としてはAlpine LinuxとLinuxKitは似て非なるものです。
Alpine Linuxはあくまでも軽量なLinux OSであり、LinuxKitはコンテナプラットフォームを構築することに特化したツールだからです。
この点に気をつけて頂ければと思います。
LinuxKitを使って環境構築してみたい方は下記のGitHubのページのREADMEを是非ご参考下さい。
https://github.com/linuxkit/linuxkit
以上、Alpine Linuxのその後、そしてLinuxKitの位置づけについてのお話でした。