Rancher + Harbor(プライベートレジストリ)で、簡単Dockerイメージ管理

自社サービスをDockerize しようすると、どうしても考えなければならないのがDockerイメージの管理。パブリックなクラウドサービスを使うと情報管理にリスクがあるし、プライベートなクラウドサービスを使って課金されたくもない。そもそも、クラウドサービス上にDockerイメージを置きたくない…

そういった悩みを解決してくれるのがVMwareのOSSであるHarborです。HarborはDockerコンテナで動くプライベートレジストリであり、オンプレミスやIaaSに簡単に構築することができます。今回はHarborの構築からRancherでのレジストリ設定までを紹介します。

 

今回は、次の構成で設定を行います。

レジストリドメイン example.com
レジストリ名 nttpc_registry01
ユーザ名 nttpc01
Dockerイメージ名 nttpc_image

また、次のバージョン環境下で確認しています。

Rancher v1.6.2
Harbor v1.2.0

なお、Harborの構築にはdocker(v1.10.0+)とdocker-compose(1.6.0+)が必要です。

 

 

■Harbor構築

■プライベートレジストリの作成

■Rancherへのプライベートレジストリの登録

■Rancherでのプライベートレジストリ追加設定

 

 

■Harbor構築

今回は、VMwareの公式Github(https://github.com/vmware/harbor)からHarborイメージをインストールします。(Rancherのcommunity-catalogにもHarborカタログが追加されましたが、2017/8/24現在では機能不足のため公式のものを利用します。)

 

1.HarborサーバーからGithub上のharbor-online-installerをwgetし、展開します。

 

[root@localhost ~]# wget https://github.com/vmware/harbor/releases/download/v1.
――――――――――――――――――――――――――――――――――――――――――――――――――――
1.2/harbor-online-installer-v1.1.2.tgz

 

harbor-online-installer-v1.1.2.tgz
――――――――――――――――――――――――――――――――――――――――――――――――――――
[root@localhost ~]# tar vzxf harbor-online-installer-v1.1.2.tgz

 

2.HarborのコントロールパネルにSSLで接続するため、証明書を発行し/data/certに設置します。

 

3.詳細設定はharbor.cfgを編集して行います。今回はHarborの起動に必要な最低限の設定だけ行いますが、ご自分の環境に合わせて設定してください。

 

[root@localhost ~]# cd harbor

[root@localhost harbor]# vi harbor.cfg

hostname = reg.mydomain.com -> example.com

ui_url_protocol = http -> https

 

4.設定変更を反映させ、Harborを起動します。

 

[root@localhost harbor]# ./prepare

[root@localhost harbor]# ./install.sh

(中略)
――――――――――――――――――――――――――――――――――――――――――――――――――――
? ----Harbor has been installed and started successfully.----

以上で、Harborの構築は完了です。

 

■プライベートレジストリの作成

1.Harborの構築が完了するとGUIが立ち上がります。ブラウザから以下のURLでアクセスします。

https://example.com/

※GUIのデザインがv0.5.0から大きく変更になっています。

 

 

初期ログインパスワードは以下のデフォルト設定になっているので、ログイン後すぐに変更しましょう。

username: admin

password: Harbor12345

 

 

2.プライベートレジストリを作成します。

任意の名前(nttpc_registry01)を付け、Privateを選択し作成します。

 

 

 

3.作成したプライベートレジストリにメンバー(nttpc01)をアサインします。

アサインされたメンバーのみプライベートレジストリにログインできます。また、アサイン時に権限をProject Admin/Developer/Guestの中から選択することが出来ます。Guest権限ではイメージのPullのみしかできないため、今回はDeveloper権限でnttpc01をアサインします。

 

 

 

4.作成したプライベートレジストリにDockerイメージをPushします。

4-1.Pushしたいイメージにタグ付けをします。

「(ドメイン名) /(レジストリ名)/(イメージ名):(バージョン)」の順でタグを指定します。

 

[root@localhost ~]# docker tag nttpc_image:1.0.0 example.com/nttpc_registry01/nttpc_image:1.0.0

[root@localhost ~]# docker images

REPOSITORY                                                   TAG               IMAGE ID       
example.com/nttpc_registry01/nttpc_image     1.0.0              0f3f761…

 

4-2.先ほど作成したプライベートレジストリにログインします。

 

[root@localhost ~]# docker login example.com

Username: nttpc01

Password: ********

Login Succeeded

 

4-3.タグ付けしたイメージを先ほど作成したプライベートレジストリにPushします。

 

[root@localhost ~]# docker push example.com/nttpc_registry01/nttpc_image:1.0.0

 

PushしたイメージはGUIから確認できます。

以上で、Harborでの操作は終了です。

 

 

■Rancherへのプライベートレジストリの登録

1.RancherGUIのメニューバーから[INFRASTRUCTURE] > [Registries]を選択し、「Add Registry」をクリックします。

 

 

2.「CUSTOM」を選択し、プライベートレジストリのドメイン名、ユーザ名、パスワードを入力し、「Create」をクリックします。

 

 

以上で、Rancherへのプライベートレジストリの登録は終了です。

以降は、「Add Container」の際、「Select Image」欄に今回作成したイメージのタグを入力することで、プライベートレジストリ内のイメージを基にコンテナを作成することが出来ます。

 

■Rancherでのプライベートレジストリ追加設定

上記手順で最低限の設定は終了ですが、更に安全かつ便利にプライベートレジストリを使うための2つのTipsを紹介します。

①デフォルトで使用するレジストリの設定

②レジストリのホワイトリストへの登録

 

1.RancherGUIのメニューバーから[ADMIN] > [Setting]を選択します。

 

2.[Setting]ページの最下部に[Advanced Setting]という欄があります。そこに表示されている「I understand that I can break things by changing advanced settings.」という同意文をクリックします。

※以降は上記に同意したものとして説明します。何か不具合が起きた場合の責任は負いかねますのでご了承ください。

 

 

①デフォルトで使用するレジストリの設定

RancherではイメージをPullしてくるレジストリに、デフォルトでDockerhubが設定されています。そのため、デフォルトの状態では誤って悪意のあるイメージをPullしてしまう可能性があります。

この設定を行うことでデフォルトが自身のプライベートレジストリになるため、明示的にDockerhub等を選ばない限り、外部へイメージをPullしにいくことがなく、安全にコンテナを作成することが出来ます。

 

1. [Advanced Settings]の下部にある「registry.default=<none>」の編集ボタンをクリックします。

 

2.「Value」欄にプライベートレジストリのドメイン名を入力し、保存します。

 

3.「Add Container」で「Select Image」に「レジストリ名/イメージ名/バージョン」(ex. nttpc_registry01/nttpc_image:1.0.0)を入力し「Create」をクリックします。

指定したプライベートレジストリからイメージがPullされコンテナが作成されることを確認してください。

 

4.同様に、「Select Image」に「ubuntu:14.04.3」のみを入力した際にコンテナが作成されないこと、「docker.io/ubuntu:14.04.3」と入力した際にDockerhubからイメージがPullされてコンテナが作成されることを確認してください。

 

以上で、デフォルトで使用するレジストリの設定は終了です。

 

②レジストリのホワイトリストへの登録

上記のデフォルトで使用するレジストリの設定を行ったのみでは、まだ明示的に指定すれば外部からイメージをPullしてくることが可能です。そこで、より安全にコンテナを作成するためにホワイトリストへ自身のプライベートレジストリを登録します。これにより、ホワイトリストに登録されたレジストリ以外からのイメージのPullができなくなります。

この設定はAdmin権限をもったユーザにのみ変更できるため、他の権限のユーザが悪意を持って設定を変更することもできません。不特定多数のユーザにRancherのEnvironmentを貸すような場合に有効です。

 

1.[Advanced Settings]の下部にある「registry.whitelist=<none>」の編集ボタンをクリックします。

 

2.「Value」欄にプライベートレジストリのドメイン名を入力し、保存します。

 

3.「Add Container」で「Select Image」に「レジストリ名/イメージ名/バージョン」(ex. nttpc_registry01/nttpc_image:1.0.0)を入力し「Create」をクリックします。

指定したプライベートレジストリからイメージがPullされコンテナが作成されることを確認してください。

 

4.同様に「Add Container」で「Select Image」に「docker.io/ubuntu:14.04.3」と入力し「Create」をクリックし、コンテナが作成されないことを確認してください。

 

以上で、レジストリのホワイトリストへの登録は終了です。

 

 

最後に……

今回は安全にコンテナを作成するための、プライベートレジストリの作成・使用方法およびRancherでのレジストリ管理方法を紹介しました。Dockerizeとセキュリティは切っても切れません。ぜひ、RancherおよびHarborを活用して、安全・快適なコンテナ開発に取り組んでみてはいかがでしょうか。

また、今回紹介したHarborの機能は本来の機能のほんの一部です。Harborには、より安全なイメージ管理のための機能が随時追加されているため、色々と試してみることをお勧めします。

 

 

 

 

 

はやし
テクノロジー&オペレーション開発本部所属           (監修 とみなが)

オススメ記事