サーチ…


前書き

Docker Hubではなくプライベートで安全なドッカーレジストリ。基本的なドッカーのスキルが必要です。

パラメーター

コマンド説明
sudo docker run -p 5000:5000 ドッカーコンテナを起動し、ポート5000をコンテナから物理マシンのポート5000にバインドします。
--nameレジストリコンテナ名( "docker ps"の可読性を良くするために使用)。
-v 'pwd' / certs:/ certs コンテナの物理マシンon / certsのCURRENT_DIR / certsをバインドします(「共有フォルダ」など)。
-e REGISTRY_HTTP_TLS_CERTIFICATE = / certs / server.crt レジストリは/certs/server.crtファイルを使用して開始することを指定します。 (env変数)
-e REGISTRY_HTTP_TLS_KEY = / certs / server.key RSAキー(server.key)と同じです。
-v / root / images:/ var / lib / registry / すべてのレジストリイメージを保存する場合は、物理マシンでこれを行う必要があります。ここでは、すべてのイメージを物理マシン上の/ root / imagesに保存します。これを行うと、イメージを失うことなくレジストリを停止して再起動できます。
レジストリ:2 レジストリイメージをドッカーハブ(またはローカル)から取得することを指定し、レジストリのバージョン2をインストールするために«2»を追加します。

備考

ドッカーエンジンをインストールする方法(このチュートリアルではクライアントと呼ばれます)

SSL自己署名証明書を生成する方法

証明書の生成

RSA秘密鍵を生成する: openssl genrsa -des3 -out server.key 4096

Opensslはこのステップでパスフレーズを要求する必要があります。パスフレーズなしで、通信と認証に証明書だけを使用することに注意してください。たとえば、123456を使用してください。

証明書署名要求を生成する: openssl req -new -key server.key -out server.csr

この手順は、証明書に関するいくつかの情報を求められるため重要です。最も重要な情報は、プライベートドッカーレジストリと他のすべてのマシンとの間の通信に使用されるドメイン名である「コモンネーム」です。例:mydomain.com

RSA秘密鍵からパスフレーズを削除する: cp server.key server.key.org && openssl rsa -in server.key.org -out server.key

私が言ったように、パスフレーズのない証明書に焦点を当てます。したがって、すべての鍵のファイル(.key、.csr、.crt)に注意し、それらを安全な場所に保管してください。

自己署名証明書を生成する: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

これで、プライベートレジストリ認証に必要な2つの重要なファイルserver.keyserver.crtが作成されました。

自己署名証明書でレジストリを実行する

プライベートレジストリを(安全に)実行するには、自己署名証明書を生成する必要があります。前の例を参照して生成してください。

私の例では、 server.keyserver.crtを/ root / certsに入れます

dockerコマンドを実行する前に、 certsフォルダを含むディレクトリに( cd使用して)配置する必要があります。あなたがいなくて、コマンドを実行しようとすると、次のようなエラーが表示されます。

level = fatal msg = "開いている/certs/server.crt:そのようなファイルやディレクトリはありません"

あなたが(私の例ではcd /root )、基本的には次のsudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2を使ってセキュア/プライベートレジストリを起動することができます: sudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2
このコマンドについての説明は、パラメーターの部分で使用できます。

ドッカークライアントからプルまたはプッシュ

働いているレジストリを実行すると、そのレジストリに画像をプルまたはプッシュできます。そのためには、ドッカークライアント上の特別なフォルダにserver.crtファイルが必要です。証明書を使用すると、レジストリで認証し、通信を暗号化できます。

レジストリ・マシンのserver.crtをクライアント・マシンの/etc/docker/certs.d/mydomain.com:5000/にコピーします。次に、 ca-certificates.crtに名前を変更します mv /etc/docker/certs.d/mydomain.com:5000/server.crt /etc/docker/certs.d/mydomain.com:5000/ca-certificates.crt

この時点で、プライベートレジストリからイメージをプルまたはプッシュできます。
docker pull mydomain.com:5000/nginxdocker pull mydomain.com:5000/nginxまたは
押す :

  1. hub.docker.comからの公式画像を入手する:docker docker pull nginx
  2. 私有レジストリにプッシュする前にこのイメージにdocker tag IMAGE_ID mydomain.com:5000/nginxdocker tag IMAGE_ID mydomain.com:5000/nginxdocker imagesを使ってIMAGE_IDを取得する)
  3. レジストリに画像をプッシュ: docker push mydomain.com:5000/nginx


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow