Dockerの何が分けわからんか説明しよう☆(^~^)

ぼっぼっぼ☆(^~^) へぺっでれぶっ☆(^~^) 公開下書き

2020-06-19(fri) 17:40

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Dockerの学習コストは とんでもなく高い が、 Microsoft が今頑張って 学習コスト掘削事業をしてるんで 2年後には よっぽど改善しているだろう……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ 2年間 寝てるのが最善手だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Dockerの使い方、なんて記事を書いている時間は 全部 無駄になるわね」

KIFUWARABE_80x100x8_01_Futu.gif
「 でも 書くんだろ☆?」

20200619docker1.png

Docker Desktop for Windows

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Windows 使いは Docker Desktop for Windows を入れるところから始めようぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ところで 先に行っておくが、 Linux 系OS では Docker はすぐ始められるが、
Windows では クソめんどくさいぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そんな話は聞きたくなかったのよ! さっさと始めましょう!」

KIFUWARABE_80x100x8_01_Futu.gif
「 Get Docker ボタンを押せばいいんだろ☆
インストーラーは 391 MB か……、ダウンロードに 1分 ぐらいだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何しろ Docker Desktop for Linux系 とか探せばあるかもしれないが 聞かないしな☆
Linux系 Docker勢からは えっ? 今からいったい何を始めようとしているの? とか思われているぜ☆」

20200619docker2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ はい、出てきた……☆ Hyper-V という 知らない人は知らないし、知ってる人は知っている 謎の単語だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 知らない人が 知ることができる説明でなければ こんな記事 要らないのよ!」

20200619docker3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今どきのPCショップで ハードウェア を買ってくれば、 Windows 10 を選んでいれば、 Windows 10 が入ってると思うが……☆」

20200619docker4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Hiper-V を有効にすると、1つのハードウェアに 複数の Windows が入っている ふり をしてくれるんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何で そんなことを☆?」

20200619docker5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 家が1つで 燃えてしまうと全部燃えるが、
家が3つなら 1つ燃えても 残りの2つは助かるだろ☆ これを isolation(アイッソレイション;隔離)という☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ただ、もっと単純なメリットとしては……☆」

20200619docker6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 5人で使ってるPC、1台にOS複数個詰め込めれば 案外 2台で済むんじゃないの☆?
という お金の面をウリにして 普及している面がある☆
大きな顧客を巻き込んだビジネスに育てれば 普及に つながるんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これは 容量だけでなく、CPU が空いてる、とか そういうのも含めているぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 1人で PC いじっている分には ほとんど メリットもない……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 PC 再起動すんわよ!」

20200619docker7.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ Docker をインストールでけたぜ☆」

20200619docker8.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker も考え方は Hyper-V と似てるんだが、全然違う☆
それは 触って進めていかなければ 退屈だろう☆」

20200619docker9.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Start ボタンを押したら出てきたこの画面は何なの? リポジトリ―をクローンする って何なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そこだよな☆ 言ってしまえば リポジトリ―というのは クローンして使うものなんだが 例を見せてみよう☆」

20200619docker10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 場所が つながれて ネットワークとなっている この時代、
たまに つながりが切れてるときもあるんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そんなとき 今日 1日作業できません、というのでは
コンピューターを使った作業も 仕事にならないわけだぜ☆」

20200619docker11a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ だったら ネットがつながっている間に 作業に必要なものは 自分とこにダウンロードしておいてしまえ、
というのを リポジトリ―のクローン と呼んでいる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 で、 リポジトリ― って何なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 置き場所、ぐらいの意味しかない☆
言ってしまえば 電気信号で流れてくるものは2進数なんで……☆ それが何かを尋ねるのは愚か☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さっきの画面には GitHub レポジトリ―と書いていたから、
GitHub の一部を ちょこっと かいつまんで クローンする、ぐらいの把握でいい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ、 GitHubの一部をクローン って言えばいいじゃないの!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 リポジトリ―というのは、 パターンについた名前 なんだぜ☆ 物の名前ではない☆
作戦名ぐらいに考えろだぜ☆ リポジトリ―☆ 何のことか分かっただろ☆ 地域の隔絶が起こることに備えてクローンを用意しておく作戦名だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 リポジトリ―作戦☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、今の時代、リポジトリ―をクローンするのは 選択ではなく 必須だぜ☆
通信の性能とか、マシンの性能とか 無尽蔵ではないんで☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Git って何なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 話しが超長くなるんで 先に進もうぜ☆」

20200619docker12.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんか いっぱい ダウンロードしたな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どこへ ?」

20200619docker13a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 右側のターミナルを 上にスクロールしてみると、 git を使って https://github.com/docker/getting-started.git という場所から、
わたしのコンピューターの getting-started というディレクトリの中に中身を放り込んだようだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 getting-started は どこにあんの?」

20200619docker14.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ユーザー・フォルダーの真下だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで そんなとこに 勝手に入れんの? わたし、許諾してないんだけど!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2020年現在、ユーザー・フォルダーの真下に 勝手にダウンロードされるのは 慣例的なようだぜ☆
機械学習の練習とかしてたら ゴミだらけになるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何に使ったのか 記憶から消えてしまったフォルダーとか あるよな☆
消していいやつなのか どうかが 分からない……☆」

20200619docker15.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ イメージをビルドする って何なの!?」

20200619docker16.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まるで コンピューターの中身をカメラで撮って 画像 (イメージ;image)にした、みたいな話のことを言っていて、
ただし、カメラで撮るのではなく ビルド しよう、と言ってるんだぜ☆」

20200619docker17.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ getting-started リポジトリの中に入ってる docker-compose.ymlDockerfile がビルドの正体で、
料理のレシピのようなものだぜ☆ イメージを作るために 必要な素材と 組み立ての手順が書いてある☆ だから ビルド ☆」

20200619docker18.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 右のターミナルで Step 16/21Step 17/21Step 18/21 とか出てるやつが Dockerfile を使ったビルドだぜ☆
この Dockerfile を書くという作業は 初見では無理ゲー☆ インターネットで ベスト・プラクティスを探し回らなければ 長い時間を 書き直しに費やすぜ☆」

20200619docker19.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ このイメージが出来てしまえば、他のハードウェアでも そこに Docker Engine があれば、このイメージが動くというわけだぜ☆
このイメージは 作ってしまえば 変更できない 固い感じのやつだと 思ってくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どこに作ったの?」

20200619docker20a1c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここかなあ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 その Docker Engine というのは いつ 出てきたの!?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker Desktop for Windows をインストールしたときだぜ☆」

20200619docker21.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ Docker Container を走らせようぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ドッカ―・コンテナ って何なの!!」

20200619docker22c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 子どもOS用の ドッカ― みたいなもんかだぜ☆
ドッカ―・コンテナの上では OS はもう Windows 10 じゃなくても良くなったぜ☆ Alpine Linux や、 Ubuntu でも OK☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何で そんなことが できるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Linux 系OS はだいたい オープンソース、フリーソフトウェア なんで、 Microsoft が Linux を Windows の上で動かすのは勝手だし、
あとは Microsoft が無料で自由な Windows を配布すれば あとは Linux側が対応するだけだよな☆ 配布しないだろうけど☆」

20200619docker23.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker Container が走っている間は、ブラウザで http://localhost:80/ にアクセスすると 上図右のように
チュートリアルの Webサイト が見れるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで?」

20200619docker24c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ホストOSの Windows 10 が ポート80番 を開けていて、
ゲストOSの Alpine Linux もポート80番 を開けていて、
ホストOSの ポート80番を ゲストOSのポート80番に紐づけることは Docker がやってくれるんだが、それが -p 80:80 オプションだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Alpine Linux の中の Webサーバーは なんで勝手に動き出したの?
いつ キッティングして 誰が サーバーを実行したの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 キッティングが終わった状態を Docker イメージ にするんだぜ☆
わたしが知らない OS、 わたしの知らない Python のパッケージ を使われていたんで どうやって getting-started の Webアプリケーションが
実行される流れになっているのか そのコードは分からなかったが、
Docker を Run するタイミングで 実行のための全ステップを終わらせているのは 確かだろうなんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 確かに だろう を付けたら 確かじゃないだろ☆!」

