GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS 7 / Ubuntu 16.04 /Fedora26/25でDockerプライベートレジストリをセットアップする方法

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エンジンノードとして機能します。
ここでは、混合(OS)環境を使用してデモンストレーションを行っています。発生する問題のトラブルシューティングが容易な同種の環境のみを使用することをお勧めします。

前提条件

すべてのノードに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イメージをアップロードする

通信モードによって異なります(安全または非安全 )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コンテナをデプロイする方法–コマンドラインインターフェース

以上です。


Cent OS
  1. RockyLinux8でプライベートDockerレジストリをセットアップする方法

  2. CentOS 7 / Ubuntu 16.04 / Debian 9 /Fedora27/26でAutofsを設定する方法

  3. CentOS、RHEL、FedoraでSVNサーバーをセットアップする方法

  1. プライベートDockerレジストリを設定して使用する方法

  2. CentOS7にDockerComposeをインストールする方法

  3. CentOS / RHEL / Fedora に docker をインストールする方法

  1. CentOS8にDockerをインストールする方法

  2. CentOS7にRancherをインストールする方法

  3. Kubernetes(k8s)でプライベートDockerレジストリを設定する方法