このドキュメントで説明されているソフトウェアはサポートされていないか、拡張サポートが提供されています。
現在サポートされているリリースにアップグレードすることをお薦めします。
Dockerレジストリ・サーバーを設定する前に、次の点に注意してください:
レジストリ・サーバーはDockerコンテナ・アプリケーションです。 パブリックDockerハブまたはサポートが必要な場合は、Oracle Container Registryからレジストリ・イメージをダウンロードするには、ホストにインターネット接続が必要です。
レジストリ・サーバーは、デフォルトでポート5000上で実行されます。 OpenStack Keystoneサービスなど、同じTCPポートを使用する代替サービスを実行する場合は、ポートの競合を避けるために構成を変更する必要があります。 レジストリ・サーバーへのアクセスを必要とするすべてのシステムは、このポートで自由に通信できる必要があるため、これを防ぐファイアウォール・ルールを調整してください。
レジストリ・ホストには、WebサーバーにSSLを使用する場合と同様に、有効なSecure Sockets Layer(SSL)証明書と秘密鍵が必要です。
ホストにすでにSSL証明書がある場合は、その証明書を使用できます。 ただし、中間証明機関(CA)によってSSL証明書が発行された場合は、ホストSSL証明書と中間CA証明書を組み合わせてDockerがホストSSL証明書を検証できるように証明書バンドルを作成する必要があります。 次に例を示します。
#
cat registry.example.com.crt intermediate-ca.pem > domain.crt
ホストにまだSSL証明書がない場合は、次の手順でテスト目的で自己署名証明書を作成する方法について詳しく説明します。
レジストリ・サーバーには、レジストリ・データを格納するために少なくとも15GBの空きディスク容量が必要です。 これは通常
/var/lib/registry
にあります。 この目的のために、別のbtrfs形式のファイルシステムを作成して、簡単にレジストリを拡張し、このファイルシステム内のスナップショットなどの機能を活用できるようにすることをお勧めします。 次の手順では、1つまたは複数の使用可能なデバイスを使用してbtrfsファイルシステムを設定する方法について詳しく説明します。 デバイスは、ディスク・パーティション、LVMボリューム、ループバック・デバイス、マルチパス・デバイス、またはLUNのいずれかです。
Dockerレジストリ・サーバーを設定するには:
レジストリのbtrfsファイルシステムを作成します。
btrfsファイルシステムは、
btrfs-progs
パッケージで使用可能なユーティリティを使用して作成します。このパッケージは、デフォルトでインストールする必要があります。1つまたは複数のブロック・デバイスでbtrfsファイルシステムを作成します:
# mkfs.btrfs [-L
label
] block_device ...ここで、
-L
は、ファイルシステムのマウントに使用できるオプションのラベルです。label
次に例を示します。
パーティション
/dev/sdc1
にファイルシステムを作成するには:#
mkfs.btrfs -L var-lib-registry /dev/sdc1
パーティションはすでに存在している必要があります。 必要に応じてfdisk(MBRパーティション)やgdisk(GPTパーティション)などのユーティリティを使用して作成します。
2つのディスク・デバイス間でファイルシステムを作成するには、
/dev/sdd
と/dev/sde
:#
mkfs.btrfs -L var-lib-registry /dev/sd[de]
デフォルトの構成では、ファイルシステムのデータ(
raid0
)をストライプ化し、ファイルシステムのメタデータ(raid1
)をデバイス間でミラー・リングします。 必要なRAID構成を指定するには、-d
(data)および-m
(metadata)オプションを使用します。raid10
では、偶数のデバイスを指定する必要があり、少なくとも4つのデバイスが必要です。ol
ボリューム・グループ内のdocker-registry
という名前の論理ボリュームにファイル・システムを作成するには、次のようにします:#
mkfs.btrfs -L var-lib-registry /dev/ol/docker-registry
論理ボリュームはすでに存在していなければなりません。 必要に応じてLogical Volume Manager(LVM)を使用して作成します。
btrfsファイルシステムの作成の詳細については、次の「Oracle Linux管理者ガイドforリリース6」を参照してください:
https://docs.oracle.com/cd/E37670_01/E41138/html/ol_create_btrfs.html
/var/lib/registry
にbtrfsファイルシステムをマウントします。btrfsファイルシステムを含むデバイスのUUIDを取得します。
blkidコマンドを使用してデバイスのUUIDを表示し、次のようにこの値を書きとめておきます。
#
blkid /dev/sdc1
/dev/sdc1: LABEL="var-lib-registry" UUID="50041443-b7c7-4675-95a3-bf3a30b96c17" \ UUID_SUB="09de3cb1-2f9b-4bd8-8881-87e591841c75" TYPE="btrfs"btrfsファイルシステムが複数のデバイスにまたがって作成されている場合は、いずれかのデバイスを指定してUUIDを取得できます。 または、「btrfsファイルシステム・ショー」コマンドを使用してUUIDを表示することもできます。 論理ボリュームの場合は、
/dev/ol/docker-registry
などのデバイスとして論理ボリュームへのパスを指定します。UUID_SUB
の値は無視してください。/etc/fstab
ファイルを編集し、システムの起動時にファイルシステムが確実にマウントされるようにエントリを追加します。UUID=
UUID_value
/var/lib/registry btrfs defaults 0 0UUID_value
を前のステップで見つかったUUIDに置き換えます。 btrfsファイルシステムのラベルを作成した場合は、UUIDの代わりにラベルを使用することもできます。たとえば、次のようにします:LABEL=
label
/var/lib/registry btrfs defaults 0 0/var/lib/registry
ディレクトリを作成します。#
mkdir /var/lib/registry
/etc/fstab
にリストされているすべてのファイルシステムをマウントします。#
mount -a
ファイルシステムがマウントされていることを確認します。
#
df
Filesystem 1K-blocks Used Available Use% Mounted on ... /dev/sdc1 ... ... ... 1% /var/lib/registry
DockerにホストのSSL証明書と秘密鍵を追加します。
/var/lib/registry/conf.d
ディレクトリを作成します。#
mkdir -p /var/lib/registry/conf.d
ホストのSSL証明書と秘密鍵を
/var/lib/registry/conf.d
ディレクトリにコピーします。#
cp
#certfile
/var/lib/registry/conf.d/domain.crtcp
keyfile
/var/lib/registry/conf.d/domain.keyここで、
certfile
はホストのSSL証明書へのフルパスで、keyfile
はホストの秘密鍵へのフルパスです。 次に例を示します。#
cp /etc/pki/tls/certs/registry.example.com.crt \ /var/lib/registry/conf.d/domain.crt
#cp /etc/pki/tls/private/registry.example.com.key \ /var/lib/registry/conf.d/domain.key
ホストにSSL証明書と秘密鍵がない場合は、次のようにテスト目的で自己署名証明書を作成できます:
#
cd /var/lib/registry/conf.d
#openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days 365 \ -keyout domain.key -out domain.crt
Generating a 4096 bit RSA private key ............................................................................................ ............................................................................................ .....++ ............................................................................................ ............................................................................................ .........................++ writing new private key to 'domain.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Massachusetts
Locality Name (eg, city) [Default City]:Boston
Organization Name (eg, company) [Default Company Ltd]:Example Com
Organizational Unit Name (eg, section) []:DevOps
Common Name (eg, your name or your server's hostname) []:registry.example.com
Email Address []:admin@example.com
共通名は、ホストの完全修飾ドメイン名(FQDN)と同じである必要があります。
秘密鍵のファイル・アクセス権を変更する:
#
chmod 600 /var/lib/registry/conf.d/domain.key
ファイアウォールを実行している場合は、待機するDockerレジストリに接続するTCPポートがアクセス可能であることを確認する必要があります。
iptablesを実行している場合は、次のようにルールを追加できます:
#
iptables -I INPUT -p tcp -m tcp --dport
#5000
-j ACCEPTservice iptables save
Dockerレジストリ・コンテナを作成します。
#
docker run -d -p
Unable to find image 'registry:latest' locally latest: Pulling from library/registry 8387d9ff0016: Pull complete 3b52deaaf0ed: Pull complete 4bd501fad6de: Pull complete a3ed95caeb02: Pull complete 1d4dc7bffbb8: Pull complete 7c4baf947271: Pull complete e14b922ad4f5: Pull complete f1d1dbdd4f97: Pull complete f2bbca3948d0: Pull complete 4e3899dc28fa: Pull complete Digest: sha256:f374c0d9b59e6fdf9f8922d59e946b05fbeabaed70b0639d7b6b524f3299e87b Status: Downloaded newer image for registry:latest e6232c2bae1f4918d22e931b3b40434aea5ab2964c0e3e01b67a1481f780425b5000
:5000 --name registry --restart=always \ -v /var/lib/registry:/registry_data \ -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry_data \ -e REGISTRY_HTTP_TLS_KEY=/registry_data/conf.d/domain.key \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/registry_data/conf.d/domain.crt \ registry:latestレジストリ・イメージがパブリックDocker Hubから取得され、Dockerレジストリ・コンテナが開始されます。
--restart=always
オプションは、Dockerが起動されるたびにレジストリ・コンテナが開始されるようにします。 必要に応じて、上記のコマンドの5000
を、使用したいポート番号と一致するように変更して、ドッキング・レジストリの代替ポート番号をマップすることができます。レジストリ・ホストが自己署名SSL証明書を使用する場合は、ローカルDockerレジストリを使用するデプロイメント内のallホストにSSL証明書を配布する必要があります。
次のステップを実行します。「各ホスト上で」(
registry_hostname
はレジストリ・ホストの名前)、port
はDockerレジストリ・サーバー用に選択したポート番号(デフォルトは5000)です:/etc/docker/certs.d/
ディレクトリを作成します。registry_hostname
:port
#
mkdir -p /etc/docker/certs.d/
registry_hostname
:port
レジストリ・ホストからSSL証明書をコピーします。
#
scp root@
registry_hostname
:/var/lib/registry/conf.d/domain.crt \ /etc/docker/certs.d/registry_hostname
:port
/ca.crt次に例を示します。
#
mkdir -p /etc/docker/certs.d/registry.example.com:5000
#scp \ root@registry.example.com:/var/lib/registry/conf.d/domain.crt \ /etc/docker/certs.d/registry.example.com:5000/ca.crt
docker
サービスを再起動します。#
service docker restart