20200619docker25.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そして最後に お前の作った Docker image を インターネットの Webサイト にアップロードして 共有しないか、とか聞いてくるが
会社でやったら 大惨事 の始まりだろ☆ 個人なら やってみようぜ☆」

20200619docker26.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Hub というのは だいたい データ共有サーバーのことだぜ☆」

20200619docker27.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ アカウントを作ってみようぜ☆?」

20200619docker28.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんか チュートリアルを落とさないか 尋ねてるな☆ ダウンロードしとくかだぜ☆」

20200619docker29.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ さっき 使ったところだぜ☆ 要らね☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここまでが、 Docker engine のインストールだぜ☆
ここから先の Docker の使い方を 公式のエグザンプルを元に覚えていくのは 非効率だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ここまで サクサク進んだのに……☆」

20200619docker30.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 おや☆? チュートリアルには まだ続きがあるみたいだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで お父んが チュートリアルの続きを 知ってないのか……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Dockerコンテナで起動したWebサイトを、ブラウザで開くボタンだぜ☆」

20200619docker31.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、 Docker Desktop for Windows のダッシュボードがこれだぜ☆
知ってる人には シンプルで何をするか すぐ分かる画面だし、
知らない人には なんのコミュニケーションも取れない 分けわからん 画面だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ Docker を知ってから 使えばいいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 どうやって知るんだぜ☆?」

www.docker.com

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 公式ページの Document を見たらいいんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker hub を もっと見たいですか、 Docker Desktop を もっと見たいですか、 見積りますか始めますか? の4択だろ☆
わたしは ドッカ―・ハブ が何かも、 ドッカ―・デスクトップ が何かも 知らないんだぜ☆
言ってしまえば ドッカ― を知らない人間が この公式ページで 何をすればいいと言うのだろう☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker の方から見ても 何しに来たんだこいつ だよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 懐の深いWebサイトのように見えて 出口は Docker hubDocker Desktop for Windows の2つしかないんだぜ☆
あんな人を惑わす デザインにして 何を主張してるんだろな☆? Docker hub に登録して Docker Desktop for Windows をダウンロードする1本の
流れにすればいいじゃないか☆? なんで 選択させるんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 選択させたい気分だったんだろ☆」

20200619docker32a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 人が読もうとしてるのに、Webサイトがさっさと本題を切り出さないのは あってはならない☆
あんな できそこないの公式Webサイトではなく わたしが解説する☆ つぎは CLI ボタンを押してみろだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 CLI って何なのよ! こんなわけの分からないボタンなんか 押したくないのよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Command Line Interface だぜ☆ 気にせず押せ☆!」

20200619docker33.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 黒い画面が出てきたんだけど!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Alpain Linux に 接続した ターミナルだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 これが Dockerコンテナの上で動いているゲストOSなの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 hostname と打鍵して [Enter] キーを押してみろだぜ☆」

20200619docker33a1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 何なの、この16進数の羅列みたいなのは!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 いわゆる コンピューター名だぜ☆
だが、ホストOS とは異なる コンピューター名だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 仮想マシンなんだろ☆」

20200619docker34.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ docker-entrypoint.sh とかいうファイルが FHSのトップディレクトリに置いてあるけど、こんなとこに置いてていいの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 チュートリアルだからだろう☆ 目につくところに 置いてあるぜ☆」

20200619docker35.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ この docker-entrypoint.sh スクリプトは何をしてるの?」

20200619docker36.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 何をしているかは さっきの Docker の Dashboard から見れるんだが、見ても分からんぜ☆
このチュートリアルは エグザンプルとして 出来がよいのかどうかは 分からないぜ☆
いろんな環境で チュートリアルを動かすためのもので、 模範として参考にされる目的ではないと思う☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 残念だったな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 exit と打鍵して ターミナルを終了しろだぜ☆」

20200619docker37a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 3つ目のボタンは stop だが、Webサーバーとかに使っている Dockerコンテナ なら、そのサーバーを止めるぜ☆
ついでに 多くの場合、一緒に Docker コンテナ も削除するぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 全部捨てて、Docker イメージを元に Run し直します というルールで縛ることで プログラマーも 状況把握しやすくなるだろ☆
再起動のときの 初期化忘れ について考えなくて済むぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 続きはまた今度な☆」

2020-06-20(sat) 09:00

20200620docker38a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker はタスクトレイに居るぜ☆」

20200620docker39a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 右クリックして Dashboard を選べだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで デスクトップの Docker Desktop ショートカットをクリックしても Dashboard 出てきてくれないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker はサービスなんで☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ドッカ―・デスクトップ っていう名前じゃない!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker Desktop のデザイナーの頭がイカれてるんで☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 イカれていては 仕方ないわねぇ」

KIFUWARABE_80x100x8_01_Futu.gif
「 作者の頭がイカれていることにすれば あらゆる問いに 答えることが可能だな☆」

20200620docker40a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 昨日、 Stop ボタンを押したんで、この四角いアイコンは 灰色だぜ☆
これは プログラムが EXITED したことを表し、リターン・コードが 0 だったというのも書いてあるな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 慣習的に 0 は正常終了、それ以外は 異常終了のエラー・コード だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここで、話しを進めるまえに、昨日のことを思い返して欲しい☆」

20200620docker41a1.png

docker run -d -p 80:80 \
  --name docker-tutorial docker101tutorial

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これは --name docker-tutorial というオプションと、スペースで区切られて  docker101tutorial という引数が書いてあると見てほしい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そんなん 分かんないわよ!」

20200620docker42a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここで、上図赤丸の中の docker-tutorial は、 --name オプション で与えた コンテナID だぜ☆
また、うしろの緑丸の中の docker101tutorial は DockerイメージID なんで 見分けてくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 こんな UI で誰が分かんの、そんなん!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2010年以降の デザイナー、みんな クソ なんで☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 大雑把なくくりだな……☆」

20200621docker43a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ、昨日は Stop だったところに Start ボタンが できてるんで 押そうぜ☆?」

20200621docker44.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 一瞬で 起動した!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 チュートリアルが軽いからなんだけどな☆」

20200621docker45a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ ゴミ・バケツ のボタンを押してくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 削除されんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何が 削除されるか、だな☆ やってみようぜ☆?」

20200621docker46.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 うーん?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 コンテナが削除されたんだぜ☆ 言ってしまえば ハードディスク・クラッシュ を食らったのと同じだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何で気軽に ハードディスク・クラッシュ するんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アナログ時代が デジタル時代に 移項したように、
物理時代から 仮想時代に 移項したのが だいたい 2010年代……☆
わたしたちは その10年分の遅れを 取り返そうとしているところだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 仮想のOSを ぽんぽこ 産み出して、 使い終わったら ぱっぱか ハードディスク・クラッシュ させればいいの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 2150年、人類は 肉体を ぽんぽこ 産み出して、 使い終わったら ぱっぱか 全身を強く打つ のだった☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うーむ……、そんな時代だったら 遅れを取り返したくないかな……☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 もう ワートリ で そんな世界を知ってるんじゃないの?」

20200621docker46a1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 で、この画面から 何をすればいいわけ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なぜか イカれた UI デザイナーは ここで手を抜き 言葉で書いてるんだが、
以下のコマンドをコピー&ペーストしてあなたのターミナルで実行したらまた戻ってきてください、と書いてあるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで イカしたボタン を置かないんだぜ☆! ここに置くべきだろ☆!」

20200621docker47a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Visual Studio Code の Terminal を使うのが ベスト と思うが、
ここは ひねくれて 今年 バージョン 1.0 がリリースされた Windows Terminal を使ってみよう☆ まあ、同じだぜ☆」

20200621docker47a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、今回は Step 1/21、 Step 2/21、……とか出てこないで Pull するだけだぜ☆
これは 料理するのに比べれば できあいの冷凍食品をチン するような手軽さだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 情報化とは 情報伝達速度の向上 なのだなあ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 従って 文化 なんていう脱皮で捨てた皮が 次から次へと 出てくるのよ。
10000年後には 文化の墓地の余ったスペースで 現代人が生活しているのよ」

