Dockerイメージのタグを見ただけでどんなイメージがわかるようになる話
「この番組はエンジニアの成長は楽しい学びからをモットーに」
「日々学んだことをワイワイとアウトプットするラジオでございますはいいいですねなんか補完関係みたいな危なかった今なんかずっと過去のやつが今出てきて駆け出しエンジニアを中級エンジニアにがずっと出てきてずっと出てきましたずっとねずっとずっと出てきたさて本日はですね具体的な学びを得る回でございます入れたい」
「やっぱね千里のスケスケも一歩からって言うじゃないですか千里のスケスケそんな感じで言うんでしたっけ使ってる技術の背景が透けて見えることによって我々は思ったよりもすごいパワーで道具を扱うことができるようになるというあの現象もうやっぱり一個ずつクリアにしてってこそって感じじゃないですか中でも僕の中で不透明具合ランキング1位がドッカーだったんですけど今回ドッカーを」
「使ってる時にきっと誰もが思ってるであろうあの悩みに切り込んでいこうかなと思いますどの悩みだ思ってるのかなそれはですねDockerファイル構築しますよってなった時に1行目何書きますかあのなんかDockerファイルの話ですかはいベースとなるモデルみたいなやつ書きますよねそうですよねデジタルにモデルというかイメージイメージDockerイメージはい」
「いや出てきてないですね僕は出てきてないですかであれをあの1行目を書くときですよなんかさ例えばじゃあノードのコンテナ作るよってなったときにさタグどれにしようかなみたいなノードコロンレイテストハイフンブルーズアイハイフンなんとなくあんたらみたいなスリムとかあれ何っていうのが僕ずっとなんとなくでやってたんですよいやまあ言うて全部ノードでしょみたいな」
「全部バイトンでしょみたいなそういう勢いでやってたんですけどいざ本番のプロダクトを運用するってなった時にさイメージの構築のところがうまくいってなくてAIが出してきた提案がその」
「ベースイメージを変更することだった時にこれを変更して一体何が変えられているんだろうってなって改めて調べてみましたっていういいですね今回はどっかイメージのタグを見た時にそのタグ名だけで一体どんなものをあなたは提供してるんだいっていうのが分かるようになる回でございます割とふわっとはしてますね」
「ふわっとしてる?うん。まあなんかなんとなくは分かってる気にはなってるけどそんなにねなんか都度調べてやってるぐらいのやつですね。ちょっと試しにさ1個あのー今じゃあじゅんぺいがパイソンなんではい。パイソンの1行目のやつ?いや適当なイメージをちょっと今開こうかなっていう。はいはい。まああの1行目のフロムって多分初期設定だとDockerHubから」

