コラム

[Docker]認証付きDocker Registryを構築する①

Docker使用事例で使用したイメージ管理サーバであるDocker Registryのセットアップ方法とクライアントからのアクセス方法を記述していこうと思います。今回はサーバ構築方法、次回はクライアントからのアクセス方法を書いて行きます。

サーバ環境

Ubuntu 20.04 LTS
Docker Desktop 4.3.2
Docker Engine v20.10.11

レジストリサーバ作成

ディレクトリ構成・作成ファイル一覧

$PWD - config - DockerRegistry.key
              - DockerRegistry.csr
              - DockerRegistry.crt
              - auth_config.yml
              - san

SSL/TLS証明書・秘密鍵作成

外部からのDocker RegistryへのアクセスはTLS通信で行われる為、SSL/TLS証明書と秘密鍵を作成します。
今回はOpenSSLを使用して自己証明書(オレオレ証明書)を作成します。

#KEY作成
openssl req -x509 -nodes -new -sha256 -days 3650 -newkey rsa:2048 -keyout DockerRegistry.key

#CSR作成
openssl req -out DockerRegistry.csr -key DockerRegistry.key -new

#CRT作成
openssl x509 -req -days 3650 -signkey DockerRegistry.key -in DockerRegistry.csr -out DockerRegistry.crt -extfile san

キー作成の際に入力する値は適当に入れてください。

CRT作成の「-extfile san」の部分ですが、sanというファイル(ファイル名は何でも可)に追加情報を記述します。

subjectAltName = DNS:*.xxxx.xxxx.com, IP:192.168.10.107

DockerRegistryが動作するマシンのドメイン含めたPC名かIPを指定する必要があります。
今回はIP指定でやろうと思います。

認証起動(Docker Auth)の設定

Docker Authを利用してDocker Registryを利用する際の認証をしてもらいます。

server:
  addr: ":5001"
  certificate: "/config/DockerRegistry.crt"
  key: "/config/DockerRegistry.key"

token:
  issuer: "testAuthServer"
  expiration: 900

users:
  "admin":
    password: "$2y$05$Hk8RjMLX9NxGDVLa9CFTEezeeGFuYTIi.V8HbJPu54Bl8GGwoag/."  # pass
  "user01":
    password: "$2y$05$XBhMKmTlC33TUgLS8BCCEOTZM76JTBxegGdktKSGyCsgt2f9rlw3e"  # 123

acl:
  - match: {account: "admin"}
    actions: ["*"]
    comment: "Admin has full access to everything."
  - match: {account: "user01"}
    actions: ["pull"]
    comment: "User \"user01\" can pull stuff."

Docker Auth用の設定ファイルです。
ポートや証明書、認証キーとユーザ情報、権限などを記述します。
ユーザのパスワードはハッシュ値に変換しています。「htpasswd -nB」コマンド使用
acl:の部分は権限を設定します。adminは全権限、user01はpull権限のみ与えています。

docker run -d -p 5001:5001 --name docker_auth \
-v $PWD/config/auth_config.yml:/config/auth_config.yml \
-v $PWD/config/DockerRegistry.crt:/config/DockerRegistry.crt \
-v $PWD/config/DockerRegistry.key:/config/DockerRegistry.key cesanta/docker_auth:1 \
/config/auth_config.yml

docker auth起動コマンドです。
設定ファイル、認証キー、証明書をvolumeに設定する必要があります。

レジストリ起動(Docker Registry)の設定

Docker Registryの起動をします。Docker Imageの取得、登録等の処理を実行します。
認証はDocker Authを使用する設定を行います。

docker run -d -p 5000:5000 --name registry \
-v $PWD/config:/config \
-v $PWD/config/DockerRegistry.crt:/config/DockerRegistry.crt \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/config/DockerRegistry.crt \
-e REGISTRY_HTTP_TLS_KEY=/config/DockerRegistry.key \
-e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry \
-e REGISTRY_AUTH=token \
-e REGISTRY_AUTH_TOKEN_REALM=https://192.168.10.107:5001/auth \
-e REGISTRY_AUTH_TOKEN_SERVICE="registry" \
-e REGISTRY_AUTH_TOKEN_ISSUER="testAuthServer" \
-e REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/config/DockerRegistry.crt \
--restart=always \
registry:2

認証キー、証明書、Docker Authへのアクセスの設定等をする必要があります。
REGISTRY_AUTH_XXXの部分はDocker Authへの設定です。
REGISTRY_AUTH_TOKEN_REALMはDocker Authへの接続URL
REGISTRY_AUTH_TOKEN_SERVICEは任意
REGISTRY_AUTH_TOKEN_ISSUERはauth_config.ymlファイルのtokenのissueと同じ値を設定
REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLEは証明書を設定

以上でサーバ側の設定が完了しました。次回はクライアント側の設定をして実際にイメージを登録、取得をしていきたいと思います。

この記事をシェアする
  • Facebookアイコン
  • Twitterアイコン
  • LINEアイコン

お問い合わせ ITに関するお悩み不安が少しでもありましたら、
ぜひお気軽にお問い合わせください

お客様のお悩みや不安、課題などを丁寧に、そして誠実にお伺いいたします。

お問い合わせはこちら
お電話でのお問い合わせ 03-5820-1777(平日10:00〜18:00)
よくあるご質問