20200621docker47a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 63a49d2296d1403 ……、 長ったらしい この羅列は UUID だぜ☆
知ってる人は知っているし、知らない人は知らない やつだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そういうの 止めなさいよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 当たる確率が 230京分の1 の宝くじを引いてるんだぜ☆
1億人が1億回 くじ引いても まだ当たらないぐらいだが 10億人が10億回 くじ引くと そろそろ当たるぜ☆
全人類、全世界で UUID 使うと ぶつかるが、自分1人で使う分には 十分 実用的に見過ごせる エラー率 だぜ☆」

20200620docker48.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ コンテナがまた走ってるな☆ CLI ボタンを押してくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで こっから ターミナルに入れるのに、さっきは ターミナルに入るボタンが無かったの!?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker の Dashboard は ゲストOS は取り扱えるが ホストOS は取り扱えないんじゃないか☆?」

20200620docker49.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 63a49d2296d1 ……、あっ!」

20200620docker49a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここに書いてある☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そんなところに書いてあろうと無かろうと 見ないわよ!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Docker コンテナに X Window System をインストールしたら GUI 出るの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 GUI も出るという話が インターネット上を検索すると出てくるが、わたしのマシンの非力なグラフィック・ボードで そんなことは止めてほしい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Windows も出るの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 出ない☆ Microsoft は GUI を抜いて Windows Core とか言っている☆ これからも出ないだろ☆
その根拠としては ユーザーからのクレームが Microsoft に向かう☆ 無料で配られた改造版Windows の サポートするわけがないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Red hat enterprise linux は やってるのにな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 RHEL を使えるユーザーは コンピューター・スキルが高いからだろ☆
コンピューターから Excel を消してしまいました とか言う 対人スキルに全振りした会社の収益の10%ぐらい稼いでくる営業のおっさんとか ターゲット外だろ☆
Windows ユーザーは そこらへんの おっさん も巻き込んでビジネスする☆ ユーザー層の厚みが違う☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 企業秘のフォルダーが消えてるんだけど?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 おっさんが ドラッグ&ドロップで どこかに落とした☆
コンピューター・スキルの有る無しなんか 仕事の売上に関わらないんだぜ☆ 売り上げに関わる仕事に就いているかの有無が重要だぜ☆
営業は脳みその中にソフトウェアが入っている☆ スーツ着てずらっと座っている おっさん たちの取り扱いに長けている☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Docker は だいたい 使い方が 分かったんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ぜんぜん……☆ お前らはまだ Docker の何たるかの 何も見ていない……☆
これから Dockerから受けるストレスで 転げまわるんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker を使った 運用 方法など 何も知らないのだから☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ 知ったらいいだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 チュートリアルの使い方は分かったぜ、さあ 既存の業務システムを Docker に置き換えよう……、 どうやって☆!?

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 やってみりゃ できるんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 チュートリアルから 1歩でも 外れた使い方しようとしたら Docker のまだ見ぬ顔 を見ることになるからな☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 では その Docker の隠された顔 を お見せしよう☆」

メモリが足りません

20200620docker50.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ メモリが足りません の顔だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Cドライブは まだ 空いてるわよ」

20200620docker51.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Settings をクリックしてくれだぜ☆」

20200620docker52.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Resources をクリックしてくれだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Disk space サイズ、まだまだ余ってるじゃないか☆ いけるいける☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 だいたい Docker image 作るのに 100 MB としようぜ☆ 10個作れば およそ 1GB だぜ☆
PCの容量って無限にあるんだな、と思って
じわじわ 使い込んで Docker Desktop が起動失敗して気づくんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 リボ払いみたいに言ってんじゃないわよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何をしたら メモリが足りなくなるのかと言うと……☆」

20200620docker53.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ちょっと違うものを バンバン ビルド してしまうことだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 止めなさいよ! メモリとしての活用すらしてないじゃないのよ! ひと口かじるごとに 食べかすを 記念に 履歴にして ため込んでるわけ!?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker には このメモリの利用を改善する ベスト・プラクティス が スキル・レベルに応じて 何段階もあって……☆」

20200620docker54.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ステップ毎に Docker image を取り置きながら ビルドしていく作戦 キャッシュ も、
Dockerの隠された顔 メモリが足りません を倒す 手段の1つだぜ☆
この作戦は 選択できるものではなく、 ほぼ必須に選ばなければならない 作戦だぜ☆」

20200620docker54.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さきっちょを変えるだけなら、取り置きの ステップ 2/3 の続きから ビルドを再開できるんだぜ☆
取り残して置かなくていいものは さっさと捨てることができる☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 フーン☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この キャッシュ を使いこなさないと メモリが足りなくなるし、
使いこなさなかった場合 8時間 かかる作業も 使いこなすと 1時間 で終わるようになる☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ ドッカ―の実技に入る前に 知識として習得しておくべきでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 問題に直面して、解決するには、と 行動を変えて得られる知識だろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 リボ払い 年利率18% になるまで 使い切る あんた だけよ!
他の人は もっと早く おかしいことに気づくのよ!」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んのすごいところは 通帳に入っていない 60万 も買い物してしまうことだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 気づきなさいよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 使っても残高が減らない不思議なカードで 限度額150万まで まだまだ だったからな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 特技が 複利計算 なんだったら 真っ先に 気づきなさいよ!」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んに クレジット を持たせるなだぜ☆ 全部 キャッシュ にしろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 つづりが違う☆ Cache と Cash だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今 使っているPC も ディスプレイも NAS も ハブ も スピーカーも ペン・タブレット も マウス も リボ払い で買ったものだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 止めなさいよーっ!

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このキーボード 東プレ REALFORCE は 若い頃に稼いだ金で買ったものだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 あんたの メモリが足りません なのよーっ!!」

KIFUWARABE_80x100x8_01_Futu.gif
「 頭の栓が抜けていて 金を持っていると 使ってしまうようだな☆」

20200620docker55.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここまでの流れを見ると Dockerfile さえあれば いくらでも Docker container の初期状態までは作れるわけだから、
自分のマシンには Dockerfile を取り置けばいいんだぜ☆
要らなくなれば Image も Container も捨ててしまえばいい☆」

20200620docker56a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そんなことが できるのも 世界中の誰かが リポジトリをクラウド に上げてるからなんだけどな☆
OSの開発者が やーめた とリポジトリを消せば 世界中で 悲鳴が上がるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんだこの 共産主義的発想☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 日本ではできないよな☆ 行政は コンピューター詳しくないんで、リポジトリ持ってるのは 世界中に散らばった小さな 国立大学や 私企業、などなどだぜ☆
郵便も 水道も 自由経済の民間に委託するこの流れで 大きな政府を頂点 とした共産主義は無いぜ☆ 中国ならワンチャン一発ある☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 一次創作の作者の動向を測りながら 二次創作する2000年の00年代みたいねー。
たかだか 1人 の一次創作者をリポジトリとした 二次創作の多発よ。 プログラミングでは リポジトリが たくさんあるのが違いだけど」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 リポジトリが やーめた といえば みんなで大打撃を受けるのも同じだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんな社会構造に身を委ねていいのか……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 1950年~2010年頃の 日本の大企業 を除く コンピューター技術者の民間人レベルでの異民族の交流が 人類史の中でも やけに広かったんだぜ☆
5Gへの野望を最後に人類史は 2020年のアメリカから また ダメになる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 あんた 日本の大企業 嫌いねー」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何が コンピューターの歴史を爆発的に進めたのか その瞬間は わたしには特定できないが、
多分 ストリート・ファイターII なんじゃないか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんでなんだぜ☆! 国内で大量にパクられた スペース・インベーダー でもいいだろ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Tron と Mac をパクった Windows 95 でしょ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 海賊版や 模倣品は ある意味 リポジトリ―はクローンして使うもの という作戦だぜ☆
これが物理の世界では オリジナルへの打撃 になるが、仮想の世界では オリジナルへの支援 になるんだぜ☆
Docker 以後の歴史では構想は オリジナルをコピーして欲しい んだぜ☆ 正しく パラダイム・シフト という言葉を使うケースだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんな話しを 信じられるのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 リボ払いする人間に 信じるも信じないも無いのよ! 使うのよ!

KIFUWARABE_80x100x8_01_Futu.gif
「 くそっ☆ 世界中の UIデザイナー の頭はイカれていて、リボ払いする肯定思想を持つ人間をどうやって止めるんだぜ……☆!」