「イメージ持ってこられると思うんで今ちょっとDockerHubを開いてPythonのオフィシャルイメージのタグを見てるんですけど例えば今一番上に来てるやつだと3.14.0RC3-SLIM-TRIXYってなってますとじゃあじゅんぺくんこのイメージから一体あなたは何を受け取りますか名前から3.14のSLIMなんで結構シュッとした感じの」
「3.1のシュッとしたPythonくんのトリッキーなイメージを持ってきたトリッキーなイメージ絶対使いたくないじゃん本番環境トリッキーなやつにしておきましたマジかこのライブラリインストールしたはずなのに動きが違うそうなんですこれトリッキーなイメージなんだよってどんなやつ違うっていうのをなくすかいでございますということでDockerイメージについて」
「そうだな本当に根本のとこから話していこうかなまずお願いしますまずDockerのイメージなんですけどだいたい例えばPythonを動かしたいなってなったらPythonのイメージがいっぱいあってそれに対してコロンで区切ってタグが書かれてるみたいな構成になってますと基本的にDockerイメージっていうのはDockerデスクトップをデフォルトで使ってる場合はDockerHubっていうイメージのリポジトリから」
「ダウンロードされてきますよねとこれは一旦一番前提の部分にあるとしてですよタグが多すぎるんですよタグ多いですねどんな風にまず選んでいけばいいのっていう大枠のところなんですけどこれはね3つあるかなと思ってますポイントが1つ目は用途に応じて最小限のイメージを選ぶうん」
「だいたいDockerイメージ自体そもそも単一目的にあったようなイメージが多いような気はするけどまずは例えばウェブサーバー作りたいならEngineXとかApacheとかのイメージを選ぶでしょうしPHP動かしたいならPHPとかPython動かしたいならPythonとかNode.js動かしたいならNodeとかそういう感じでまず目的に合わせたイメージを選びますと続いてこれはタグの部分なんですけど」
「レイテストを使わないタグにはバージョン書かれてるやつもあればレイテストって書かれてるやつもあればLTSとかもあるかなっていうのがあるんですけど基本的に具体的なバージョンを指定してレイテストとかステイブルとかそういう曖昧なやつは使わないと」
「いうのが結構大事ですこれは挙動ではどういう影響があるんですかこれはですねレイテストだと例えばじゃあじゅんぺいくんチームにジョイン1年前にしてましたとその時にどっかコンテナを立ち上げてそのまま使ってますとでなった時にもしかしたらじゅんぺのバージョンはPython3.11がその時レイテストだったかもしれないけどしんじんくん」
「今日入ってきた新人くんが立ち上げたら3.13になってるかもしれないみたいな確かにっていうことが起きるので基本的には動作を安定させるために具体的なバージョンを指定した方があっちでは動いたのにっていう問題がなくなるあと知らず知らずのうちに商用環境の動作言語変わったりしますからね確かにというので勝手にバージョン変わっちゃうんであんまりそういう単語は使わないようにしましょうとそしてその3イメージの信頼性を意識する」

「これどういうことかというとですね例えばDockerHubでPythonって調べますとそうすると実はいっぱい出てくるんですよPythonのイメージが例えば普通にPythonってやつとかサークルCIスラッシュPythonとかどっかのベンダーが出してそうなやつとかなるほどそういうのでPythonって一口に言ってもいろんなのがありますよとどこが出してるかをちゃんと見ましょうっていう話ですね大きく分けて4種類ございます1つはDockerオフィシャルイメージ」
「一応4つ挙げるとDockerオフィシャルイメージVerifiedPublisherSponsoredOSSその他に分かれてます今挙げた順で安全でDockerオフィシャルイメージっていうのが一番信頼性高いと言われてますねなので目的のイメージがDockerオフィシャルイメージあるのであれば基本的にそれ使うのが間違いないこれなんで安全かっていうともちろんDockerがなんかあのー」
「委託してるのかななんかそういうチェックしてくれるところがちゃんとチェックしてるし定期的にセキュリティのスキャンもされてるしあとやっぱね変な人が作ってないっていう安心感あるよねっていうのでDockerオフィシャルイメージが一番信頼できますと続いてVerifiedPublisherこれはさっきPythonで言うとCircleCIもPython出してますよみたいなの言ったと思うんですけどこれは実はVerifiedPublisherのやつなんですよ」
「これは単純に公式ではないんだけど公式がお前らはOKって反抗したところが出してるやつだねじゃあDockerが反抗したってことですかまあそういうことDockerに認められし選ばれしパブリッシャーってことですもちろんそういうチェックあるんで下手なところは通れないんでこれもまた信頼できますよと」
「一応品質とかセキュリティとか信頼性の基準があってそれをクリアしている必要があるっぽいですね3つ目のスポンサードOSSこれは結構活発で有名なコミュニティがあることが保証されているOSSみたいな感じですねなので」
「これも結構たくさんの人が関わってるから100%安全とは言えないんでしょうけどとはいえその有名なやつに謎の行動を紛れ込ませるっていうのは至難の技だと思うんでこれも割と安全と言われているとで4つ目その他なんですけどこれ完全に野良イメージですねこれを使う場合はちゃんとチェックした方がいいなるほど」
「例えば過去にこういうイメージを使ってどんなのがあったかって話なんですけど一番よくあるのはビットコインのマイニングに使われちゃうとかっていうのがあり得るもうそのコンテナの中に隙あらばマイニングするプログラムみたいなのがねじ込まれててそれを使ってサーバー建てたけどそのサーバーのリソース空いてる時間にセコセコとマイニングしてるみたいなCPUリソース食って無駄に料金かかったりとか」
「っていうことが起きえたりとかマジ賢いですよねそんな悪いことのやり方があるんだって思う確かにこれセキュリティ会社が調査して信頼されてないやつとか見たら結構丸いっぱいあるなみたいな報告が3年前くらいにちょっと話題になってたんだ気がするあと普通にバックドア作られることもありますねなんでそのイメージ使ってるとこだったらそもそもSSH接続でサーバー入れちゃうみたいなことが起きる」

