前回はHarborの構築を行いました。
今回はHarborにログインしてイメージのプッシュを行いたいと思います。
まずはGUIからログインしてみましょう。
ちなみに、adminの初期パスワードは harbor.yml に記載があります。
ログインしてみると「library」というプロジェクトが1つだけある状態です。
「library」をクリックしてみると、当然ながら何もありません。
今回は、ここにイメージを追加する作業を行うのですがその前に1つやっておきたいことがあります。
今回は前回構築したHarbor用のサーバーからイメージのアップロードを行うのでこの作業を必要としませんが、他のマシンからイメージをアップロードしようとする場合に証明書が必要となりますのでその証明書をダウンロードできるリンクを用意します。
実は、設定してあるとこの画面に表示されるのです。
何をするかというと、Harborのサーバーに「/data/ca_download/」に証明書を置いてあげるのです。
証明書関係のファイルはいっぱいありますが、拡張子が ca.crt となっているものがそうなります。
前回構築した環境ですと、以下のコマンドで配置できます。
# cp /root/CA/ca.crt /data/ca_download/
ブラウザを更新すると「REGISTRY CERTIFICATE」というリンクが出てきます。
これで証明書をGUIからダウンロード可能になりました。
では続いて、一旦GUIからは離れコマンドラインでの操作となります。
docker login コマンドを使用して Harbor へログインします。
# docker login <harborのIPアドレスかFQDN> -u admin -p <パスワード>
CUI のログインができたところで、GUI に戻ります。
先ほどの画面で、「PUSH COMMAND」というリンクがありますのでそちらをクリックします。
Harbor のリポジトリにpushを行うために、TAG を付ける命名規則と push の際のコマンドが表示されます。
これに従ってまずイメージの TAG 付けを行いましょう。
こちらは docker tag コマンドを使用します。
現在ローカルに保存してあるイメージは docker images で表示できるので好きなものを TAG 付けします。
ちなみにこの時、Harbor で使用されているイメージも確認できます。
ここでは CentOS 7 を利用します。
# docker tag centos:7 <HarborのIPアドレスかFQDN>/library/centos:harbor-test
このコマンドは、元となるイメージを指定(centos:7)し、付与するTAGを指定された命名規則に従って<HarborのIPアドレスかFQDN>/<転送するプロジェクト名>/<任意のイメージ名:任意のTAG名>となっています。
それでは push します。
# docker push <harborのIPアドレスかFQDN>/library/centos:harbor-test
ブラウザを更新すると、以下の様に push されたイメージが表示されます。
イメージを確認してみると、「Tags」に先ほどアップロードした tag 情報も確認することができます。
push ができたので pull してみましょう。
「Tags」のとなりに「Pull Command」がありますのでクリックしてコピーしてCUIで実行できますが、実行前にローカルに存在しているイメージを消しておいた方がわかりやすいと思います。
以下のコマンドで削除してみましょう
docker rmi <harborのIPアドレスかFQDN>/library/centos:harbor-test
先ほどコピーしたコマンドを確認すると、@sha256:~~~~ と追加されている部分があると思います。
これはダイジェストというそのイメージに付与された普遍的な識別子です。
これを付けることで、確実にそのイメージをダウンロードすることができるという事ですね。
実際にやってみましょう。
docker pull <harborのIPアドレスかFQDN>/library/centos@sha256:xxxxxx~~~~
ダイジェストを使ってダウンロードしてきたイメージは、tagが付与されていません。
そのため docker tag コマンドを使用して tag を付与することになりますが、イメージの指定にはイメージの名前ではなく「IMAGE ID」を使用します。
docker tag <IMAGE ID> <harborのIPアドレスかFQDN>/library/centos:harbor-test
先ほどまで none だった tag が付与されたと思います。
これで、イメージを検査しプライベートなリポジトリを用意してそこへイメージを push し pull して使うことができるようになりました。
コンテナのセキュリティに関してはこれで一旦終わりとしたいと思います。
読んでくださった方々ありがとうございました。
次は、今まで作ったものを自動で構築とかしてみましょうかね。
以前書いたk8sの構築もdockerではできなくなりましたし、その辺も絡めたりとか。
もしくは、Tanzu製品があれよあれよとたくさん増えて何する製品なのかが分からなくなってきたので、それぞれどういう事を目的とした製品で何ができるのかをまとめた記事を書こうかと考えています。