Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PortusでプライベートDockerレジストリを作ってみよう

hashimotosyuta
February 25, 2018

 PortusでプライベートDockerレジストリを作ってみよう

オープンソースカンファレンス東京 2018 春の発表資料です。
DocrkerのregistryのフロントエンドであるPortusの紹介、実行方法の説明、使い方の解説です。

hashimotosyuta

February 25, 2018
Tweet

More Decks by hashimotosyuta

Other Decks in Technology

Transcript

  1. 2 自己紹介 橋本 修太 ‒ openSUSE-UG メンバーです ‒ Web 系の案件を経験に持ってます。 CMS

    とか、プロモーションサイトとか。 ‒ 今はメーカーさんの所でお世話になってます  FaceBook Syuta Hashimoto  Twitter @syuta_openSUSE
  2. 7 ローカル PC1 image 管理は? 〜通常 -Dcoker Hub- の場合〜 Docker

    Hub Docker inc. 提供のパブリック docker レジストリ インターネット docker daemon docker client ローカル PC2 docker client push pull docker daemon
  3. 9 ローカル PC1 image 管理は? 〜プライベートレジストリ -registry- の場合〜 docker daemon

    ローカル PC2 push pull LAN docker registry LAN 外 PC docker daemon docker daemon
  4. 10 プライベートレジストリ -registry- の場合の課題 ✔ LAN 内でプライベートレジストリにアクセス可能であ れば誰でも利用できてしまう ✔ 細かい権限管理は難しい

    ✔ 一覧表示、検索等の管理も難しい ➔ Portus をフロントエンドとして利用すれ ば、権限管理や、一覧表示、検索等も GUI で簡単操作
  5. 11 Portus とは • 次世代 docker registry の為の、オープンソースの、 認証サービスとユーザーインターフェース(公式より) ✔

    認証を行う ✔イメージの管理画面を提供  ✔SUSE がメイン開発 ✔もちろん、 opesSUSE 以外でも動く ✔Rails アプリケーション     
  6. 12 ローカル PC1 image 管理は? 〜 Portus 利用の場合(概要図)〜 ブラウザ ローカル

    PC2 push pull LAN registry docker daemon プライベートレジストリサーバー Portus • データ同期 • 認証 管理操作
  7. 15 Portus のユーザー管理 ネームスペース ユーザー チーム UserA UserB UserC TeamA

    UserA UserB UserC NameA NameB 読み書きの権限を それぞれに設定可能 リポジトリ portus mysql ネームスペースの下には幾つでもリポジトリを作成可能
  8. 16 Portus のユーザー管理 • ネームスペースに対してユーザーの権限を設定する事で管理 する • Docker Hub とは若干違う事に留意

    ( Organization が無い、チームでネームスペースが持てる、 等) • Portus がユーザーの名前のネームスペースを自動で作成 • チーム ‒ 複数のユーザーを登録できる。それぞれのユーザーに対して 読み書きの権限を設定 ‒ 複数のネームスペースを持てる。 (チームの持つネームスペースに対して、それぞれのユーザ ーの権限は直接設定出来ない)
  9. 17 ネームスペースとは 〜 push 、 pull の為のイメージの命名規則〜 • push hashimoto/hashimoto_openSUSE

    ネームスペース リポジトリ名 このように、 [ ネームスペース ]/[ リポジトリ名 ] とする決まり [ ネームスペース ] ・・・ディレクトリのようなもの。    DockerHub では登録すると自分の名前の   ネームスペースが貰える [ リポジトリ名 ] ・・・イメージの名前。   後ろに「 :1.0 」など、タグ(バージョンラベル)   を付けられる イメージ名
  10. 18 名前の作成方法 命名は docker の tag 付け機能を使う。 →tag 付けで、対象のイメージに、命名規則に  乗っ取った名前(

    tag )を付ける。 > docker tag openSUSE:1.0 \ hashimoto/hashimoto_openSUSE:1.0 元のイメージ名( ID でも可) 命名規則に乗っ取った名前 ( バージョン名付き) 当然、元のイメージは手元にあるものとする。 手元にあるイメージの確認は次のコマンドで可能   > docker images
  11. 23 webhook • push 、 delete といったイベント時に URL を叩く •

    ネームスペース単位で設定、管理可能
  12. 29 LDAP による認証 • LDAP 認証サーバーとの連携が可能 • 連携設定している LDAP のユーザー

    でログインすれば、自動的に Portus に も同じユーザーが作成される。 • また、 Portus にログインしなくて も、 LDAP のユーザーで docker login を使って Portus と連携している registry にログインすれば、同じように ログインしたユーザーと同じユーザーが Portus に作成される。
  13. 31 構成図 nginx リバースプロキシ Portus registry background registry と Portus

    の同期等 DB インターネット・イントラネット ・それぞれが docker コンテナ ・ SSL 通信を行う
  14. 32 ステップ 1.設定ファイルを以下で取得 > git clone --depth 1 -b v2.3

    https://github.com/SUSE/Portus.git 2.example/compose に移動して「 .env 」の MACHIN_FQDN を設定 3.証明書を作成し secrets に配置、 docker にも設置 4.ルートディレクトリでコマンドを実行 > docker-compose up 色鮮やかなログが流れ、 Portus と関連するコンテナ が稼働 設定詳細は別途資料で公開
  15. 35 1. admin の作成 • 初回ログイン時のユーザー がアドミンとなる • この機能は Portus/config/config.y

    ml でオフに出来る • rake で CLI でアドミンユー ザーを作成する事も可能
  16. 37 registry の設定方法 • registry が設定されていないと、この設定画面にリダイレクト される • Name は好きな名前を入力

    • Hostname に .env で指定した {MACHINE_FQDN} の 値を入力 (上部の説明等に” e.g. registry.test.lan:5000” とある が、リバースプロキシなのでポートは不要) • SSL 通信を設定しているので、 Use SSL にチェック • すべて上手くいけば「 Create 」がアクティブになりクリッ ク可能に
  17. 38 docker login • まずは Login MACHINE_FQDN が 192.168.0.4 とすると、

       > docker login 192.168.0.4 ユーザー名とパスワードを尋ねられるので、 Portus で 作成したユーザー情報を入力 nginx をリバースプロキシにしているので、ポート番号は 不要
  18. 39 push 用 tag 付け • login ができれば、イメージの Push 等は

    docker hub と同じ • まず、イメージに tag を付ける 前半のネームスペースの所を参照 先頭に、 {MACHINE_FQDN} (サーバー)を追加   > docker tag opensuse:latest 192.168.0.4/PortusUser/local_opensuse:latest サーバー ネーム スペース リポジトリ名(タグ付き)
  19. 40 docker push & docker pull あとは push   >

    docker push 192.168.0.4/PortusUser/local_opensuse:latest Pull も同様に可能   > docker pull 192.168.0.4/PortusUser/local_opensuse:latest • もちろん docker login してなければ権限エラー Portus の画面で Push したイメージの確認や 履歴を見てみましょう
  20. 42 手元で image 管理 • Portus を使えば、認証、管理が可能 • GUI も便利

    • SSL 通信も OK • docker は Portus とも registry ともやりとりを行う ( Portus の設定も registry の設定も大事) • リバースプロキシ構成も簡単 • OAuth 対応、匿名閲覧、脆弱性診断も開発中 →GitHub も盛り上がっていて、色々と議論されてる ☆ 本格的にプライベートレジストリを  使いたい時の有力な候補
  21. General Disclaimer This document is not to be construed as

    a promise by any participating organisation to develop, deliver, or market a product. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. openSUSE makes no representations or warranties with respect to the contents of this document, and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose. The development, release, and timing of features or functionality described for openSUSE products remains at the sole discretion of openSUSE. Further, openSUSE reserves the right to revise this document and to make changes to its content, at any time, without obligation to notify any person or entity of such revisions or changes. All openSUSE marks referenced in this presentation are trademarks or registered trademarks of SUSE LLC, in the United States and other countries. All third-party trademarks are the property of their respective owners. License This slide deck is licensed under the Creative Commons Attribution-ShareAlike 4.0 International license. It can be shared and adapted for any purpose (even commercially) as long as Attribution is given and any derivative work is distributed under the same license. Details can be found at https://creativecommons.org/licenses/by-sa/4.0/ Credits Template Richard Brown [email protected] Design & Inspiration openSUSE Design Team http://opensuse.github.io/branding- guidelines/