「こわロリさんすらパイソンみたいなイメージあったら気をつけた方がいいマジで気をつけた方がいいとんでもないの仕掛けてる仕掛けてるんですかうんまああとなんかあんまり信頼されてないのだとアップデート追随してくんなくなることがうんありえますからねうんうんうん確かにうん更新頻度めっちゃ低いやつとか結構ザラにありますよねうんうんなるほど脆弱性ってめっちゃ出るんでうんうんうん」
「セキュリティパッチ当たらないとかもあり得るのでこのイメージの信頼性っていうのをちゃんと意識してイメージ選びましょうと出してるところと更新品のそういうこと続いてイメージのタグ名ですねさっきのレイテスト使わないっていうところだけ言ったんですけどまずタグ名めっちゃずっと分かりにくいなって思ってたんですよ」
「ブルーズアイってなんやねんみたいなアルパインってなんやねんみたいなかっこいいんだよ無駄にかっこいいんだけどかっこいいだけそうかなだった俺の目にはそう見えていた意味とかないですよね普通に名前ついてるだけですよね意味あります単語なんだろう」
「スーパーイメージっていう単語に意味があるわけじゃなくてそういう名前ってだけですよねアルパインとかって意味あるのかな意味あるのとないのがあるこれもちょっと見分けていくためにですねまず普通にバージョンはめっちゃ分かりやすいじゃないですか3.14とか3.14厄介だな練習率みたいでやだな3.11とか3.11自信みたいでやだなまあまあ」
「まあ今パイソンの見てると3.11.13スリムトリクシーとかがありますけどバージョン部分はわかりやすいと続いてこういうイメージって基本的にベースのOSがあってその上でアプリケーションというかミドルウェアに近いのかすいませんちょっと戻っていいですかバージョンのところなんですけど」
「パイソンのイメージあるか分かんないんですけどある気がしてるのが3.11.4って言いましたっけ3.14.0とか3.14とか3とかもあるそうですよねそうなんですよ小数点第1マイナーバージョンまでのやつとパッチバージョン全部あるやつとメジャーバージョンだけのやつがあるんですよそこも違くて」
「指定されているところまでは固めてくれるけどそれより下はもう勝手に随時更新するよっていう感じのものだったりしますねなんでガチガチに指定しないまでもマイナーバージョンまで固めておけば広報互換性あるしいいよねみたいな全部と広報の互換性あるから勝手にセキュリティパッチ当ててくれるなら」
「パッチバージョンは指定しなくていいよねみたいなのはあり確かになるほどあんまりメジャーバージョンだけ固めるっていう勇ましいのは見たことないかもしれないそうですね安全なのは全部固めるので割と全部固めてるのしか見たことないじゃないけどパッチバージョンくらいはいいんじゃねって気持ちにはなったりしますよね確かにすいませんちょっとバージョンの話ありがとうございます次いきましょうはい」

