Dockerレジストリは、Dockerイメージを内部(組織内)に保存および配布できるようにするアプリケーションの一部です。 Dockerには、DockerHubと呼ばれるパブリックレジストリもあり、Dockerイメージを無料で保存できます。
ただし、Dockerパブリックレジストリの問題は、アップロードしたイメージがパブリックになることです。これは、イメージを作成するために長時間働いたときにあなたやあなたの組織が期待することではなく、それが公開されます。
このハードルを克服するために、プロジェクトのDockerレジストリを非公開で設定して、自分または組織だけがDockerイメージをプロジェクトに保存し、同僚に配布できるようにすることができます。
ここでは、この技術ガイドで、 CentOS 7でDockerプライベートレジストリを設定する方法について説明します。 / Ubuntu 16.04 / Fedora 26/25 。
インフラストラクチャ
HostName | IPアドレス | オペレーティングシステム | 目的 |
---|---|---|---|
registerry.itzgeek.local | 192.168.12.10 | CentOS 7 | Dockerプライベートレジストリサーバーとして機能します |
build.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | 開発者がdockerfileまたはdockercomposeを使用してDockerイメージを構築し、それらのイメージを上記のdockerプライベートレジストリサーバーにアップロードするDockerエンジンノードとして機能します。 |
deploy.itzgeek.local | 192.168.12.30 | Fedora 26/25 | プライベートレジストリサーバーからダウンロード(プル)されたコンテナをデプロイするDockerエンジンノードとして機能します。 |
前提条件
すべてのノードにDockerエンジンをインストールし、Dockerサービスが稼働していることを確認します。
読む :CentOS7にDockerCEをインストールする方法
読む :Ubuntu16.04にDockerCEをインストールする方法
読む :Fedora26/25にDockerCEをインストールする方法
Dockerプライベートレジストリのセットアップ
レジストリノードにログインし、DockerHubからレジストリイメージをプルします。
[root @ registerry〜]#dockerpullレジストリ
プレーンなDockerレジストリとセキュリティで保護されたDockerレジストリのどちらを使用するかを選択します。
プレーンDockerレジストリ
[root @ repository〜]#docker run -dit -p 5000:5000--nameレジストリレジストリ
SecureDockerプライベートレジストリ
デフォルトでは、DockerノードはTLSを介した安全な接続を使用して、プライベートレジストリとの間でイメージをアップロードまたはダウンロードします。 CAによって署名されたTLS証明書、またはレジストリサーバーで自己署名されたTLS証明書を使用できます。
ここでは、Dockerレジストリを保護するために自己署名証明書を使用します。次のコマンドを使用して、自己署名証明書を作成しましょう。
[root @ repository〜]#mkdir -p / certs [root @ registerry〜]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/ca.key -x509 -days 365 -out / certs /ca.crt4096ビットのRSA秘密鍵の生成.......................................。 ....++............................................。 .................................................。 .......++新しい秘密鍵を「/certs/ca.key」に書き込む-----証明書要求に組み込まれる情報の入力を求められます。入力しようとしている内容は、いわゆる識別名またはDNです。かなりの数のフィールドがありますが、空白のままにすることができます。一部のフィールドにはデフォルト値があります。「。」と入力すると、フィールドは空白のままになります。---- -国名(2文字コード)[XX]:INStateまたはProvince Name(フルネーム)[]:TNLocality Name(eg、city)[Default City]:CHNOrganization Name(eg、company)[Default Company Ltd]:ITzGeekOrganizational Unit名前(例:セクション)[]:ITCommon名(例:名前またはサーバーのホスト名) []: registerry.itzgeek.local メールアドレス[]:[email protected]
「registry.itzgeek.local」を置き換えます 」とレジストリサーバーのFQDNを指定します。
生成された証明書「ca.crt」 この証明書を信頼するには、すべてのビルド/デプロイノードに配置する必要があります。
証明書情報を使用してDockerレジストリコンテナを起動します。
[root @ repository〜]#docker run -d -p 5000:5000 --restart =always --name Registry -v / certs:/ certs -e REGISTRY_HTTP_TLS_CERTIFICATE =/certs/ca.crt -e REGISTRY_HTTP_TLS_KEY =/ certs/ca.keyレジストリ
これで、「レジストリ」という名前のレジストリサーバーコンテナができました。 」は「registry.itzgeek.local」で実行されます 「。
[root @ registerry〜]#docker ps
出力:
<前> CONTAINER ID IMAGEコマンドCREATED STATUSポートNAMES8641fbc895f5レジストリ "/entrypoint.sh / E ..." 44秒まで41秒前に0.0.0.0:5000->5000/tcpレジストリファイアウォール
Dockerレジストリをネットワーク外( build.itzgeek.local )で利用できるようにするには、ファイアウォールで次のポートを開く必要があります。 /deploy.itzgeek.local )
オペレーティングシステムに応じて、Dockerレジストリサーバー(registry.itzgeek.local)で次のコマンドを実行する必要があります。
DockerレジストリがCentOS7/Fedora26/25にある場合
[root @ repository〜]#firewall-cmd --permanent --add-port =5000 / tcp [root @ repository〜]#firewall-cmd --reload
DockerレジストリがUbuntu16.04にある場合
root @ repository:〜#ufw statusroot @registry:〜#ufw allow 5000 / tcproot @ registerry:〜#ufw reload ufw enable
これで、DockerレジストリでDockerイメージを配布する準備が整いました。
Dockerイメージを作成してプライベートレジストリサーバーにアップロードする
ビルドDockerエンジンノードにログインします。例: 「build.itzgeek.local 」
Dockerイメージを構築する
プライベートレジストリサーバーにアップロードするためのDockerイメージ(カスタマイズされたDockerコンテナー用)を作成しましょう。 3つの方法で、コンテナイメージを構築/作成できます。
1.コミット
2。 Dockerfile
3。 DockerCompose。
上記のいずれかの方法で、Dockerイメージを作成し、アップロードできるようにしておきます。
読む :DockerCommitを使用してDockerイメージを構築する方法
読む :DockerFileを使用してDockerイメージを構築する方法
「mycentos:httpdv1.0」というDockerイメージを作成しました 」の「build.itzgeek.local 」と表示され、プライベートレジストリサーバーにアップロードされます。
root @ build:〜#docker images
出力:
ここで、Dockerイメージの名前をregistryserver:portnumber/image name:tag
のように変更します。 。
イメージ名が指定された形式と一致しない場合、docker pushまたはpullコマンドは、プライベートレジストリからではなく、パブリックレジストリからイメージをアップロードまたはダウンロードしようとします。
Dockerイメージの名前を変更するには、docker tag
を使用します コマンド。
root @ build:〜#docker tag mycentos:httpdv1.0 Registry.itzgeek.local:5000 / mycentos:httpdv1.0
Dockerイメージのリストをもう一度確認してください。
通信モードによって異なります(安全または非安全 )Dockerレジストリの場合は、以下のいずれかの方法に従ってください。
非セキュア(プレーンHttpレジストリ)
ファイル「daemon.json」を編集/作成します 」の「/etc / docker / 」ディレクトリ。
root @ build:〜#vi /etc/docker/daemon.json
以下の内容を追加してください。
{"insecure-registries":["registry.itzgeek.local:5000"]}
安全(自己署名)
証明書「ca.crt」をコピーします 」レジストリサーバー「registry.itzgeek.local 」から「/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt」 」の「build.itzgeek.local 「。
root @ build:〜#mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/root@build:~# scp -pr [email protected]:/ certs / ca .crt /etc/docker/certs.d/registry.itzgeek.local:5000/
どちらの場合も、Dockerエンジンサービスを再起動する必要があります。
root @ build:〜#systemctl restart docker
次のコマンドを使用して、Dockerイメージをプライベートレジストリサーバーにアップロードします。
root @ build:〜#docker push Registry.itzgeek.local:5000 / mycentos:httpdv1.0
プライベートレジストリサーバーからDockerコンテナイメージをダウンロードしてデプロイする
デプロイするDockerエンジンノードにログインします。例: 「deploy.itzgeek.local 「。
Dockerレジストリの通信モード(セキュアまたは非セキュア)に応じて、以下のいずれかの方法に従います。
非セキュア(プレーンHttpレジストリ)
ファイル「daemon.json」を編集/作成します 」の「/etc / docker / 」ディレクトリ。
[root @ deploy〜]#vi /etc/docker/daemon.json
以下の内容を追加してください。
{"insecure-registries":["registry.itzgeek.local:5000"]}
安全(自己署名)
証明書「ca.crt」をコピーします 」レジストリサーバー「registry.itzgeek.local 」から「/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt」 」の「deploy.itzgeek.local 「。
[root @ deploy〜]#mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ [root @ deploy〜]#scp -pr [email protected]:/ certs /ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
どちらの場合も、Dockerエンジンサービスを再起動する必要があります。
[root @ deploy〜]#systemctl restart docker
次のコマンドを使用して、Dockerイメージをプライベートレジストリサーバーにダウンロードします。
[root @ deploy〜]#docker pull Registry.itzgeek.local:5000 / mycentos:httpdv1.0
次に、「docker画像」を使用して利用可能な画像のリストを確認します ”コマンド
[root @ deploy〜]#docker images
出力:
これで、Dockerイメージをデプロイする準備が整いました。
読む : Dockerコンテナをデプロイする方法–コマンドラインインターフェース
以上です。