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. Portus で
    プライベート Docker
    レジストリを作ってみよう
    橋本修太 – openSUSE-UG
    [email protected]

    View full-size slide

  2. 2
    自己紹介
    橋本 修太
    ‒ openSUSE-UG メンバーです

    Web 系の案件を経験に持ってます。
    CMS とか、プロモーションサイトとか。

    今はメーカーさんの所でお世話になってます
     FaceBook Syuta Hashimoto
     Twitter @syuta_openSUSE

    View full-size slide

  3. 3
    去年の openSUSE.Asia Summit でも
    発表しました(運営もやりました)
    集合写真!
    (但し、私は居ない・・・(後片付け中))

    View full-size slide

  4. それはさておき

    View full-size slide

  5. 5
    本日の流れ

    docker のイメージって
    どう管理する?

    Portus ならここまでやれる

    Portus を動かしてみよう

    Portus を使ってみよう

    View full-size slide

  6. docker のイメージって
    どう管理する?

    View full-size slide

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

    View full-size slide

  8. 8
    Docker Hub の場合の課題
    ●インターネットにあり、パブリック

    1個までならプライベートリポジトリを持てるが、基
    本的に誰でもアクセス可能

    企業内など、アクセスを制限すべき環境では壁

    通信速度が出にくい事がある

    プライベートレジストリ -registry- を使う
    事で、 LAN 内に設置でき、帯域も確保
    出来る

    View full-size slide

  9. 9
    ローカル PC1
    image 管理は?
    〜プライベートレジストリ -registry- の場合〜
    docker daemon
    ローカル PC2
    push pull
    LAN
    docker registry
    LAN 外 PC
    docker daemon
    docker daemon

    View full-size slide

  10. 10
    プライベートレジストリ -registry-
    の場合の課題

    LAN 内でプライベートレジストリにアクセス可能であ
    れば誰でも利用できてしまう

    細かい権限管理は難しい

    一覧表示、検索等の管理も難しい

    Portus をフロントエンドとして利用すれ
    ば、権限管理や、一覧表示、検索等も
    GUI で簡単操作

    View full-size slide

  11. 11
    Portus とは
    • 次世代 docker registry の為の、オープンソースの、
    認証サービスとユーザーインターフェース(公式より)

    認証を行う
    ✔イメージの管理画面を提供 
    ✔SUSE がメイン開発
    ✔もちろん、 opesSUSE 以外でも動く
    ✔Rails アプリケーション     

    View full-size slide

  12. 12
    ローカル PC1
    image 管理は?
    〜 Portus 利用の場合(概要図)〜
    ブラウザ
    ローカル PC2
    push pull
    LAN
    registry
    docker daemon
    プライベートレジストリサーバー
    Portus

    データ同期

    認証
    管理操作

    View full-size slide

  13. Portus なら
    ここまでやれる

    View full-size slide

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

    View full-size slide

  15. 15
    Portus のユーザー管理
    ネームスペース
    ユーザー チーム
    UserA
    UserB
    UserC
    TeamA
    UserA
    UserB
    UserC
    NameA
    NameB
    読み書きの権限を
    それぞれに設定可能
    リポジトリ
    portus
    mysql
    ネームスペースの下には幾つでもリポジトリを作成可能

    View full-size slide

  16. 16
    Portus のユーザー管理
    • ネームスペースに対してユーザーの権限を設定する事で管理
    する
    • Docker Hub とは若干違う事に留意
    ( Organization が無い、チームでネームスペースが持てる、
    等)
    • Portus がユーザーの名前のネームスペースを自動で作成
    • チーム
    ‒ 複数のユーザーを登録できる。それぞれのユーザーに対して
    読み書きの権限を設定
    ‒ 複数のネームスペースを持てる。
    (チームの持つネームスペースに対して、それぞれのユーザ
    ーの権限は直接設定出来ない)

    View full-size slide

  17. 17
    ネームスペースとは
    〜 push 、 pull の為のイメージの命名規則〜
    • push hashimoto/hashimoto_openSUSE
    ネームスペース リポジトリ名
    このように、 [ ネームスペース ]/[ リポジトリ名 ] とする決まり
    [ ネームスペース ] ・・・ディレクトリのようなもの。
       DockerHub では登録すると自分の名前の
      ネームスペースが貰える
    [ リポジトリ名 ] ・・・イメージの名前。
      後ろに「 :1.0 」など、タグ(バージョンラベル)
      を付けられる
    イメージ名

    View full-size slide

  18. 18
    名前の作成方法
    命名は docker の tag 付け機能を使う。
    →tag 付けで、対象のイメージに、命名規則に
     乗っ取った名前( tag )を付ける。
    > docker tag openSUSE:1.0 \
    hashimoto/hashimoto_openSUSE:1.0
    元のイメージ名( ID でも可)
    命名規則に乗っ取った名前 ( バージョン名付き)
    当然、元のイメージは手元にあるものとする。
    手元にあるイメージの確認は次のコマンドで可能
      > docker images

    View full-size slide

  19. 19
    ユーザー、チーム、ネームスペース管理
    • GUI で直感的にユーザー、チーム、
    ネームスペースの管理が可能

    ユーザー管理
    クリックでユーザー新規作成画面へ
    クリックでユーザー詳細編集画面へ ※ 画像は全て
     拡大表示しています

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. 23
    webhook
    • push 、 delete といったイベント時に URL を叩く
    • ネームスペース単位で設定、管理可能

    View full-size slide

  24. 24
    registry だと課題になりがち
    image の検索
    • やっぱり GUI で検索がしたい

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  27. 27
    履歴表示
    • イメージの push 、ユーザーの作成等を履歴表示
    • 管理者なら全ての、各ユーザーなら自分に関係のある履
    歴を表示
    管理者なら
    CSV でダウンロード
    も可能

    View full-size slide

  28. 28
    registry だと課題になりがち
    LDAP との連携
    • ある程度の組織だと既に LDAP
    が動いていたりする

    View full-size slide

  29. 29
    LDAP による認証
    • LDAP 認証サーバーとの連携が可能

    連携設定している LDAP のユーザー
    でログインすれば、自動的に Portus に
    も同じユーザーが作成される。

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

    View full-size slide

  30. それでは
    Portus を動かしてみよう

    View full-size slide

  31. 31
    構成図
    nginx
    リバースプロキシ
    Portus registry background
    registry と Portus の同期等
    DB
    インターネット・イントラネット
    ・それぞれが docker コンテナ ・ SSL 通信を行う

    View full-size slide

  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 と関連するコンテナ
    が稼働
    設定詳細は別途資料で公開

    View full-size slide

  33. それでは
    Portus を使ってみよう

    View full-size slide

  34. 34
    Portus でのステップ
    1.admin 作成
    2.registry 登録
    3.(必要に応じて)ユーザーの作成
    docker login 、 push 、 pull
    が利用可能

    View full-size slide

  35. 35
    1. admin の作成
    • 初回ログイン時のユーザー
    がアドミンとなる
    • この機能は
    Portus/config/config.y
    ml でオフに出来る
    • rake で CLI でアドミンユー
    ザーを作成する事も可能

    View full-size slide

  36. 36
    2. registry 登録
    • 続いて registry の登録

    View full-size slide

  37. 37
    registry の設定方法
    • registry が設定されていないと、この設定画面にリダイレクト
    される
    • Name は好きな名前を入力
    • Hostname に .env で指定した {MACHINE_FQDN} の
    値を入力
    (上部の説明等に” e.g. registry.test.lan:5000” とある
    が、リバースプロキシなのでポートは不要)
    • SSL 通信を設定しているので、 Use SSL にチェック
    • すべて上手くいけば「 Create 」がアクティブになりクリッ
    ク可能に

    View full-size slide

  38. 38
    docker login
    • まずは Login
    MACHINE_FQDN が 192.168.0.4 とすると、
       > docker login 192.168.0.4
    ユーザー名とパスワードを尋ねられるので、 Portus で
    作成したユーザー情報を入力
    nginx をリバースプロキシにしているので、ポート番号は
    不要

    View full-size slide

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

    View full-size slide

  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 したイメージの確認や
    履歴を見てみましょう

    View full-size slide

  41. 42
    手元で image 管理
    • Portus を使えば、認証、管理が可能
    • GUI も便利
    • SSL 通信も OK
    • docker は Portus とも registry ともやりとりを行う
    ( Portus の設定も registry の設定も大事)
    • リバースプロキシ構成も簡単
    • OAuth 対応、匿名閲覧、脆弱性診断も開発中
    →GitHub も盛り上がっていて、色々と議論されてる
    ☆ 本格的にプライベートレジストリを
     使いたい時の有力な候補

    View full-size slide

  42. Thank you.
    Join the conversation,
    contribute & have a lot of fun!
    www.opensuse.org

    View full-size slide

  43. 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/

    View full-size slide