「実際こういうアプリケーションってOSがあってその上でPythonとかその上でノードとかが動いてるわけじゃないですかなんで実はこのタグ名から何のOSが動いてるかっていうのが分かるんですよだいたいDebianDebian系のLinuxが動いてますとさっき出てきたBullseyeとかTrixieとかこれは実はDebianのバージョン名ですね」
「そうなんだMacとかもさちょっと古いですけどパイシエラとかエルキャピタンとかモントレーとかあるじゃないですかあのノリですね基本デビアンのバージョンはブルズアイが11ブックワームが12トリクシーが13フォーキーが14っていう感じで各バージョンに名前が付いてるみたいな僕正直知らなかったな」
「僕も知らなかったですバスターとかもよく見てたけどそれもそのバージョンらしいへーそこの名前の部分からデビュアンのバージョン名が分かりますとでそれ以外でも使われてる英単語があってですねイメージのサイズを表してるもの結構ドッカーのイメージ作るってなった時によく出てくるのがアルパインっていう名前が入ってるやつでこれはアルパインっていうリナックスのディストリビューションかなのものを使ってるんですけど」
「このアルパインが超絶軽量イメージなんですよ無駄をすり無駄を全部そぎ落として余計なものを全部そぎ落としたOSとにかくコマンド入ってないイメージそうとにかくコマンド入ってないし互換性もたまにない時がある他のLinuxってえーとね」
「裏側でCのライブラリ使ってるみたいな前提があるんですけどそのライブラリが実は違うのを使っててそこの互換性合わなくてPythonとかノードがうまく動かないっていうケースがあるらしいそうなんだっていう特殊なOS使ってるのがアルパインですとこいつはイメージめっちゃ軽くてDebianだと」
「100メガぐらいになるところが5メガとかで終わるっていうアルパイン軽いっすよねかつ入ってる量も少ないんでセキュリティ強いっす物が少なければ少ないほどセキュリティは強いんですよ攻撃面が少なくなるんでっていうのでセキュリティ的にもパフォーマンス的にもすごい軽さ的にもすごくいいよっていうのがアルパインただこれを使うととにかくあらゆる物が入ってないから」
「いざコンテナ入ってデバッグしてっていう時に面倒いし互換性がないケースもあり得るっていうのがアルパインですとアルパインよく使ってるんですけどアルパインめっちゃいいのが何入れたか自分でコントロールできるじゃないですか何々で脆弱性出ましたっていうニュースが飛んだ時にうちのシステムに関係あるかどうかなっていうのって管理しなきゃいけなくてアルパインだと自分で入れてるんで」
「何入れたかのリストが持っておきやすいそうじゃないもともといろいろ入ってるやつだと何入ってるかよく分かんないんでっていうのでアルパイン良かったりもするしあとはどっかイメージビルドしてアルパインベースでビルドしてアプリケーションで動かすときにビルドしたイメージも軽いんでいざデプロイするときも軽いからデプロイのスピード上がるんですよねっていうのでそういうメリットもあったりしますね」

「これがアルパインですちなみにアルパインはアルプスの山のイメージらしいですあれ高くてシュッとしてるらしくてそのシュッとしてる感みたいなのから撮ってるってAIが言ってました違った時はAIのせいですそうなんだアルプスちょっと見たことないですけどシュッとしてるイメージないけどなパインってなんすかね」
「アルプスのなんかそういう日本だとアルプスって言うけどどっかでアルパインって言うんじゃないですかそういうことか海外発音だとアルパインアルピニストとか言うよねだってへーそうそうそうですねありがとうございますでもう一個ねサイズに関係するキーワードスリムうんこれじゃねバランス型っすあバランス型なんですねスリムって言ってるくせにスリムはね結構バランス型どれくらいバランス型だろうな」
「ベイブレードでいうとウルボーグぐらいバランスがあいつ時給型だね時給型ですよ何言ってんすか時給型ですよあいつほど時給型の米語もないですよ確かにあいつ時給型だったもうちょっと分かるやつほしいもうちょっと分かるやつほしいはい」
「共通認識のやつダンガンダンって言うと何ね1個も出てこないダンガンダンって何知らないダンダダンじゃなくてダンダダンじゃないダンガンダンダンガンダンってなかったっけポケモンポケモン細長いミニカーみたいなミニ四駆みたいなやつあれダンガンダンって言うんだありましたね細長いミニ四駆僕通ってないんだよなダンダダンしか出てこないからちょっと検証不能です多分違うな出てこないとこでは多分違うんですけど」
「とりあえずすごいってことだよバランスがいいってことですねこいつは何かっていうとデビアンからアプリケーションの動作に不要なライブラリを削ってシュートさせたやつですうんうん」
「だからビムとか入ってないんだろうね動作には関係ないよねみたいなやつがすごく落とされてるけどDebianだからデバッグはインストールも簡単だしDebianで動くやったら基本動く互換性がつまりあるというところは非常にバランスがいいとこれじゃあビルドすると20から100メガぐらいになるらしいですねサイズによるこれがイメージサイズの部分でございますこれを知るとですねもうねあら不思議ですよ」
「適当にタグ見てもねなんとなくイメージつくはずなるほどマジでデビアンのバージョンだけが厄介ってくらいまあでもどうせデビアンのバージョンしようって思っとけばいいからまあまあ確かにどれがどれかよく分からないですけどまあ確かに最初ので言うとあれトリクシーがデビアンのバージョンそうはいはいでスリムだったからバランス型で3.14のバージョンでうんでやつだったってことですねそう例えば」
「しゅんぺいくんはいこれはちょっとでも不意打ちではあるけどはいいきますよいくよ3.14-RC-アルパイン3.21バージョン2回出てきたなRCRCかRCは残念ながら予習してないんであれですね大きいポイントになってますはい」