20200620docker57.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ステップ3 を リリース用 として使って、
それをベースに エディター もキッティングしたステップ4 を開発用に使う、
みたいなことも 重要な キャッシュを活用した作戦だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んに何を言われても リボ払い に見えてきた☆
そんな話は信じようと信じまいと、使うんだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ステップ3 と ステップ4 で重複している箇所は、ステップ3を再利用して ステップ4の追加分だけストレージに記憶していると考えてくれだぜ☆
これで メモリは足りません には大きく対応できる☆
知ってるやつは知っているし、知らないやつは知らない この空間では 知っておくことは重要なことだぜ☆」

時間が足りない

20200620docker58.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 朝の9時に業務を開始し、 Dockerfile を書き始めていたら……☆」

20200620docker58a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 定時の 17:30 に Dockerfile の作成が終わっていないことが 2日や 3日では足りないほど ある☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんでだぜ☆!」

20200620docker59.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ キッティングのミスした Docker イメージ を作ってしまうからだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 キッティングを成功させてから Docker イメージ を作ったらよくない?」

easy_install Flask

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば Python の easy_install
これは Python の仮想環境 venv を使っているときに Flask をインストールするコマンドなんだが……☆」

pip3 intall  flask

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今では pip3 install を使うのが普通だぜ☆
つまり わたしが身に付けている 環境構築方法は レガシー☆

KIFUWARABE_80x100x8_01_Futu.gif
「 レガシーでも いいじゃないか☆」

20200620docker60.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ リポジトリ―が無かった……、あるいは わたしが見つけられなかったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 始まったぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 面白くなってきたわね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 仮想ではないOS の ubuntu では 使えるコマンドも、
Docker コンテナの上で動くゲストOSの ubuntu では 使えないというコマンドに出会う……、Dockerの隠された顔だぜ☆」

20200620docker61.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ わたしは実は 世界とはつながっていなくて、 Docker とだけつながっているのでは、と思っている☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 開幕 諦め わらう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ホストOS からインストールしたら いいんじゃないの?」

20200620docker62.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ パッケージの依存関係を全部コピーするのは Docker の利点を損なうぜ☆
わたしのローカルPC というのは 家庭内ネットワーク内の外から どこからでもアクセスできるものでは ないからだぜ☆
つまり Dockerfile は無効化する☆
世界中どこにいても 特定のネットワーク内にある リポジトリ―へ アクセスできるからこその クラウド だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 レガシーの保守に払う労力を得て クラウドの利点を損なうという選択肢は わたしには無いぜ☆
2000年の00年代の日本の大企業なら 利点を損ねても 労力を取るだろうが、成りたくない大人に なろうとしてはいけないぜ☆
無いなら 無いで、
環境構築手順を すべて 新しく見直すのだった☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんな余裕が よくあったな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ないけど やらないと進まないから Docker ストレス なんだぜ☆
動かして、失敗して、調べて、直して、また動かして
ただ やるだけ という、プログラミング・スキルで差別化できないところだぜ☆
必要なのは Docker運用経験と Docker知識 だぜ☆ どちらもゼロ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ハイ・スペック・マン が ただやるだけマン になっていて わらう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 C#、 Java、 Python、 Go、 いろいろな言語と データベース、
これからは いろいろなものを Docker を見据えて 構築手順を調べておかないと いけないわけだが、
これを 自分で作っている内は それもまた 仕事が 鈍(のろ)くさい……☆」

20200620docker63.png

https://hub.docker.com/search?q=python%20flask%20nginx&type=image

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker には 既にキッティングしたイメージ のリポジトリがあって、それを使うのが 時短 だぜ☆」

20200620docker65a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ただ ここで注意するべき点は、 Docker イメージ というのは 空中(n step; 1<n)から始まるのではなく、根っこ(step 1)から始まる という原理だぜ☆
Python だけ欲しい、というのではなく ubuntu に Python を入れたものを欲しい、という感じで 根っこ から付いてくる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Ubuntu と Nginx と uWSGI と Python と flask の組み合わせで欲しいときは どうやんの?」

20200620docker64.png

https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 団体が違う製品を集めたイメージに 公式 とか無いんで、 そういのは 個人が 作ってくれている☆
しかし 企業が 知らない外部の個人のイメージを使って 大丈夫か、というのもあるんで イメージの作成は 自分で全部 やってしまっていい気もする☆
というのも 説明の機会があって 質問に答えなければいけないときに
知らない個人のイメージにお任せしています、というのは まあ 通らないぜ☆」

20200620docker66a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 実践的には Official なリポジトリから OS を取ってくることが多いだろ☆
このページを見れば ubuntu:20.10 みたいな感じで Docker イメージ をもらえることが 分かるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 .iso イメージを ローカルにダウンロードしなくていいなんて 楽になったもんだぜ☆」

シークレット

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 これで だいぶ 知識が入ったんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まだ まだ まだ まだ……☆」

20200620docker67.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 企業のシステムというのは PC1台で回っているなんてことはなくて、複数のサーバーが関係しあって1つのシステムを作っているんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そのシステムのサービスを利用するために アカウントとパスワードが必要になることは 慣例的だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Webサーバーを立てるにも Linuxユーザーとそのパスワード、
データベースにアクセスするにも、そのデータベースのユーザーとそのパスワード が必要だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ パスワードを入力しろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここで重要なことなんだが……☆」

20200620docker68.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こういう Docker イメージ の中に パスワードを入れてはいけない☆
会社の外に Docker イメージ を出すことは無いんで問題ない、とか言うエンジニアの話しは 聞くなだぜ☆ 雇い主の指示に従わずに契約違反になって会社を辞めてもいい☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 wwwwwwwwwwwwwww☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 理由としては コンピューターを使って問題を解決していないからだぜ☆ そいつはその会社に住んでいる☆
わたしたちは会社に住むのではなく 世界のどこにいても そこにコンピューターがあれば通用する コンピューター・スキルを身に付けなければならない☆」

20200620docker69a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Dockerfile の中に 平文だろうが暗号化してようが パスワード を書くなんてことをやってはいけないし☆、」

20200620docker69a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker image の中に パスワード を書くなんてことをやってはいけないし☆、」

KIFUWARABE_80x100x8_01_Futu.gif
「 言おうと思ってたんだが、お父んの ↑その絵 は ハード・ディスク じゃなくて CD-ROM だよな☆」

20200620docker69a3c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 子OS の中に パスワードや、 AWSのcredentialsファイル(盗まれると高額の請求がされてくる) を入れるなんてことは してはいけないぜ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どんなリスクがあるの?」

20200620docker69a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ パスワードを取り扱うソフトウェアは、開発者のローカルPCではなく サーバー・マシン で動かすのが ほぼ必須なんで、
プライベート・ネットワーク内のどこかの ホストOSの上の ゲストOS になるわけだが、
そこに シークレットなものが置いてあるリスク の話しだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker がどう働くか知らないが、
同時に予備のバックアップ・マシンが複製されていたり、 仮想マシンは第三者に委託するなどのタイミングで Dockerfile などを渡して
ひゅるーっと パスワードが 第三者のマシンに吸い取られたり、というときに 社外に 秘密のキー があるとかいう マヌケ なことになるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 第三者に委託しなければいいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このPCに入っているデータは これだけですね、と目録をチェックして 大丈夫だと判断して PC を移動するんだぜ☆
それなのに あのデータにアクセスできなくなった、ということは起こりうる☆
あのPCに そんな用途のデータが含まれているとは思いませんでした、という ヒューマン・ミスは 容易に起こりえるんだぜ☆
そんなことは起こりえない、とか思ってるやつほど ガードが ザル だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラマーが、ここで確実に止めておくのが、一番セキュアなんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 リボ払いの お父んに 言われてもなあ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 パスワードは どこに置いておけばいいの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 基本的な考え方は、パスワードの取り扱いを 現状から動かさないことだぜ☆」

20200620docker70c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 例えば、 AWSの.credentials ファイルは、親OS のこのディレクトリーの中にある、という運用をしているのなら ずっと そのディレクトリーの中にあるべきだし、
それを Docker を扱うためだから、といって ファイルをコピーするようなことをしているなら 振り込め詐欺に引っかかってATMに現金を入れている途中 と自覚しろだぜ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 リボ、付けますか?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 んー☆、じゃあ 付けようかな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父ん☆!」

