‫では､ 実際にレジストリを開始します｡ せっかくだから､ 実際に何かやってみよう｡
‫レジストリは､ 実はこれまで説明してきたような単なるHTTPSサーバなのです｡
‫デフォルトでは5000番ポートで実行されます｡
‫これから起動し､ Docker Hubから取得した既存のイメージに再タグ付けを行います｡
‫そうやって実際にレジストリの場所を変える､
‫どのレジストリを使うかではなく､ 実際に既存の画像にタグを付け直すのです｡ そして､ その画像をローカルキャッシュから削除し､
‫レジストリにプッシュした後､ レジストリからプルダウンします｡
‫そして､
‫実際にレジストリを停止して再作成し､ ストレージを変更する方法を紹介します｡
‫今回はローカルストレージを使用しますが､ ストレージのオプションはたくさんあるので､
‫それについて説明します｡ レジストリとTLSを好むことについて､
‫本当に簡単にメモしておきたいと思います｡ Dockerは､ 適切なHTTPSセキュリティが実行されていないレジストリとは通信しません｡
‫そうだろ？
‫認証が暗号化されていること､ そして渡されたものがすべて信頼できるものであることを確認したいのです｡
‫そこで､ 私たちはこれをSecure by Defaultと呼んでいます｡
‫そうだろ？ 皆さんも一度は耳にしたことがあるのではないでしょうか｡ レジストリをローカルホストで作成しない限り､
‫作成するレジストリとは対話しません｡
‫このように､ ローカルのホストで実行するだけでいいのです｡
‫だから､ 簡単なんです｡
‫他のウェブサイトと同様､ レジストリにはTLSが組み込まれていないため､ 箱から出してテストするだけなら､
‫TLSを気にする必要はないのです｡
‫通常､ 自分で証明書を作成する必要があります｡
‫しかし､ レジストリに自己署名証明書を使用する場合､ あるいはTLSなしでリモートで実行する場合､
‫私はそれを推奨しませんが､ 必要な場合には､
‫実際にエンジンで有効にする必要があるinsecure-registryオプションが存在します｡
‫ここでは､ それをカバーするつもりはありません｡
‫しかし､ 実稼働環境において､ 自己署名証明書が必要な場合は､ それを有効にする必要があることを知っておいてください｡
‫Dockerからは､
‫「このレジストリは信用できないので､ 会話できません」というエラーが返ってくるでしょう｡ "みたいなことを､
‫やろうとすると｡
‫今日は､ ポート5000の通常のHTTPで実行するだけです｡
‫ローカルマシンに戻って､ docker container run -d -p 5000を実行すると､ コンテナのデフォルトが5000になるので､
‫これをレジストリと呼ぶことにします｡ それから､ イメージレジストリを使用しています｡
‫ドッカーコンテナのlsをすると､ 起動していることがわかります｡ それを使うために､ 実はタグを使っているのです｡
‫Docker Hubで作成したイメージでは､ アカウント名とリポジトリ名という形式で配置する必要がありましたが､ これはDocker
‫Hubのためのものです｡ その他のレジストリについては､ 実際には､
‫そこにホストも含めてラベル付けする必要があります｡
‫実はhello-worldというのを引っ張ってくるんですよ､ 小さくていいから｡ これを実行すると､ コンテナが実行されたことを確認するテキストが出力されます｡
‫この小さな例にぴったりです｡ ローカルレジストリにプッシュするために必要なことは､ デーモンにそれを送信する必要があることを伝える別のタグを与えることです｡
‫docker tagを使って､ タグ付けする画像と､ タグ付けする先を決めています｡
‫だから127｡ 0. 0. 1:5000､ ポートを入れてからhello-worldにしないといけないんです｡
‫これは､ 自分のローカルレジストリのルートに自分のオフィシャルイメージを作るのと同じことだ｡
‫docker image lsを実行すると､ このhello-worldには2つのタグがありますが､ 別のタグを付けただけなので､ 同じイメージIDになっています｡
‫しかし､ Docker Pushを行うと､ 実際にはDocker Hubにプッシュされず､ そこにIPとポートがあることがわかり､
‫私のローカルレジストリにプッシュされることになるのです｡
‫それでは､ ローカルコピーを削除してみましょう｡
‫OKです｡
‫ああ｡ そうですね｡
‫画像を削除できないのは､ まずそのコンテナを取り除かなければならないからです｡
‫docker container rmで､ これがhello-worldを実行したコンテナです｡
‫これでイメージを削除できます｡
‫これでよしとしよう｡
‫OK､ では今､ docker image lsを実行すると､ それがないことが確認できますね｡ そんなイメージはないですね｡
‫これで､ その同じ場所からdocker pullができるようになりました｡
‫これでよしとしよう｡
‫その画像を下に引きます｡
‫まず､ 自分の都合でレジストリを運用するのであれば､ データを保存するためのボリュームを利用することが第一です｡
‫この場合､ レジストリを削除して､ ボリュームを使えば同じことができるのです｡
‫registry-sample-1というディレクトリにいたら､ docker container kill registry､
‫docker container rm registryとやってみましょう｡
‫わかりました｡
‫というわけで､ レジストリ・コンテナをクリーンアップしました｡ もう一度作ってみましょう docker container run d port 5000,
‫もう一度registryを呼び出します｡ 今回はボリュームを指定し､ pwdトリックで現在の作業ディレクトリを指定し､
‫ここにレジストリデータのサブディレクトリを作成します｡
‫これは､ var lib registryに行く必要があります｡
‫最後はレジストリのイメージを使っているところです｡
‫これは技術的には､ 新しいデータベースを持つ新しいレジストリです｡
‫レジストリデータのillをやってもまだ何もないんですが､ さっきの画像を引き戻してみると､
‫まだhello-worldがあることが分かります｡
‫もう一度docker pushをすれば､ すぐにそこにプッシュされるはずです｡
‫さて､ illでレジストリデータディレクトリを実行すると､ そこにいくつかの情報が表示されます｡ あなたのOSにはないかもしれないけれど､ 実は実行しなくてもいいツリーコマンドを実行しただけです｡
‫これはLinuxの一般的なツールで､
‫ここにあるすべての異なるパスを表示してくれるんだ｡ データ（ブロブ）と呼ばれる画像内のバイナリ､
‫そしてメタデータ（マニフェスト､ タグなど）に分解されることがおわかりいただけると思います｡
‫このように､
‫複数のレイヤーで構成されているため､ すべてがそれぞれのSHAディレクトリに収められています｡
‫私たちがそこを掘り返しても特に意味はないのですが､ 見ていて面白いですから｡
‫それでは､ どうぞ｡
‫以上が､ ローカルマシンでのレジストリの運用の基本です｡
‫そして次に､ TLSで保護し､ 認証を有効にする必要があります｡
‫わかりました｡ 以上が､ Dockerレジストリの運用の基本です｡
‫この講義で実行した主なコマンドを紹介します｡ 書き留めたいことがあれば､ ここで一旦中断し､
‫自分のものが正しいかどうか確認するとよいでしょう｡
‫さて､ 今回の講義が終わったら､ 次の講義で新たなスタートを切るために､ 後片付けを忘れないようにしましょう｡