Docker
Dockerプライベート/セキュアレジストリ(API v2)
サーチ…
前書き
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»を追加します。 |
備考
証明書の生成
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.keyとserver.crtが作成されました。
自己署名証明書でレジストリを実行する
プライベートレジストリを(安全に)実行するには、自己署名証明書を生成する必要があります。前の例を参照して生成してください。
私の例では、 server.keyとserver.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/nginx
: docker pull mydomain.com:5000/nginx
または
押す :
- hub.docker.comからの公式画像を入手する:docker
docker pull nginx
- 私有レジストリにプッシュする前にこのイメージに
docker tag IMAGE_ID mydomain.com:5000/nginx
:docker tag IMAGE_ID mydomain.com:5000/nginx
(docker images
を使ってIMAGE_IDを取得する) - レジストリに画像をプッシュ:
docker push mydomain.com:5000/nginx