20200620docker71c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ シークレットなものにアクセスするタイミングとしては、 buildrunrunning の3つが考えられるぜ☆
DockfileDocker Image、 Gest OS の中にシークレットを置いてるやつは論外で☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker を使うからならではの 作業も出てくるんだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、わたしは先週 ここで 足踏みしているので 解決方法は待てだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんなのよーっ! 解決してから偉そうにしなさいよーっ!

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker の何が簡単なんだろうな☆? 不思議だぜ☆」

Dockerfile

20200620docker72a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さあ ここからが 魔界への入り口だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 楽しくなってきたな☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 魔界じゃなかったら 張り倒すわよ! 化け物の1つでも出てくるんでしょうね!」

20200620docker73.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ファイルの中身を見ると このように シーケンス(一列)な見た目をしているんだが……☆」

20200620docker73a1b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ FROM がブロックの先頭になってると思ってくれだぜ☆
そして FROM には、 AS 名前 が付いていたり、付いていなかったりするぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Dockerfile の構造を 視覚化してくれるエディターが欲しいわねぇ」

20200620docker73a1b2c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そのブロック構造は、 FROM 名前 をつなげることで、ツリー構造になっているぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、よく見ると --from= というのもあるな☆」

20200620docker73a1b2c2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ from と as を つなぐと、 AS無しFROM のブロックをスタート地点として
ふたまた に伸びていくツリーが でけたな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 dev は無視すんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 無視するぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なぜ こんな 複雑な構造で 在らねばならないのか……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 FROM は、 Docker イメージの 底にあるものを指していることを 思い出してくれだぜ☆」

20200620docker73a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ FROM が ブロックの足し算記号 みたいな働きをし、
COPY --from= は、その Docker イメージを ファイルや、ディレクトリーに複製してるわけだぜ☆」

20200620docker74.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 絵にすると こんな感じ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 これ覚えないと 1時間の作業が 8時間になるんでしょ! 覚えるわよ!」

KIFUWARABE_80x100x8_01_Futu.gif
「 この図をたどってみると nodepython を入れてるんじゃないかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2つのものを 入れれてるんだな☆
片方の タグは 12-alpine、 もう片方のタグは alpine なんで、タグは勝手に付けれる自己申告制なんだが、 Alpine Linux を使ってるものと思うぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 その2つの Alpine Linux は、まったく同一なのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 知らね☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ☆!(>_<)」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 どのイメージも すべて 同じ OS のはずだぜ☆ 根っこは同じなら キャッシュ で飛ばす、という 原理 なのだから☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 一番底にある OS のリポジトリ―が やーめた したら 大惨事にならない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 世界中の 何時間が 飛ぶんだろうな☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 テクノロジーが在っても 管理者は ニンゲンだからな☆」

20200620docker73a2b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ 残りを見ていくかだぜ☆
先頭に WORKDIR /app と書いてあるな☆」

# WORKDIR /app と多分、同等
mkdir /app
cd /app

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Linux で、特に何も指定しなければ、root ユーザーで FHSのトップ・ディレクトリに居ると思ってくれだぜ☆
そこに app ディレクトリを作って、その中にカレント・ディレクトリを移動するんだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 相対パスを書くと、前の WORKDIR から見た相対パスになるぜ☆」

http://docs.docker.jp/engine/reference/builder.html

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 細かな説明は 公式のドキュメントを当たってくれだぜ☆」

20200620docker73a2b2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ COPY は、複数の移動元と、1つの移動先 だぜ☆
WinSCP 使わなくても送信できるぜ、楽だぜ~☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 移動元のカレント・ディレクトリは build コマンドを打ったときのカレント・ディレクトリだったかな……☆?
調べても 分からないぜ☆ 打てば分かるだろ……☆」

20200620docker73a2b3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ RUN なんだが、 コンテナの run や running とは何の関係もないぜ☆
単に Linux のコマンドラインを打ち込む、ぐらいの意味しかないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今は Docker image を作っている build のフェーズなのだから、
だったら BUILD とかにしてくれればいいのに RUN だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 気にするなだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 分かったぜ☆ 気にしないぜ☆」

20200620docker73a2b4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 最後に特筆すべきところは && で結ぶ理由だぜ☆」

20200620docker73a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今まで 書き忘れていたんだが、キャッシュは コマンド単位で取られるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 忘れンな! キャッシュ作戦の印象が だいぶ変わるじゃない!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここは ワン・セット で、というところは && でつなげておく 必要 があるわけだぜ☆
中途半端にキャッシュが残ると意味が変わってしまうところで 忘れるなだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ウーン☆ Dockerfile の書き方も 分かったかな……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まだ だぜ☆! まだ、まだ、まだ だぜ☆!」

ヘルパー・スクリプト(起動スクリプト)

20200620docker75c1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker のネーミング・センスが イマイチだと思うんだが……☆」

20200620docker75a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この動線は run ではなくて new アンド run だと思う☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 run でいいじゃない!」

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker コンテナを run するんだから、合ってるんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしは Webサーバーを run したいんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 使い方は Webサーバーとは限らないのだから、 きふわらべちゃんの Dockerコンテナをrunする の説の方が勝ちよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この run では、構築後の ゲストOS で1つだけ 叩くコマンド を指定できるんだぜ☆」

20200620docker75a2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 build のフェーズでも 山ほど RUN してなかった?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 その RUN と、この run は、違うんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何が違うんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 はっきりした言葉で 公式に書かれていないんだが、恐らく……☆」

20200620docker75a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この build フェーズで行っているのは、ファイル・システム なのではないか、
そのとき実行されていた プロセス は 含まれていないのではないか、ということだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ふつうの イメージ はどうなの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ドライブ が書き込まれるな☆ ファイル・システム の写しだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ プロセスなんか Dockerイメージに 書き込まれないのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 したがって、 build のフェーズで Webサーバーを起動しても、イメージには Webサーバーが起動していることは 書き込まれないわけだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 コンピューターを扱う者には 想像は容易いわねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ビデオを ポーズするのとは違うわけだぜ☆
今どきでいうなら、動画を一時停止するのとは違うわけだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 build は、ゲストOSを動かして RUN してファイル・システムをデプロイし、すべてのコマンドが終わった時点の ドライブを Dockerイメージ として焼き付けることで、
run は Dockerコンテナを起動し、その上で走っている ゲストOSで コマンドを1つ打つことができる、
この違いを はっきり認識することが重要だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 認識したぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 認識したわよ」

20200620docker76.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば Dockerfile に書かれている☆、」

CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000"]

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ は、run するときに使われるが、 build するときは 覚えておくだけで まだ使わないんだぜ☆」

mkdocs serve -a 0.0.0.0:8000

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ run したときに、打ち込まれるコマンドかのように振る舞う んだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ふむ」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで 角括弧で囲んだり、ダブルクォーテーションで囲って カンマ区切り にするんだぜ☆?
なんで そのまま 書かないんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは 簡単に説明できるぜ☆ 説明しよう☆」

docker run -d -p 80:80 --name docker-tutorial docker101tutorial

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ run コマンドは こんな見た目をしてるんだが、見やすくするために オプション を省いてみようぜ☆」

docker run docker101tutorial

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こう書くだけで Dockerコンテナは走り、その上に docker101tutorial イメージを元にゲストOSが復元されるわけだが……☆」

docker run docker101tutorial mkdocs serve -a 0.0.0.0:8000

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ CMD で指定したものは run コマンドの末尾に デフォルト値として付くと思ってくれだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ……☆」

docker run docker101tutorial mkdocs serve -a 0.0.0.0:8000
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、本当のところ、 run コマンドの イメージ名の後ろに書かれたコマンドラインが、ゲストOS起動時に1回だけ実行される、というのが 原理 だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 また出た 原理☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 おかえり 原理!」

20200620docker76a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ だから こういう CMD 命令を見かけたら、 run コマンドの末尾に付く デフォルト引数、ぐらいの感覚でいてくれだぜ☆
書き方が 独特だが、 引数に半角スペースが付いていても対応できるんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 エスケープ・シーケンスが気になるが、分かった☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 おk」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 その他に もう1つだけ、ゲストOS起動時に1回だけ実行される コマンドがある☆」