「今回はPython関係ないみたいな今回ねPythonの今タグ名でした1個目はまあPythonの3.14のバージョンだとしてRCは鉄筋コンクリートみたいな多分なるほどね確かにね3.12は3.12の後なんて言いましたっけえっとねアルパイン3.21アルパイン3.21じゃあアルパインがの3.21うん」
「はいファイナルアンサーでそういうことですアルパインに対してはどういう印象を持ってもいいですかアルパインに対してはこれもさっきなかったですよねアルパインじゃあ高くてシュッとしてる感じやべえ出てきて欲しくないところが出てきてバランスリームがバランス型だったんですよねアルパインは高くてシュッとしてるんで無駄なものを削ぎ落としてるけど」
「基板強いよみたいななんでしたっけやばいなんでしたっけアルパインは超絶軽量モデルですねあガリガリだと思った方がいいかも5メガのやつですね5メガのやつ5メガで覚えたんだ恥ずかしいこれ超話してたなそれ恥ずかしいそうだから今のところ5メガのアルパインが鉄筋コンクリート作りで作られててパイソンはその上に3.14バージョンが載ってるとあーでもイメージできたかもしれないまあほぼ正解ですねはいはいうん」
「RCぐらいこれはリリースキャンディデートですねキャンディデートって何か候補限りなくリリースバージョンに近い状態になってるけどまだ確定じゃないよっていう感じアルファ版ベータ版があってガンマ版みたいなそんなのないんですけど並べるとねアルファベータリリースキャンディデートと」
「本番列号パターンみたいなこんな感じ本番列号うん」
「本番レッツゴーはリリースされてない気がする直前みたいなねっていう感じですねイメージごとにタグの付け方結構個性あったりしてゴーとかだと日付のバージョンになってたりとかいろいろあったりするんですけどノードは読めるんじゃないかなと思う今の命名規則はDockerHubの公式のイメージの命名規則ですかそれともDockerHub全体的にそうなんですかねほんとね」
「決まったのはないと思うけどパッと見だいたい同じ感じになってる僕もそんなイメージではある逆に言うとこの命名してないやつは警戒しようがいいかもしれないですねこの命名がちゃんとしてるからといってちゃんとしてるとは限らないですけどノードも読めるんじゃないかなノードの一個タグLTS-Trixie-Slim」
「LTSはでもあんまおすすめじゃないロングタイムサポートのハイフンスリーブでしたっけハイフントリクシーハイフンスリーブトリクシーはOSのバージョンスリーブバランス型バランス型で覚えるのあんま良くないよ余計なライブラリ削ってるやつでも実はアルパインのがもっと激ガリガリなんだけど」

