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

2b3af8a2652d7e6c9caf92e6b1fe7c34?s=47 hashimotosyuta
February 25, 2018

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

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

2b3af8a2652d7e6c9caf92e6b1fe7c34?s=128

hashimotosyuta

February 25, 2018
Tweet

Transcript

  1. Portus で プライベート Docker レジストリを作ってみよう 橋本修太 – openSUSE-UG syuta.hashimoto@gmail.com

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

    とか、プロモーションサイトとか。 ‒ 今はメーカーさんの所でお世話になってます  FaceBook Syuta Hashimoto  Twitter @syuta_openSUSE
  3. 3 去年の openSUSE.Asia Summit でも 発表しました(運営もやりました) 集合写真! (但し、私は居ない・・・(後片付け中))

  4. それはさておき

  5. 5 本日の流れ • docker のイメージって どう管理する? • Portus ならここまでやれる •

    Portus を動かしてみよう • Portus を使ってみよう
  6. docker のイメージって どう管理する?

  7. 7 ローカル PC1 image 管理は? 〜通常 -Dcoker Hub- の場合〜 Docker

    Hub Docker inc. 提供のパブリック docker レジストリ インターネット docker daemon docker client ローカル PC2 docker client push pull docker daemon
  8. 8 Docker Hub の場合の課題 •インターネットにあり、パブリック ✔ 1個までならプライベートリポジトリを持てるが、基 本的に誰でもアクセス可能 ✔ 企業内など、アクセスを制限すべき環境では壁

    ✔ 通信速度が出にくい事がある ➔ プライベートレジストリ -registry- を使う 事で、 LAN 内に設置でき、帯域も確保 出来る
  9. 9 ローカル PC1 image 管理は? 〜プライベートレジストリ -registry- の場合〜 docker daemon

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

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

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

    PC2 push pull LAN registry docker daemon プライベートレジストリサーバー Portus • データ同期 • 認証 管理操作
  13. Portus なら ここまでやれる

  14. 14 registry だと課題になりがち 権限管理 • ユーザー毎の権限管理が難しい • ユーザーのグループ管理が難しい

  15. 15 Portus のユーザー管理 ネームスペース ユーザー チーム UserA UserB UserC TeamA

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

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

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

    tag )を付ける。 > docker tag openSUSE:1.0 \ hashimoto/hashimoto_openSUSE:1.0 元のイメージ名( ID でも可) 命名規則に乗っ取った名前 ( バージョン名付き) 当然、元のイメージは手元にあるものとする。 手元にあるイメージの確認は次のコマンドで可能   > docker images
  19. 19 ユーザー、チーム、ネームスペース管理 • GUI で直感的にユーザー、チーム、 ネームスペースの管理が可能 • ユーザー管理 クリックでユーザー新規作成画面へ クリックでユーザー詳細編集画面へ

    ※ 画像は全て  拡大表示しています
  20. 20 チーム管理 • GUI で直感的にチームの管理が可能 クリックでチーム新規作成画面へ クリックでチーム詳細編集画面へ チームメンバー、チームの持つネームスペース等を表示

  21. 21 ネームスペース管理 • GUI で直感的にネームスペースの管理が可能 クリックでネームスペース新規作成画面へ クリックでネームスペース詳細画面へ リポジトリの一覧を表示

  22. 22 registry だと課題になりがち webhook の管理 • 方法は設定ファイルへの記述 • オン、オフの切り替えが難しい

  23. 23 webhook • push 、 delete といったイベント時に URL を叩く •

    ネームスペース単位で設定、管理可能
  24. 24 registry だと課題になりがち image の検索 • やっぱり GUI で検索がしたい

  25. 25 イメージ検索 • ネームスペース、イメージ名( tag )から検索 ここに検索ワードを入れてエンター 結果が表示される。 ログインしているユーザーが閲覧出来る イメージのみ表示

  26. 26 registry だと課題になりがち 操作履歴の確認 • 本格稼働だと履歴を確認したい 場面も多い

  27. 27 履歴表示 • イメージの push 、ユーザーの作成等を履歴表示 • 管理者なら全ての、各ユーザーなら自分に関係のある履 歴を表示 管理者なら

    CSV でダウンロード も可能
  28. 28 registry だと課題になりがち LDAP との連携 • ある程度の組織だと既に LDAP が動いていたりする

  29. 29 LDAP による認証 • LDAP 認証サーバーとの連携が可能 • 連携設定している LDAP のユーザー

    でログインすれば、自動的に Portus に も同じユーザーが作成される。 • また、 Portus にログインしなくて も、 LDAP のユーザーで docker login を使って Portus と連携している registry にログインすれば、同じように ログインしたユーザーと同じユーザーが Portus に作成される。
  30. それでは Portus を動かしてみよう

  31. 31 構成図 nginx リバースプロキシ Portus registry background registry と Portus

    の同期等 DB インターネット・イントラネット ・それぞれが docker コンテナ ・ SSL 通信を行う
  32. 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 と関連するコンテナ が稼働 設定詳細は別途資料で公開
  33. それでは Portus を使ってみよう

  34. 34 Portus でのステップ 1.admin 作成 2.registry 登録 3.(必要に応じて)ユーザーの作成 docker login

    、 push 、 pull が利用可能
  35. 35 1. admin の作成 • 初回ログイン時のユーザー がアドミンとなる • この機能は Portus/config/config.y

    ml でオフに出来る • rake で CLI でアドミンユー ザーを作成する事も可能
  36. 36 2. registry 登録 • 続いて registry の登録

  37. 37 registry の設定方法 • registry が設定されていないと、この設定画面にリダイレクト される • Name は好きな名前を入力

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

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

    docker hub と同じ • まず、イメージに tag を付ける 前半のネームスペースの所を参照 先頭に、 {MACHINE_FQDN} (サーバー)を追加   > docker tag opensuse:latest 192.168.0.4/PortusUser/local_opensuse:latest サーバー ネーム スペース リポジトリ名(タグ付き)
  40. 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 したイメージの確認や 履歴を見てみましょう
  41. 最後に

  42. 42 手元で image 管理 • Portus を使えば、認証、管理が可能 • GUI も便利

    • SSL 通信も OK • docker は Portus とも registry ともやりとりを行う ( Portus の設定も registry の設定も大事) • リバースプロキシ構成も簡単 • OAuth 対応、匿名閲覧、脆弱性診断も開発中 →GitHub も盛り上がっていて、色々と議論されてる ☆ 本格的にプライベートレジストリを  使いたい時の有力な候補
  43. Thank you. Join the conversation, contribute & have a lot

    of fun! www.opensuse.org
  44. 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 rbrown@opensuse.org Design & Inspiration openSUSE Design Team http://opensuse.github.io/branding- guidelines/