ENTRYPOINT["docker_entrypoint.sh"]

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ENTRYPOINT だぜ☆ 書き方は CMD と同じだが、働きが異なる☆」

ENTRYPOINT["entry_a", "entry_b"]
CMD ["cmd_a", "cmd_b"]

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そして ENTRYPOINTCMD の両方を使うと多分……☆、」

entry_a entry_b cmd_a cmd_b

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ CMD の方は、 ENTRYPOINT の引数になる☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ENTRYPOINTCMD のどちらも Dockerfile になかったなら、エラーになる☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんな仕様を どんなケースで 使い分けるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さあ……☆ 詳しくは 公式のドキュメントを当たってくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 使い分け方の分からない 似たようなコマンドは どっち使えばいいのか 気になるのよねーっ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もし ゲストOS起動時に シェル・スクリプトを叩きたいだけなら ENTRYPOINT の方を使えだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まだまだ 途中だが 日付も変わったんで ここまでだぜ☆
次があるのなら Docker を少しは 使いこなしておきたいものだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 おつ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そういえば Docker の何が 分けわからないのか その深淵に入ってないな……☆
ここから さあ 既存システムを Docker に移行していくのを 実践するぞ、というところなんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 もういい☆ 寝ろ☆」

2020-06-20(sun) 13:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker の何が分けわからんかというと、 Dockerが分けわからん ことと、 Dockerはちょっと分かったが、どう運用すればいいのか分けわからん
の 2方向からの爆撃を受けていて わたしの戦闘機は墜落していく……、という感覚を味わうと思う☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 その Dockerはちょっと分かった が錯覚で、本当は Dockerを間違えて把握している から どう運用すればいいのか分からん が導かれているのではないの?
Dockerが分けわからん 状態を先にクリアーできないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 初見では無理だと思う☆ わたしたちの原理 と、 Dockerの原理 に ずれ がある☆ それを各個撃破しよう☆」

Docker入門(第四回)~Dockerfileについて~

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ちなみに わたしが Docker 分けわからん と言っている内容は インターネット上の記事をサーフィンすれば既出だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ ネット上で 知識を溜め込んでから Docker を触ればいいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker の魔界を歩きながら叫んでいる言葉は エグザンプルが少ない だぜ☆
Docker を覚えたいのではなく、 わたしの周りにある既存のシステムを Docker に移行したい んだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Dockerを覚えないといけない んじゃないの? そのステップを飛ばすから 魔界 に入るんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしの思っているDocker と、 Docker と、違うんだぜ☆ アンジャッシュのすれ違いコント の状態で記事を読み続けることになる☆
Dockerは 間違ったブランド・イメージ を確立しやすいアフォーダンスを外に向けている と思う☆」

20200621docker77.png

20200621docker77a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker に 既存システムを載せようとすることが 間違いなのでは☆?
システム改修は発生し、
システムの リプレース、および マイグレーション が必要なのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ Docker の記事って、 これから新規システムを一から作る人 が読むのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そう考えれば 矛盾は 発生しないんじゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 確かに、そう考えれば 矛盾は 発生しないよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ、 Docker界隈の人って、一からシステムを作り直す前提で 盛り上がってんの?」

KIFUWARABE_80x100x8_01_Futu.gif
「 そうだろ☆」

20200621docker78.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Dockerの 仮想化 に対応していない OS依存のプログラムとか、 Dockerの 仮想化から見れば みんな レガシー になるのかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 レガシーというより、非仮想プログラム なだけだろ☆
Z3 や ENIAC も みんな そうだぜ☆
本体は Docker に乗らないだろうが、エミュレーターなら乗ることはできるだろう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 2150年に仮想化した人類は 現代の人類と 同一と言えるのかしら?」

KIFUWARABE_80x100x8_01_Futu.gif
「 別だろ☆ 仮想、人類 だぜ☆
人体を捨てて 仮想空間の中で 出産しろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 してるよな☆ お前ら課金で☆ セカンド・ワールドに接続してしまえば、あとは本体を消せば仮想化 完成だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 世界中のデジタル的財産が Docker に独占されないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker はオープンソースだしな☆ Docker は Go 言語で書かれているが これも BSD ライセンスなんで、
何かが独占しているという状態ではない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 C++ 勢も Docker に移行できているという記事もあるし、
環境構築してしまえば 既存コードも マイグレーションできるのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 仮想環境上で動いているものを、仮想を剥がして Docker 上で再構築したり
古いバージョンのパッケージが無いものを 新しいものに置き換えたり 1個、1個 やってきゃいいんだろ☆
百歩譲って それを 簡単 と言う としよう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 起動から 1度もアップデートしていない プログラム とか いっぱいあって 楽しそうね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラムできる人はいっぱい 居るが、 メンテナンスしてる人は あんまり いないからな☆
拭かれたい尻があれば突き出せだぜ☆ わたしが拭いてやろう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker を使わない人からすれば、 Docker にするというのが 勝手な話しなのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 1995年から2000年00年代の会社に住んでいた人たちは 会社と一緒に滑り降りてガラパゴス村を形成した☆ その村の中で うまく回している☆
Docker や機械学習、プログラム言語を先導している GAFA と M もどうなるか 知らんぜ☆
人類に 欲求 や 不足 があるからこそ 需要 が在るんだぜ☆ あくまで コスト削減や それを利便にするのは 手段だぜ☆
遠くに置く目標設定と、面白い 課題 が必要☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 日本企業のお偉いさんって サスティナブルとか 節約とか ただ生かすだけ のことしか言わなくない? 生きてはいるけど やりたいことは無いのよ」

KIFUWARABE_80x100x8_01_Futu.gif
「 回すんだろ☆ 経済を ぐるぐる☆ まあ、血液も モーターも 回ってるしな☆ 重要なんじゃないかな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 百歩譲って それを 重要 と言う としよう☆ 重要なことだけ やってろだぜ☆
もらっている金以上の 重要なことをしてはいけないぜ☆
わたしたちは 回っている経済の上で 軽快 にコンピューター・スキルを身に付けようぜ☆」

Dockerfile のインストラクション

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Visual Studio Code などのエディターを使って Dockerfile のエクステンションを入れると Dockerfile のインストラクションに色付けてくれて見やすいんだが、
ちょっと見てみようぜ☆」

20200621docker79a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この インストラクション が 1つ読み込まれるたびに、
Docker コンテナは起動し、ゲストOSが起動し、コマンドラインは実行され、ゲストOSは終了し、Docker コンテナは終了する 原理 があるらしいぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker コンテナ、忙しいな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 その 原理 は 何に働きを及ぼして どのような結果を導いているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker イメージに もろに影響を与えているぜ☆ それは結果の違いとなって現れる☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし エグザンプル には ヘマした例 は書いてない んだよな☆
こういう書き方をしてはいけない、というのを 避けているので 知らずに わたしたちは ヘマをする んだぜ☆」

cd /usr/local
mkdir www

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 例えば ターミナルを使う分には カレント・ディレクトリ を移動してから、そこにディレクトリを作ろう、というふうに
一連の動作は 少しずつ やってもいいわけだが……☆」

WORKDIR /usr/local/www

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Dockerfile に書くときは、一連の動作を インストラクション1つでやる 必要 があるぜ☆
何しろ イントラクション が1つ終わるたびに ゲストOS を終了させられてしまうからな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ディレクトリー1つ作るたびに OSを終了するなんて 頭イカれてんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 節約し、経済を回し、重要なことをするのは 時間が連続している物理空間 だけにしてくれだぜ☆
仮想空間では システムに1つ変更を加えるごとに OSを再起動し、前後の操作と関連を持たず 現在の仮想ディスクの状態とだけ関連を持ち、一から手順を再開しろだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何その マルコフ連鎖☆」

https://docs.docker.com/engine/reference/builder/

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、公式のドキュメントを読むと この原理には 抜け道が開いている☆ WORKDIRUSER だぜ☆」

WORKDIR