「スリムも通常のデビアンよりはスリムという感じなのでざっと見だいたいどれもそんな感じで読めるはずなのでこれからはタグ名見てきっと裏側でこういうのが作られてるんだなっていうのに思いを馳せながらそのスケスケ感をスケ感?スケ感を楽しんでいただけたらなと思いますファッションみたいなねシースルーみたいなっていう」
「ドッカーイメージの名前の話でしたすごい透けたちょっとここからあれなんですけどどう使い分けるんですかねアルパインとかデビアンとかってアプリでビルドするときはデビアン系使ってビルドしたアプリはアルパインに乗せてリリースするみたいな感じなんですかねそれなら最初から」
「アルパイン使っちゃいたいななんかイメージの中でビルドした後にテスト回したりとかしてただテストライブラリは本番にはいらないんで削ってみたいなことをやってます確かテストだったかなどうだろうな脳死でスリム使っちゃいそうだなそういう時本番だーご感性の問題で落ちられてもなーって気するから」
「それも使っちゃいたくなるなそういうことですねあとその例えばECRとかにどっかイメージ貯めていくじゃないですか多分そのイメージ一個一個の容量がでかいとお金に直結してくる気がするんでそういうのも気にする必要はあるのかなとは思いますなるほどねビルド後のサイズそうそうそういっぱいビルドするでしょうしね開発スタイルにもよりますけどうんうん」
「雑談でした締めもう言い残したことは何もないですありがとうございますフォーカスしたテーマでめっちゃいいですねフォーカスしたのはドッカーの中のドッカーハブの中のバージョンタグの命名みたいな素晴らしいどうですかネタがこれくらいニッチしないとない感じいやまあまあまあ」
「400近くやってるとねいいんじゃないですかありがとうございます締め方は回していこうというところでノリさんお願いしますこの番組はひまじんプログラマーでした簡単すぎるわ持ってるあるでしょうにこの番組では皆さんからの感想を募集しておりますXではハッシュタグひまじんプログラマー」
「をつけて投稿していただければ我々が日々エゴサーチをしてそれを見てニマニマする毎日を過ごしておりますのでよろしくお願いしますお世話になってますそして番組ではお便りを募集しておりますメールもしくはグーグルフォームが概要欄にございますのでそちらから皆様からの熱いメッセージもしくは僕らに聞きたいことじゃんじゃん送ってくださいお願いします」
「さらにスラックコミュニティひまぷろ談話室を運営しておりますこちらはエピソードの概要欄ではなく番組の説明欄に申し込みフォームがございますこちらですねあの招待招待からの間違えたこちら招待がですね手動性となっておりましてたまに忘れてしまうことがあるのであれなんか意外と送ったけど来ないなーっていう方が」

「もう一回連絡くださいお願いします1週間はかかんないようにしようという気持ちだけ持ってますそうですねなのでちょっとリードタイム1週間マックスでかかることがあるのでそこだけちょっとご了承いただけたらなと思いますそろそろ自動化したいですはい」
「最後に各種ポッドキャストプラットフォームで高評価ぜひ作っていただけると我々の配信の糧になりますのでご協力のほどよろしくお願いしますお願いしますお願いしますポッドキャスト業界で幅利かせられるようになりたいですかいちくんはそうらしいです僕は謙虚に謙虚に幅利かせれたらなと思っているのでよろしくお願いしますお願いしますではまた次回バイバイ」
「あなたが落としたのはこの金のサーバーですかそれとも銀のサーバーですかいいえ私が落としたのは普通のウェブサーバーですすみませんあなたは正直者ですね全部のサーバーをあげましょう正直者のエンジニアは不可分散ができるようになりましたそれを見ていた欲張りな男がサーバーを落としましたあなたが落としたのはこの金のサーバーですか」
「ヘイその金のサーバーを落としましたどうやらあなたは嘘つきのようですそう言って女神は帰っていきました欲張りの男は復旧できないサーバーの前でワンワン泣いていましたサーバーを落としたくないあなたへひまじんプログラマーの週末エンジニアリングレッスン」