いや~、部屋が暑すぎて熱中症になりかけたような...どうも、ボクです。
⇧ 上記サイト様によりますと、麦茶が良いみたいですね~。というわけで、
を週末に粛々と飲んでる次第です。
そして、GoogleのBigQueryについての記事を見て愕然。
⇧ 上記サイト様によりますと、
BigQuery のアルゴリズムはすごくシンプルな分割統治処理です。速いのは、それをすごい台数のサーバーと高速ネットワーク上で行うから。アルゴリズムがわかっても、実行環境が構築できないので他者の追随を許さない完全なる力押しサービスです。
⇧ 身も蓋もないですけど!? 結局、世の中、お金かい!
という、絶望を味わって、学習意欲がダダ下がりではありますが、前回までで、
⇧ ローカル環境のKubernetesで、コンテナ化アプリケーションをデプロイするために、Dockerのコンテナimageを作成するところまで実施しました。
今回は、その続きからトライしてみたいと思います。
タイトル通り、解決できていないので、お時間のある方のみご照覧ください。
Minikube内蔵のDockerを利用した場合、コンテナimageが配置される場所は?
前回、Windows側で、Dockerfileを元に、コンテナimageを作成しました。
通常のWindowsでのDocker利用時だと、Windows側にコンテナimageができるようですが、Minikubeを利用したDockerでは、仮想マシン側にコンテナimageができるみたいです。
とりあえず、Minikubeで仮想マシンを起動。
Minkube内蔵のDockerを使えるように準備。
docker damoneが起動したはずなので、「docker info」コマンドで確認。
Docker のインストールに関する広範囲なシステム情報を表示します。表示する情報には、カーネルのバージョン、コンテナとイメージの数を含みます。
使用するストレージ・ドライバに応じて追加情報を表示します。例えばプール名、データ・ファイル、メタデータ・ファイル、データ使用量、全データの容量、メタデータの使用量、全メタデータの容量です。
データ・ファイルとはイメージの保管場所です。また、メタデータ・ファイルとは各イメージのメタ・データの保管場所です。Docker は初回起動時に /var/lib/docker
をマウントします。そして、この場所にデータ領域とメタ・データ領域を割り当てます。
docker info
「Docker Root Dir: /var/lib/docker」となっているので、このディレクトリにコンテナimageはいるんではなかろうか、というところまで、前回調査しました。
minikube ssh
sudo ls -la /var/lib/docker
⇧ このどこかに、コンテナimageが登録されているらしい。
おそらく、「/var/lib/docker/image」が、「データ・ファイル(イメージの保管場所)」ってことになると思い、
辿っていくと、
⇧ 「content」「metadata」ってありました。
「content」の中に、「sha256」ってあって、
おそらくですが、こいつらが、コンテナimageの実体化と。
「metadata」のほうは、同じく「sha256」というディレクトリがいますが、
中身のそれぞれが、ディレクトリになっていて、
ディレクトリの1つを見てみると、「parent」というファイルがいます。
で、Linuxで、ファイルの中身を確認できる『cat』『head』『tail』『more』『less』などは、ファイルの拡張子まで指定してあげないと使えないようです。
Linuxの場合、ファイルの拡張子を確認する場合『file』コマンドを使うらしいですが、Minikubeで作成された仮想マシンのデフォルトのOSであるbuildrootには、『file』コマンドが無いみたい。
viエディタは入っているようです。(結果が分かりにくい。見つからない場合は、not foundとか表示して欲しい...)
試してみたら、コマンドプロンプトの表示がカオス過ぎて何も分からず...
⇧ 一応、『:q!』でviエディタの終了はできたので、ファイルを開けたのだと思うけど、意味不明の表示過ぎて、余計に謎が残りましたと...。
おそらく、buildrootのシステムが何か関係してるんですかね?
Tera Termでファイルをダウンロード
ちょっと、現状の仮想マシン側の環境ではどうしようもなさそうなので、Windows側にファイルをダウンロードしてみたいと思います。
仮想マシン内で、『ifconfig』コマンドが使えたので、Windowsのホスト側からの接続先のIPアドレスを確認。
自分の場合は、「eth1」の「192.168.99.100」が接続先です。
Tera Termを起動して(Tera Termをインストールしてない場合は、インストールします。Tera Termじゃなくても、ファイル転送できそうなツールであれば何でも良いかと。)、
確認したIPアドレスを、「ホスト(T):」に入力し、「OK」をクリック。
接続時には、「セキュリティ警告」が出ますが、「続行(C)」をクリック。
Minikubeの仮想マシンにsshログインするための「ユーザー名」、「パスワード」を、「ユーザ名(N):」、「パスフレーズ(P):」に入力し、「OK」。
(Minikubeのデフォルトの設定では、「docker」、「tcuser」でいけるはずです。)
ssh接続に成功すると、ログイン画面が表示されます。
で、残念なことに、Tera Termで接続したユーザーが、root(スーパーユーザー)ではないので、仮想マシン側のroot権限のファイルは軒並みにダウンロードできません。
「ファイル(F)」>「SSH SCP...」を試してみると、
「Receive」側の「From:」に仮想マシン側のファイルのパス、「To:」にWindows側で配置したい場所のパスを指定。「Receive」をクリック。
はい、出ました!権限がありませんと。
仮想マシン側で、ファイルをローカルなユーザーの権限が有効な場所にコピーします。その際、「cp」コマンドでエラーが起きたました。
⇧ 上記サイト様によりますと、「tar」コマンドならいけるかもと。
⇧ 上記サイト様にありますように、「tar」コマンドで試してみました。
sudo tar cO repositories.js /var/lib/docker/image/overlay2/ | tar xvf - -C .
⇧ エラー出てますな。
ファイルの指定をやめたら、エラーは出なくなりました。(「/var/lib/docker/image/overlay2/」のように、先頭に「/」付けないと上手くいかないかも。)
sudo tar cO var/lib/docker/image/overlay2/ | tar xvf - -C .
なんか、「/var/lib/docker/image/overlay2/」 配下のディレクトリ、ファイルが「home/docker/」配下に全部コピーされたっぽいですね...。
「home/docker/」配下にコピーされた「var」は権限が、「docker」になってるので、Tera Termでダウンロードできそうです。
Tera Term側で、
はい、エラー。ファイルのみしか駄目ということらしい。
⇧ 上記サイト様によりますと、ディレクトリごとダウンロードするには、SCPコマンドで、「-r」オプションを付けるしかなさそうです。
もしくは、
⇧ 上記サイト様のように、リモートホスト側(ここでは、仮想マシンのこと)で、フォルダをzip化すれば、Tera TermのGUI上のSCP機能で行けるようです。
buildrootには、zipコマンドが入っていませんでした...組み込み系の人は本当に限られたリソースで闘わないといけないんですね。
なので、Tera Termのターミナルで、コマンドを実行。
scp -r [ユーザ名]@[リモートのホスト名]:[コピーしたいリモートのファイル] [ローカルのコピー先]
結果は...
残念...ファイルは作られたけど、0KB。
この後、いろいろ調査するもなかなか良い方法が見つからず。時間の関係上、翌日へ。
で、翌日。まずは、仮想マシンを起動。
まだ使わないけど、Docker damoneも準備しておきます。
そして、移動しておいた「var」ディレクトリが、消えとる...。
⇧ よく分かりませんが、仮想マシンを停止すると、リセットされるってことですかね?そんな、バハマ!
致し方ないので、
⇧ 「/var/lib/docker/image/overlay2/」を、また、「/home/docker/」 にコピーしますか。前は、「var/lib/docker/image/overlay2/」で行けたんですが、「/var/lib/docker/image/overlay2/」のように、先頭に「/」付けないと駄目っぽい。
コピーできました。
そんでは、Tera Termで、数々の失敗の上に、最終的なのは、これ。
scp -r docker@192.168.99.100:/home/docker/var /c/Users/Toshinobu/.minikube/machines/minikube/minikube/
コピーできました!
ちなみに、Tera Termでは、マクロも使えて、Tera Termのマクロは、拡張子が「.ttl」のものらしいです。
⇧ 上記サイト様が詳しいです。
で、コピーしてきた
「"C¥Users¥Toshinobu¥.minikube¥machines¥minikube¥minikube¥var¥lib¥docker¥image¥overlay2¥repositories.json"」を見てみると、
{ "Repositories":{ "centos":{ "centos:5":"sha256:1ae98b2c895d1ceeba8913ff79f422f005b7f967a311da520a88ac89180b4c39", "centos:5.11":"sha256:b424fba01172292ee3b8b5dad6c6618b066e9196ecfaa8cf30baf11dfe530ff9", "centos:6":"sha256:70b5d81549ec19aa0a10f8660ba5e1ab9966008dbb1b6c5af3d0ecc8cff88eef", "centos:6.6":"sha256:3d7ac13b921a506e2e985f56542903c00dd1aa35a530fffa46f9a89786219b49", "centos:6.7":"sha256:000c5746fa523e3e4150a91909ef6236ff4c063f0b1e5c8c2acedf5982175284", "centos:6.8":"sha256:6704d778b3ba4fe03d49a26c92b5fe58d6212877c30cf7f58d47060f30ce3ee9", "centos:6.9":"sha256:fca4c61d0fa79b166147cb5553d43c0c3a52989c07a82451d80207799b4d23f9", "centos:7":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos:7.0.1406":"sha256:284549eacf844851fd544d8b39c109f9804a6afa41e9ad767a25366f271f99a3", "centos:7.1.1503":"sha256:fbe8925ecf55b55d4247453d7d28c79b3b4943792d890f2d889b5a38bb753028", "centos:7.2.1511":"sha256:0a2bad7da9b55f3121f0829de061f002ef059717fc2ed23c135443081200000e", "centos:7.3.1611":"sha256:66ee80d59a68047e6eac9fc10cbe698f15bd369bd8bbd512857bdd65cdecf601", "centos:7.4.1708":"sha256:3afd47092a0ef2877da88b5dad059a0a86ac6d64bead3d4b95b6ff0583cf1239", "centos:7.5.1804":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos:centos5":"sha256:1ae98b2c895d1ceeba8913ff79f422f005b7f967a311da520a88ac89180b4c39", "centos:centos5.11":"sha256:b424fba01172292ee3b8b5dad6c6618b066e9196ecfaa8cf30baf11dfe530ff9", "centos:centos6":"sha256:70b5d81549ec19aa0a10f8660ba5e1ab9966008dbb1b6c5af3d0ecc8cff88eef", "centos:centos6.6":"sha256:3d7ac13b921a506e2e985f56542903c00dd1aa35a530fffa46f9a89786219b49", "centos:centos6.7":"sha256:000c5746fa523e3e4150a91909ef6236ff4c063f0b1e5c8c2acedf5982175284", "centos:centos6.8":"sha256:6704d778b3ba4fe03d49a26c92b5fe58d6212877c30cf7f58d47060f30ce3ee9", "centos:centos6.9":"sha256:fca4c61d0fa79b166147cb5553d43c0c3a52989c07a82451d80207799b4d23f9", "centos:centos7":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos:centos7.0.1406":"sha256:284549eacf844851fd544d8b39c109f9804a6afa41e9ad767a25366f271f99a3", "centos:centos7.1.1503":"sha256:fbe8925ecf55b55d4247453d7d28c79b3b4943792d890f2d889b5a38bb753028", "centos:centos7.2.1511":"sha256:0a2bad7da9b55f3121f0829de061f002ef059717fc2ed23c135443081200000e", "centos:centos7.3.1611":"sha256:66ee80d59a68047e6eac9fc10cbe698f15bd369bd8bbd512857bdd65cdecf601", "centos:centos7.4.1708":"sha256:3afd47092a0ef2877da88b5dad059a0a86ac6d64bead3d4b95b6ff0583cf1239", "centos:centos7.5.1804":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos:latest":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos@sha256:147bb07a3a271ae84d53fbf7f619b00929c332845e389b7423f15d618236acd1":"sha256:6704d778b3ba4fe03d49a26c92b5fe58d6212877c30cf7f58d47060f30ce3ee9", "centos@sha256:2a61f8abd6250751c4b1dd3384a2bdd8f87e0e60d11c064b8a90e2e552fee2d7":"sha256:3afd47092a0ef2877da88b5dad059a0a86ac6d64bead3d4b95b6ff0583cf1239", "centos@sha256:507adc79cd945e1a36cf082e1782e60f80f4738590bc6ad0ecd6b64c4df78bf6":"sha256:66ee80d59a68047e6eac9fc10cbe698f15bd369bd8bbd512857bdd65cdecf601", "centos@sha256:5cf988fbf143af398f879bd626ee677da3f8d229049b7210790928a02613ab26":"sha256:fca4c61d0fa79b166147cb5553d43c0c3a52989c07a82451d80207799b4d23f9", "centos@sha256:70fffd687ff9545662c30f9043108489c698662861cd5f76070f7e2cd350564f":"sha256:1ae98b2c895d1ceeba8913ff79f422f005b7f967a311da520a88ac89180b4c39", "centos@sha256:7248c96de4648749c7936f203d983530e7ebdd83c3db6d47278392f18bcd7baf":"sha256:000c5746fa523e3e4150a91909ef6236ff4c063f0b1e5c8c2acedf5982175284", "centos@sha256:7c47810fd05ba380bd607a1ece3b4ad7e67f5906b1b981291987918cb22f6d4d":"sha256:0a2bad7da9b55f3121f0829de061f002ef059717fc2ed23c135443081200000e", "centos@sha256:91236f16c37dc70e7ae88a7f0c849041da5d500212337600dcda8878da21326e":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos@sha256:971669f975ea13bba21ad975992dac10f55f45ea6c557f6459e57b5b7f4d48cd":"sha256:fbe8925ecf55b55d4247453d7d28c79b3b4943792d890f2d889b5a38bb753028", "centos@sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322":"sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5", "centos@sha256:ba9fbbcf6e957b480c6721f0e2abced5082b690d87342a7efd95df6f662c2c2d":"sha256:3d7ac13b921a506e2e985f56542903c00dd1aa35a530fffa46f9a89786219b49", "centos@sha256:bac053540cfdc5c034191d2f20207dc83f5336bca0bcdbb9d9a58a64ed30d4f3":"sha256:70b5d81549ec19aa0a10f8660ba5e1ab9966008dbb1b6c5af3d0ecc8cff88eef", "centos@sha256:c3f0576cc915592e01e44cf4ae795dbefc1a7bad0d1c07677cdc59289230403c":"sha256:284549eacf844851fd544d8b39c109f9804a6afa41e9ad767a25366f271f99a3", "centos@sha256:c40041f5894293d0df8f5c6c2049b92a82c53f1718ecdd73cbf3c1826a08ba4a":"sha256:b424fba01172292ee3b8b5dad6c6618b066e9196ecfaa8cf30baf11dfe530ff9" }, "centos_java":{ "centos_java:10":"sha256:59217fdd8bac2b95c3166e7077876a0d080ceefeeec93a43c79d4abb57eaea3c" }, "gcr.io/k8s-minikube/storage-provisioner":{ "gcr.io/k8s-minikube/storage-provisioner:v1.8.1":"sha256:4689081edb103a9e8174bf23a255bfbe0b2d9ed82edc907abab6989d1c60f02c", "gcr.io/k8s-minikube/storage-provisioner@sha256:088daa9fcbccf04c3f415d77d5a6360d2803922190b675cb7fc88a9d2d91985a":"sha256:4689081edb103a9e8174bf23a255bfbe0b2d9ed82edc907abab6989d1c60f02c" }, "k8s.gcr.io/etcd-amd64":{ "k8s.gcr.io/etcd-amd64:3.1.12":"sha256:52920ad46f5bf730d0e35e11215ec12d04ca5f32835f2ceb8093d0bd38930735", "k8s.gcr.io/etcd-amd64@sha256:68235934469f3bc58917bcf7018bf0d3b72129e6303b0bef28186d96b2259317":"sha256:52920ad46f5bf730d0e35e11215ec12d04ca5f32835f2ceb8093d0bd38930735" }, "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64":{ "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8":"sha256:c2ce1ffb51ed60c54057f53b8756231f5b4b792ce04113c6755339a1beb25943", "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:93c827f018cf3322f1ff2aa80324a0306048b0a69bc274e423071fb0d2d29d8b":"sha256:c2ce1ffb51ed60c54057f53b8756231f5b4b792ce04113c6755339a1beb25943" }, "k8s.gcr.io/k8s-dns-kube-dns-amd64":{ "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8":"sha256:80cc5ea4b547abe174d7550b82825ace40769e977cde90495df3427b3a0f4e75", "k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:6d8e0da4fb46e9ea2034a3f4cab0e095618a2ead78720c12e791342738e5f85d":"sha256:80cc5ea4b547abe174d7550b82825ace40769e977cde90495df3427b3a0f4e75" }, "k8s.gcr.io/k8s-dns-sidecar-amd64":{ "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8":"sha256:6f7f2dc7fab5d7e7f99dc4ac176683a981a9ff911d643b9f29ffa146838deda3", "k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:23df717980b4aa08d2da6c4cfa327f1b730d92ec9cf740959d2d5911830d82fb":"sha256:6f7f2dc7fab5d7e7f99dc4ac176683a981a9ff911d643b9f29ffa146838deda3" }, "k8s.gcr.io/kube-addon-manager":{ "k8s.gcr.io/kube-addon-manager:v8.6":"sha256:9c16409588eb19394b90703bdb5bcfb7c08fe75308a5db30b95ca8f6bd6bdc85", "k8s.gcr.io/kube-addon-manager@sha256:3519273916ba45cfc9b318448d4629819cb5fbccbb0822cce054dd8c1f68cb60":"sha256:9c16409588eb19394b90703bdb5bcfb7c08fe75308a5db30b95ca8f6bd6bdc85" }, "k8s.gcr.io/kube-apiserver-amd64":{ "k8s.gcr.io/kube-apiserver-amd64:v1.10.0":"sha256:af20925d51a37fbdaa1cae637dbfe922760ee4ed0d576b06e6003dec38c4d254", "k8s.gcr.io/kube-apiserver-amd64@sha256:8b7a675c6fdda0469e971e5b1f3e902bb71c36396faf506f1511052705a5b0ee":"sha256:af20925d51a37fbdaa1cae637dbfe922760ee4ed0d576b06e6003dec38c4d254" }, "k8s.gcr.io/kube-controller-manager-amd64":{ "k8s.gcr.io/kube-controller-manager-amd64:v1.10.0":"sha256:ad86dbed155598c3529b35f76ab21e47e2319390d261560b069ae3b859023679", "k8s.gcr.io/kube-controller-manager-amd64@sha256:ab637b1f4700e0cc83d3ae3c5368919eb8f6199485adcc126fd306481df56fec":"sha256:ad86dbed155598c3529b35f76ab21e47e2319390d261560b069ae3b859023679" },"k8s.gcr.io/kube-proxy-amd64":{ "k8s.gcr.io/kube-proxy-amd64:v1.10.0":"sha256:bfc21aadc7d3e20e34cec769d697f93543938e9151c653591861ec5f2429676b", "k8s.gcr.io/kube-proxy-amd64@sha256:fc944b06c14cb442916045a630d5e374dfb9c453dfc56d3cb59ac21ea4268875":"sha256:bfc21aadc7d3e20e34cec769d697f93543938e9151c653591861ec5f2429676b" }, "k8s.gcr.io/kube-scheduler-amd64":{ "k8s.gcr.io/kube-scheduler-amd64:v1.10.0":"sha256:704ba848e69a76e2a8886c64d70971c9db1398ee4d02cbccf61572b1237b545a", "k8s.gcr.io/kube-scheduler-amd64@sha256:4670717a1c092680dc0ac018dc36f991e06ffbee6b6bafba9a2968d7bebe7800":"sha256:704ba848e69a76e2a8886c64d70971c9db1398ee4d02cbccf61572b1237b545a" }, "k8s.gcr.io/kubernetes-dashboard-amd64":{ "k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.1":"sha256:e94d2f21bc0c297cb74c1dfdd23e2eace013f532c60726601af67984d97f718a", "k8s.gcr.io/kubernetes-dashboard-amd64@sha256:3861695e962972965a4c611bcabc2032f885d8cbdb0bccc9bf513ef16335fe33":"sha256:e94d2f21bc0c297cb74c1dfdd23e2eace013f532c60726601af67984d97f718a" }, "k8s.gcr.io/pause-amd64":{ "k8s.gcr.io/pause-amd64:3.1":"sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e", "k8s.gcr.io/pause-amd64@sha256:59eec8837a4d942cc19a52b8c09ea75121acc38114a2c68b98983ce9356b8610":"sha256:da86e6ba6ca197bf6bc5e9d900febd906b133eaa4750e6bed647b0fbe50ed43e" } } }
こんな感じの構成になっています。(ファイルの中身は、1行になっていたので、構成が分かりやすいように整えています。)
自分で作った、Dockerのコンテナimageも登録されています。
"centos_java":{ "centos_java:10":"sha256:59217fdd8bac2b95c3166e7077876a0d080ceefeeec93a43c79d4abb57eaea3c" }
「metadata」フォルダの中で、「59217fdd8bac2b95c3166e7077876a0d080ceefeeec93a43c79d4abb57eaea3c」があるか探してみたところ、
「C¥Users¥Toshinobu¥.minikube¥machines¥minikube¥minikube¥var¥lib¥docker¥image¥overlay2¥imagedb¥metadata¥sha256¥59217fdd8bac2b95c3166e7077876a0d080ceefeeec93a43c79d4abb57eaea3c」
の中の、「parent」フォルダを開いてみると、
sha256:c1304aa1f3e1a2ef61c39ae65d262ec97ddb8d9efdfe0c9952596d2104eed2f6
1行だけ...。
「content」フォルダの中に、「c1304aa1f3e1a2ef61c39ae65d262ec97ddb8d9efdfe0c9952596d2104eed2f6」ファイルがいるかというと、
「C:¥Users¥Toshinobu¥.minikube¥machines¥minikube¥minikube¥var¥lib¥docker¥image¥overlay2¥imagedb¥content¥sha256¥c1304aa1f3e1a2ef61c39ae65d262ec97ddb8d9efdfe0c9952596d2104eed2f6」 がおりました。
で、こやつの中身を見てみると、
{ "architecture":"amd64", "config":{ "Hostname":"", "Domainname":"", "User":"", "AttachStdin":false, "AttachStdout":false, "AttachStderr":false, "Tty":false, "OpenStdin":false, "StdinOnce":false, "Env":[ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "JAVA_HOME=/usr/java/default" ], "Cmd":[ "/bin/bash" ], "ArgsEscaped":true, "Image":"sha256:2fa4f3143dcd892a66255a506ad1983bb61edab6b53ffae9f7104a1953c398f0", "Volumes":null, "WorkingDir":"", "Entrypoint":null, "OnBuild":null, "Labels":{ "org.label-schema.schema-version":"= 1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180531" } }, "container":"6f105891b655ff1a310e48258d0a46d0d5fedcc571b333203e8cb77acd40aa0a", "container_config":{ "Hostname":"", "Domainname":"", "User":"", "AttachStdin":false, "AttachStdout":false, "AttachStderr":false, "Tty":false, "OpenStdin":false, "StdinOnce":false, "Env":[ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "JAVA_HOME=/usr/java/default" ], "Cmd":[ "|4", "jdk_build_no=13", "jdk_hash_value=19aef61b38124481863b1413dce1855f", "jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm", "jdk_version=10.0.2", "/bin/sh", "-c", "wget -q --no-check-certificate --no-cookies --header \"Cookie: oraclelicense=accept-securebackup-cookie\" http://download.oracle.com/otn-pub/java/jdk/${jdk_version}+${jdk_build_no}/${jdk_hash_value}/${jdk_rpm} \u0026\u0026 rpm -ivh ${jdk_rpm}" ], "ArgsEscaped":true, "Image":"sha256:2fa4f3143dcd892a66255a506ad1983bb61edab6b53ffae9f7104a1953c398f0", "Volumes":null, "WorkingDir":"", "Entrypoint":null, "OnBuild":null, "Labels":{ "org.label-schema.schema-version":"= 1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180531" } }, "created":"2018-07-30T14:49:16.173713689Z", "docker_version":"17.12.1-ce", "history":[ { "created":"2018-06-04T22:19:33.891094528Z", "created_by":"/bin/sh -c #(nop) ADD file:8f4b3be0c1427b158f7c30bad27af0d1bded0af60935cf8f0789286439ebdde9 in / " }, { "created":"2018-06-04T22:19:34.279917524Z", "created_by":"/bin/sh -c #(nop) LABEL org.label-schema.schema-version== 1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180531", "empty_layer":true }, { "created":"2018-06-04T22:19:34.475342266Z", "created_by":"/bin/sh -c #(nop) CMD [\"/bin/bash\"]", "empty_layer":true},{"created":"2018-07-30T13:13:26.004649839Z", "created_by":"/bin/sh -c #(nop) ARG jdk_version=10.0.2", "empty_layer":true},{"created":"2018-07-30T13:13:26.088001451Z", "created_by":"/bin/sh -c #(nop) ARG jdk_build_no=13", "empty_layer":true},{"created":"2018-07-30T13:13:26.166712602Z", "created_by":"/bin/sh -c #(nop) ARG jdk_hash_value=19aef61b38124481863b1413dce1855f", "empty_layer":true},{"created":"2018-07-30T13:13:26.238875218Z", "created_by":"/bin/sh -c #(nop) ARG jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm", "empty_layer":true},{"created":"2018-07-30T13:13:26.321041844Z", "created_by":"/bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/default", "empty_layer":true},{"created":"2018-07-30T14:26:06.302533059Z", "created_by":"|4 jdk_build_no=13 jdk_hash_value=19aef61b38124481863b1413dce1855f jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm jdk_version=10.0.2 /bin/sh -c yum clean all" }, { "created":"2018-07-30T14:26:33.65593121Z", "created_by":"|4 jdk_build_no=13 jdk_hash_value=19aef61b38124481863b1413dce1855f jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm jdk_version=10.0.2 /bin/sh -c yum -y update" }, { "created":"2018-07-30T14:26:34.571524616Z", "created_by":"|4 jdk_build_no=13 jdk_hash_value=19aef61b38124481863b1413dce1855f jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm jdk_version=10.0.2 /bin/sh -c rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" }, { "created":"2018-07-30T14:26:39.440427589Z", "created_by":"|4 jdk_build_no=13 jdk_hash_value=19aef61b38124481863b1413dce1855f jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm jdk_version=10.0.2 /bin/sh -c yum -y install wget" }, { "created":"2018-07-30T14:49:16.173713689Z", "created_by":"|4 jdk_build_no=13 jdk_hash_value=19aef61b38124481863b1413dce1855f jdk_rpm=jdk-10.0.2_linux-x64_bin.rpm jdk_version=10.0.2 /bin/sh -c wget -q --no-check-certificate --no-cookies --header \"Cookie: oraclelicense=accept-securebackup-cookie\" http://download.oracle.com/otn-pub/java/jdk/${jdk_version}+${jdk_build_no}/${jdk_hash_value}/${jdk_rpm} \u0026\u0026 rpm -ivh ${jdk_rpm}" } ], "os":"linux", "rootfs":{ "type":"layers", "diff_ids":[ "sha256:bcc97fbfc9e1a709f0eb78c1da59caeb65f43dc32cd5deeb12b8c1784e5b8237", "sha256:85aa6cbb16de619231987ae356cd128b31d1d940012e1e1b0e787af1a2799565", "sha256:989cd77090b3443cbfa5edcb2cd2878d63c12c225efb803a21d60e283b09dfab", "sha256:ad230b8cc1bed6a35ff7d02700c9d36f6e6fc7e322eb77488e756955563d56b4", "sha256:1f2b31db1097eb873f7287385121580ec2f214107eb52a9453e064cdb1b33d20", "sha256:fb2705c3eb2c76f877ae4be1f88bec1d5e3d15aa30cd813d0c6b2580451d1188" ] } }
となっていました。
Minikubeの内蔵Dockerで、コンテナimageは、「metadata」「content」の組み合わせで保存されてる感じですかね?
コンテナimageを実行して、コンテナ化アプリケーションをデプロイするときは、「metadata」の情報に基づく、「content」のファイルが実行されていくイメージですかね?
kubectl runコマンドで、コンテナimageからコンテナ化アプリケーションをデプロイ
たいへん長い脱線の果てに、コンテナimageが 何となく保存されてる感が朧気ながらイメージできたところで、いよいよ、「kubectl run」コマンドで、コンテナimageからコンテナ化アプリケーションをデプロイしてみたいと思います。
「docker images」コマンドでコンテナimageを確認。
では、
kubectl run <DEPLOYMENT NAME/POD NAME PREFIX> --image=<IMAGE>:<TAG> <CMD>
⇧ はい、怒られる。<DEPLOYMENT NAME/POD NAME PREFIX>には、「_」は使えない ってことですかね。
今度は、成功っぽい。
で、ダッシュボードに行ってみる。(ブラウザに飛びます。)
minikube dashboard
確かに、いろいろ作成はされてるけど、動いとらんやんけ~。っていうか、バージョン変わって設定とか変わったんですかね?そもそも、MinikubeのKubernetes が、どの設定ファイルを使ってるか謎ですが。
⇧ 上記サイト様を参考に、podの状態をチェック。
「CrashLoopBackOff」らしい。
コンテナ内のプロセスの終了を検知してコンテナの再起動を繰り返している。
Minikubeは、シングルノードなので、
yamlファイルの設定で、「restartPolicy: OnFailure」 にすれば良いらしい。
ただ、yamlファイルらしきものが、どこにあるか分からんし、作るにしてもどこに配置すれば良いかの情報が見つからず。
今回は、「kubectl run」のオプションで試してみることに。
kubectl run java-10-0-2 --image=centos_java:10 --restart=OnFailure
新しく、作成された「Pod」は動いたみたいですが、相変わらず、「Deployment」「Replica Sets」は動く気配なし。
「Pod」の情報。新しく増えてるけど、旧いほうは、駄目っすね...。
「Deployment」の情報。分からん...。
「Replicaset」の情報。分からん...。
原因が分からず...
⇧ 上記サイト様によりますと、「kubectl describe」コマンドで、「イベントログ」が見れるらしい。
■ Deploymentのイベントログ
kubectl describe deployment [デプロイメント名]
■ Replicasetのイベントログ
kubectl describe replicaset [レプリカセット名]
■ Podのイベントログ
kubectl describe replicaset [ポッド名]
まぁ、何ちゅうか、本中華?
いや~、全然、見方が分からないんですが...。
とりあえず、今回は、ここまでということで、仮想マシンを停止。
2018年8月9日(木)追記: ↓ ここから
もし、Kubernetesの環境に異常が起きた時、アプリケーションとかどうなってしまうのか?
そこで、Kubernetes 環境が落ちても復帰できるような仕組みがあるようです。
⇧ 上記サイト様の図が分かりやすいですが、要は、Kubernetes 環境の外側に、コンテナ化アプリケーションの情報を保存するためのファイル・ストレージを用意しておこうということらしいです。
上記サイト様は、クラウド環境を使ってらっしゃる感じですかね。
ローカル環境でのKubernetes 環境はどうすれば?
⇧ おそらく、「Volume」「PersistentVolume」「PersistentVolumeClaim」のいずれかで実現できる感じですかね?
Volumeは既存のボリューム(ホストの領域、NFS、Ceph、GCP Volume)などをYAML Manifestに直接指定することで利用可能にするものです。そのため、利用者が新規でボリュームを作成したり、既存のボリュームを削除したりといった操作を行うことはできません。また、YAML ManifestからVolumeリソースを作成するといった処理も行いません。
PersistentVolumeは、外部の永続ボリュームを提供するシステムと連携して、新規のボリュームの作成や、既存のボリュームの削除などを行うことが可能です。具体的には、YAML ManifestなどからPersistent Volumeリソースを別途作成する形になります。
PersistentVolumeClaimは、その名のとおり作成されたPersistentVolumeリソースの中からアサインするためのリソースになります。Persistent Volumeはクラスタにボリュームを登録するだけなので、実際にPodから利用するにはPersistent Volume Claimを定義して利用する必要があります。
⇧ この中で、コンテナの永続化ができるのは、「PersistentVolume」「PersistentVolumeClaim」の組み合わせとなっていそうです。
まぁ、普通に考えて、こういう仕組みがなかったら、本番環境でまったく使い物にならんでしょうですしね。
2018年8月9日(木)追記: ↑ ここまで
2018年8月24日(金)追記: ↓ ここから
デプロイの失敗の理由が分かりました。どうやら、Dockerの仕様が関係してそうな感じですかね。
⇧ 上記サイト様によりますと、正常・異常に関わらず、コンテナが停止すると、再起動され、停止、再起動...って繰り返されるためにクラッシュするんだとか。
なので、停止しないように無限ループで回避すれば上手くいくそうな。
Deploymentでの実装は無理そうですかね...。
2018年8月24日(金)追記: ↑ ここまで
ちょっと、暑さと、Kubereneteが分からなさ過ぎて疲れ切ったので、解決できてなくて申し訳ないのですが、次回に持ち越しとさせて下さい。
今回は、このへんで。
番外編
ローカルで作成するコンテナimageには、タグを付ける必要があったようです。
⇧ 上記サイト様が詳しいです。
自分が作ったコンテナimageは、「centos_java」となってしまっているので、「centos_java:<タグ>」というような名前で、コンテナimageを作る必要があるようです。
そして、新しくコマンドプロンプトを開くと、docker damoneが動いてないって言われてしまうので、
docker damoneとやり取りできるようにして、
Dockerfileのあるディレクトリまで移動して、
コンテナimageの再作成。
⇧ 警告が...しかもセキュリティ警告。
「Windows以外のDockerホストに対してWindowsからDockerイメージを作成しています。コンテキストを構築するために追加されたすべてのファイルとディレクトリは、 '-rwxr-xr-x'権限を持ちます。機密ファイルとディレクトリのアクセス権を再確認して再設定することをお勧めします。」
って...Minikubeの仕様上、WindowsからDockerイメージを作って良いんでしょう...もう知らん。
で、docker images。
おんや?前に作ってたDockerのコンテナimageにもタグがついっとったね...
という、暑さで脳もダメージを受けての、勘違いでした。