20200621docker79a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 WORKDIR は うしろの RUNCMDENTRYPOINTCOPYADD に影響するらしいぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 原理と 矛盾しているのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 現在のディスクの状態と、WORKDIR の状態 とだけ関連を持ち……、という風に原理を修正しないといけないな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 原理に 正も誤も 無いのよ! 再定義よ!」

KIFUWARABE_80x100x8_01_Futu.gif
「 すっきりしないな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さらに WORKDIR で相対パスを書いたら、前の パス を引き継いだ相対パス になるとのことだぜ☆」

USER

USER muzudho

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 USER も、 RUNCMDENTRYPOINT に影響を与えるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 フーム☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 USER って何やってんの? su muzudho してんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そういう 実装 の話しは 公式に載ってないんで、使ってみて 思った通りの動きをしているか ケースごとに調べろだぜ☆
実行ユーザー を変えているとは思うんだが☆ 使い込んでないんで 使い道は 知らないぜ☆」

実践しようぜ☆?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まだ シークレット の取り扱いを心得ていないので 機密情報を取り扱った エグザンプルは見せれないが、
そうではないもので 1つ例を 作ってみようぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 NodeJS / React / TypeScript で将棋の盤が出てくる Webサイト を作ったらいいんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Type Script 覚えてくるか……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 仕事で使わないものを 覚えるんだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 金をもらってないのに 仕事をしてはいけないんだぜ☆」

2020-06-22(mon)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さらに Docker にクビを突っ込み、魔界が広がった……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで お父んは 魔界に入ってしまうんだろうな☆? 他の人は Docker に入るだろ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ふつうの人には考えられないような 使い方してんじゃないの?」

20200622docker80.png

20200622docker80a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なぜ……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 全部 Docker の上に 載せないといけないんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 データベースに接続するだけなのに……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 データベースも Docker に乗っけたら いいんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしの管理下ではないんで☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 既存の知見が 役に立たないので わたしのことは 会社に就職して2週間目の新人 ぐらいのやつだと思ってくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 エラーメッセージは 404 File Not Found で、 uWSGI のログを見ても HARAKIRI でタイムアウトしたことぐらいしか分からない……☆」

robpco/docker-nginx-uwsgi-flask-mssql

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 似たようなことをやっているやつがいるが、やり方が全然違う☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 エラーが分からなければ 対応のしようがないのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 development モードで 内部情報バンバン 表示するか……☆」

デバイス、ドライバ、ドライブ、メディア、ボリューム、マウント

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 収穫無いのも マヌケなんで Dockerイメージを錬成している間に 調べていたことを書くかだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Docker のマウントは、いつか使うかもしれないしな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ただ、わたしは Docker の blog記事で使われている、 Dockerの言うボリュームは、ボリュームではないのではないか という違和感がある☆
それを説明したい☆」

20200622docker82_20190512blog1 .png

20200622docker82_20190512blog2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 前に描いた絵だが、この中から デバイス を選んでくれだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 デバイス は簡単だよな☆」

20200622docker83.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 簡単ではなかった☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 見分ける基準があるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 CPU が ドライバ を通して認識できたら デバイス だろう☆
この定義では CPU自体 はデバイスではないことになるな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ケーブルは デバイスではないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 CPU と デバイス をつなぐのが ケーブル なんで、 デバイス に含めたくないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 デバイス と ドライバ はこんなもんでいいだろ……☆ 迷う要素は そんなに深刻ではないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ 次は ドライブ で☆」

20200622docker84.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ さっきの絵の中では Hard Disk Drive しかないな☆ ほんとは 種類多いんだけど☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ドライブ って何だぜ☆?」

20200622docker84a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ディスク(Disc) は円盤で、ディスク(Disc)が入ってるケースが ディスク(Disk) で、
メディア は 記憶している物理的なものを言っていて、 ドライブ は 回転するメディアを入れる感じのストレージだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 全部 ストレージ でいいんじゃないか……☆?」

20200622docker85a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、昔は A ドライブB ドライブ があって、ここに フロッピーディスク(Floppy disk) を入れて 起動していたわけだぜ☆
内蔵ハードディスクとか、 C ドライブ とかまだない☆」

20200622docker86.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ disc が入っている disk を drive に差し込んで回るんだぜ☆ カンペキだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ドライブ は 穴なのか?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 メディアの差込口だぜ☆ 中で ディスク(disk)のフタが パカッと開いて シュイン・シュイン・シュインとか音が鳴って
ディスク(disk)の中に入っている円盤(disc)が なんか回ってるぜ☆」

20200622docker87.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、後に 内蔵の外部記憶装置 とかいう名前の矛盾してるやつが出てくるんだぜ☆ Hard Disk Drive だぜ☆
閉じた箱になっていて、穴は開いてない☆ 3番目のドライブだから C ドライブ ☆」

C:\Users\むずでょ

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Windows では c:\ という ドライブ・レター をよく見かけると思うが、昔、 C ドライブのハードディスクに OS が入ってたからだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Linuxディストリビューションには ドライブ・レター 無いのよね~」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 コンピューターはどうあるべき、と未来を創る立場なら ドライブ・レター なんか無くていい、と思うんだが、こういう歴史的経緯で ずっと残ってるんだぜ☆
フロッピー・ディスクは いつ不要になるか? とか くだらないことばかり 長い時間をかけて 切り捨てたが、 C ドライブは残った☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 CドライブにWindows が入っている前提で プログラム組まれてるから 修正できないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 どうだか☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 次は ボリューム の説明を☆」

20200622docker88.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 30年ぐらい前、わたしが 小学生ぐらいの頃は 磁気テープ にデータを記録していて、
こいつは くるくる巻かれていたんだが……☆ ↑ こんな剥き出しのやつじゃないが分かりやすいく絵に描いている☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 回るやつ が多いな……☆」

20200622docker88a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 『ダメだ、もう入らね……』となったときに vol.1(ボル1)、 vol.2(ボル2)、 vol.3(ボル3) と増やしていくんだぜ☆
漫画の1巻、2巻、3巻 という助数詞と同じだぜ☆」

20200622docker89.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ マンガの何が 巻いてるか なんだが☆、」

20200622docker90.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 巻物の助数詞が 1巻、2巻……、なんで、そこから来ていると思うぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで 巻きたがる んだぜ☆?」

20200622docker91.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 音楽でよく言う 音のボリュームも、さいしょは つまみ だったのではないかと わたしは考えている☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 2010年以降 よく見かけるようになった わたしの考えた最強の語源 シリーズよね。
あんた いつから ウソつきの仲間になったの?」

20200622docker92.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 音量のことを Volume と呼ぶように 言葉が変わったせいで 形を失ったと 思わないかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 形なんか 要らんのに……☆? 古いものを残したがる うるさい おっさん かだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 将棋の棋士が 正座を止めないように、わたしも ボリュームは 巻くのを止めないからな☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 うざ……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ、Docker が言う ボリューム が、巻いているかどうか 確認しようかだぜ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 止めなさいよ!」

20200622docker93.png

docker volume create todo-db

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker の公式チュートリアルで 最初に出てくる ボリューム は これかだぜ☆」

20200622docker94.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ターミナルなら どこでもいいから 実行してみようぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 なるほど……、 C ドライブ だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そのコマンドは何を 起こしたの?」

20200622docker95.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ マンガの巻数の方の意味で、ボリュームを作ったんだろ☆
C ドライブの中を検索しても todo-db というディレクトリーは見つからないことから、 Docker engine の管理下の仮想空間に作られてんじゃないか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 /var/lib ……、と書いてあるから、 Docker engine の中は FHS なのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もともと Docker は Linuxディストリビューションの方から出てきたものだろうしな☆ FHS なんじゃないか☆?」

20200622docker96.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ じゃあ ボリューム が置いてあるのは ここらへんかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 多分……☆ それも /var/lib/docker/volumes/todo-db/_data というパスで 置いてあると推測するぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 あとは マウント が何なのかよね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 マウント の考え方は簡単で……☆」

