Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2 自己紹介 橋本 修太 ‒ openSUSE-UG メンバーです ‒ Web 系の案件を経験に持ってます。 CMS とか、プロモーションサイトとか。 ‒ 今はメーカーさんの所でお世話になってます  FaceBook Syuta Hashimoto  Twitter @syuta_openSUSE

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

それはさておき

Slide 5

Slide 5 text

5 本日の流れ • docker のイメージって どう管理する? • Portus ならここまでやれる • Portus を動かしてみよう • Portus を使ってみよう

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

8 Docker Hub の場合の課題 ●インターネットにあり、パブリック ✔ 1個までならプライベートリポジトリを持てるが、基 本的に誰でもアクセス可能 ✔ 企業内など、アクセスを制限すべき環境では壁 ✔ 通信速度が出にくい事がある ➔ プライベートレジストリ -registry- を使う 事で、 LAN 内に設置でき、帯域も確保 出来る

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

10 プライベートレジストリ -registry- の場合の課題 ✔ LAN 内でプライベートレジストリにアクセス可能であ れば誰でも利用できてしまう ✔ 細かい権限管理は難しい ✔ 一覧表示、検索等の管理も難しい ➔ Portus をフロントエンドとして利用すれ ば、権限管理や、一覧表示、検索等も GUI で簡単操作

Slide 11

Slide 11 text

11 Portus とは • 次世代 docker registry の為の、オープンソースの、 認証サービスとユーザーインターフェース(公式より) ✔ 認証を行う ✔イメージの管理画面を提供  ✔SUSE がメイン開発 ✔もちろん、 opesSUSE 以外でも動く ✔Rails アプリケーション     

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Portus なら ここまでやれる

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

19 ユーザー、チーム、ネームスペース管理 • GUI で直感的にユーザー、チーム、 ネームスペースの管理が可能 ● ユーザー管理 クリックでユーザー新規作成画面へ クリックでユーザー詳細編集画面へ ※ 画像は全て  拡大表示しています

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

29 LDAP による認証 • LDAP 認証サーバーとの連携が可能 ● 連携設定している LDAP のユーザー でログインすれば、自動的に Portus に も同じユーザーが作成される。 ● また、 Portus にログインしなくて も、 LDAP のユーザーで docker login を使って Portus と連携している registry にログインすれば、同じように ログインしたユーザーと同じユーザーが Portus に作成される。

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

最後に

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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/