20200622docker97.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Windows なら、CPU は AZ のドライブが 自分の周辺に ぶら下がってると思ってるんだぜ☆
C は固定だけど……☆
この A ~ Z を ストレージの頭にベタっと押し付けてやるのが マウント だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 乗っとるのねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Linuxディストリビューションなら、 /bin/usr/home とか そんなやつがトップにいる FHS なんで、
ドライブ・レターではなく ディレクトリーで マウント できるわけだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Windows でも ディレクトリーで マウント できるんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、マウントされる方と言えば ドライブボリューム だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ボリュームディレクトリー って何が違うの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうか、 ディレクトリー も説明が必要かだぜ☆」

20200622docker98.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あなたの行くべき道は、こちらだぜ☆

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 分けわかんないのよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そのあと、アルファベット順の住所録や 団体の役員をディレクトリーと呼ぶようになったあと……☆」

20200622docker99.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今では ファイルを置いてる場所を ディレクトリー と呼んでるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ、 ボリューム は ディレクトリの一番上ね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ドライブ・レターで、ボリュームをマウントするディレクトリーで、ドライブをマウントする
ディレクトリーで、ボリュームをマウントするディレクトリーで、ディレクトリーをマウントする という感じをつかめだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ボリュームでは マウントできないよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さらに Docker では、 マウントをバインドする、 という概念があるぜ☆ 今ではこれが推奨らしい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 !?」

20200622docker100.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 多分、 ゲストOSのディレクトリーの下位に、ホストOSのディレクトリーの下位 を マウントする ことではないかと予想しているんだが、
まだ調べ中だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 その他に、メモリ上に マウントするやつがあるらしいぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 調べといてちょうだい」

2020-06-25(thu)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こっから ネットワークも含めた話をしなければいけない☆ 少しずつ解説しよう☆」

20200625docker101a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 仕事のネットワークは こういう感じで 家からデータセンターにつながってるわけだぜ☆
ちなみに データセンターは地図には載っていない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 バラすの わらう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 会社とは どう つながっているの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 つながっていない☆
ネットワークから見れば 文房具と 机が置いてあるぐらいの ただの箱だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どうやって仕事してんの?」

20200625docker101a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 チーム・メンバーは インターネットに つながってるだけだぜ☆」

20200625docker101a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もう少し詳しく見ると、インターネットに直つなぎしている豪快なやつはいなくて、
インターネットにつながっている LAN につながっているんだぜ☆
端っこを LAN とか WAN に挟まれているから、ネットの内側、 インターネット だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ネットは 自由に見えて 電気通信事業者が持ってんのねぇ。
電気通信事業者が反乱したら ネット使えなくない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 使えないんじゃないか☆? 特に電線持ってる一番でかい会社を キャリア―(伝搬する者) と呼び、
NTT、KDDI、ソフトバンク、楽天 とかがある☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 野球をし出しそうだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 NTTに逆らったらネットにつながらなくなるとか無いの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なぜか みんな 今はまだ 法律を守ってるんだろ☆ 不思議だよな☆ 自由経済が回ってるんだろ……☆
そのうち みんなで 斧もって 暴れ出すぜ☆」

20200625docker101a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そして もっと細かくみると、LANの出口辺りに ルーター というマシンがいる☆
その内側は プライベート・ネットワーク だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ルーターは侵入者を弾くの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは ルーターの主な仕事ではないんで……☆
ユーザー名や パスワードを聞いてくるのは PCの中の サーバー・プログラムのプロセスなんで☆
ここはどこで、どこから来たやつか ルーティングするのが仕事なんで☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もっと言うと 現代は XAAS の時代なんで……☆、」

20200625docker101a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そもそも 基幹業務システムを 会社が自分で持ってなくて、別会社のクラウド商品をレンタルしてるかも知らんよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 その別会社が 事業を やーめたっ って言ったらどうすんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 契約書で ほっぺた をパチパチ するんじゃないか☆?
商売が回ってるのって 法律 のおかげだからな☆
逆に言うと 海外の企業から見れば 法律が整備 されているところは魅力的だよな☆
逆に 海外に儲けを吸い取られたくなければ 近寄りがたいほど ルールをぐちゃぐちゃ にしろだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ テクノロジーなんか発展したところで 商売にならんだろ☆ 法律 が無ければ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうそう……☆ プログラマーは無力☆ 法律が必要☆
電力は ネットワークも 法律も無ければ プログラマーは 役立たずの ウンコたれ……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 プログラマー弱くない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 流れてくる電気を お絵かきソフトや 映像に変換するぐらいだよな☆ 錬金術師の電気版だぜ☆
大事なのは それを成し遂げると全体の数10%か、もっとそれ以上に利くでかい効果があること を実現することだぜ☆
電気の仕事量の延長線上ではない 質的転換 を起こせだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 プログラマーって そんなこと期待されて 募集されてないだろ☆ 下っ端だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラマーは 対コンピューターに特化した バフなんだよな☆
本人はウンコたれだが 周りにコンピューターがいっぱいある現代社会では プログラマーがいじることで
コンピューターが 仕事をうまく こなすようになるんだぜ☆
仕事のコンピューター化を しておいてくれないと、あんま やることない☆」

20200625docker101a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 で、 キャリア― は VPN(バーチャル・プライベート・ネットワーク) という商売をしていて、
線を分けたり、暗号化してるから 情報は 漏れにくいですよ、と みんな信じて 使ってるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 信じているというより 契約と法律で縛ってるから 使えるんでしょ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 不思議な話だが、 VPN は、インターネットにまで 出てきているが、まるで LAN の中にいるように使えるんだぜ☆
だから リモートワーク とかしても 会社の業務システムの中に入れるわけだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そして さらに ネットワークの深い所の説明までしないと、 Docker の分からないところは 分からない☆
Docker が分からないというより、 ネットワークの知識の中で Docker はどう振る舞うかが分からないんだぜ☆ 見ていこう☆」

20200625docker101a7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 インターネットには ICANN とか、 NIC という団体も ぶらさがっていて、
こいつらが .com とか、 .co.jp といったドメインを管理している☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ICANNNIC が反乱起こしたら インターネット使えなくならない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なる☆ ブラウザ開いたら Not Found☆ こういう団体が反乱起こさないのは なぜだか知らないが
会社の ドメインとして例えば example.com を買ったとしよう☆」

20200625docker101a8.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ ルーターに 名前が付いたみたいに なるんだぜ☆
これで インターネットのどこからでも example.com でこのルーターのところまでアクセスできるな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 会社のメンバーは 自分とこのプライベート・ネットワークに入るのに わざわざ .example.com を経由して入るわけか?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 いや、物理的に みんな 業務システムの外にいるわけだが、
ネットワーク上では .example.com の中にいるように振る舞う☆
仮想のプライベート・ネットワーク、VPN だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さて ここから Docker が からんでくるぜ☆」

20200625docker101a9.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Docker コンテナ は、パソコンが1台増えた、ぐらいに考えていい☆
では こいつら、ネットワーク上の どこに 居んの?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どこにも 居なくない?」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んのパソコンの中に居るんだから、外から見れば お父んのパソコンまでしか見えないだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Docker で仮想化して喜んでいる人たちは Dockerコンテナに外からアクセスできてないのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Dockerコンテナの外側のホストまでは見えるんでしょ」

20200625docker101a10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば 上図のようなのを 同一ホスト上のDockerコンテナたち と呼ぶ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もちろん マルチホスト上のDockerコンテナたち の間で通信したいことも出てくるぜ☆」

20200625docker101a11b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そして 仮想のホストから、リアルのホスト へ通信したいことも出てくるぜ☆
このとき 思わぬことが起こったんだぜ☆」

20200625docker101a11b2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ マシンには名前(コンピューター名)が付いていると思っていいんだが、
上図で言うと、 Bob から Charley が見えないんだぜ☆
Bob は Alice の中にぶら下がっている Charley がないか探してしまう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 困ったやつだぜ☆」

docker run --name Bob --dns-search example.com

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そういうときは --dns-search example.com と付けると、
example.com からは Charley はどのマシンのことか見えてるんで、 Bob にも Charlery が見えるようになるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 理解したか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 多分☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここらへんの設定ができなければ、商売の実践で使えないぜ☆
Docker で 楽々 環境構築 とか言ってる連中の頭が どうしてるのか分からない☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 色んなパターンを調べておいてちょうだい」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんでわたしが……☆ Docker の公式が GettingStarted で説明してくれたらいいのに……☆」

<書きかけ>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事