概要
kubernetesを使う上でコンテナレジストリの機能が欲しいと思いましたので、インストール手順を確認してみました。
環境
# | ソフトウェア | バージョン |
1 | Virtualbox | 7.0.4 |
2 | Rocky Linux | 9.1 |
3 | docker-ce | 20.10.22-3 |
4 | containerd.io | 1.6.14.03.1 |
5 | docker-compose-plugin | 2.14.1-3 |
6 | harbor | 2.7.0 |
前提
- Rocky Linuxのインストールで「最小限のインストール」を選択
- 検証であるため、firewalldを無効化
- Harborオフラインインストールパッケージの配置については省略
- インターネットに接続できる環境で実施
手順
事前設定
1.ホスト名の設定
hostnamectl set-hostname <ホスト名>
2.hostsの修正
※必要な名前解決を追加する。
vi /etc/hosts
3.OSの再起動
shutdown -r now
dockerのインストール
1.dockerのrepoを登録
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
2.dockerのインストール
※対話は全て「y」を押下する。
dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
3.dockerの起動と自動起動設定
systemctl enable --now docker
HTTPS用の証明書作成
1.ディレクトリ移動
cd /tmp/harbor
2.CA証明書のプライベートキーを作成
openssl genrsa -out ca.key 4096
3.CA証明書の作成
※サブジェクトは所属している組織に合わせて修正が必要です。
openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=<ドメイン名>" \ -key ca.key \ -out ca.crt
4.プライベートキーの作成
openssl genrsa -out <ドメイン名>.key 4096
5.CSRの作成
※サブジェクトは所属している組織に合わせて修正が必要です。
openssl req -sha512 -new \ -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=<ドメイン名>" \ -key <ホスト名>.key \ -out <ホスト名>.csr
6.x509 v3 拡張ファイルの作成
6.x509 v3 拡張ファイルの作成 cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=<ドメイン名> DNS.2=<サブドメイン名> DNS.3=<ホスト名> EOF
7.v3.extファイルを使用して証明書の作成
openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in <ホスト名>.csr \ -out <ホスト名>.crt
Harbor及びDockerへ証明書の配置
1.harborが使用する証明書とプライベートキーの配置
※後ほどharbor.ymlファイルにパスを記載します。
mkdir -p /data/cert cp <ホスト名>.crt /data/cert/ cp <ホスト名>.key /data/cert/
2.Dockerが使用可能な証明書に変換
openssl x509 -inform PEM -in <ホスト名>.crt -out <ホスト名>.cert
3.Dockerが使用する証明書フォルダに配置
mkdir -p /etc/docker/certs.d/<ホスト名>:<ポート>/ 例:mkdir -p /etc/docker/certs.d/harbor:443/ cp <ホスト名>.cert /etc/docker/certs.d/<ホスト名>:<ポート>/ cp <ホスト名>.key /etc/docker/certs.d/<ホスト名>:<ポート>/ cp ca.crt /etc/docker/certs.d/<ホスト名>:<ポート>/
4.dockerの再起動
systemctl restart docker
harborのインストール
1.オフラインインストールパッケージの解凍
※事前に/data/harborに配置しています。
tar xzvf harbor-offline-installer-<バージョン>.tgz
2.harbor.ymlの編集
cd ./harbor mv harbor.yml.tmpl harbor.yml vi harbor.yml ※以下のオプション(★の箇所)を修正する。 ---------------------------------------------------- # Configuration file of Harbor # The IP address or hostname to access admin UI and registry service. # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients. hostname: <ホスト名>★ # http related config http: # port for http, default is 80. If https enabled, this port will redirect to h ttps port port: 80 # https related config https: # https port for harbor, default is 443 port: 443 # The path of cert and key files for nginx certificate: /data/cert/<ホスト名>.crt★ private_key: /data/cert/<ホスト名>.key★ ※以下省略 ----------------------------------------------------
3.harborのインストール
./install.sh
その他手順
Harborの起動停止
Harborの起動
cd <harborのdocker-compose.ymlが配置されているディレクトリ> docker compose start
Harborの停止
cd <harborのdocker-compose.ymlが配置されているディレクトリ> docker compose stop
レジストリ登録手順例
hello-worldのコンテナをレジストリに登録する手順となります。
1.tagを変更
ocker tag <IMAGE ID> <ホスト名>:443/library/hello-world
2.harborにログイン
docker login <ホスト名>:443
3.コンテナをレジストリに登録
docker push <ホスト名>:443/library/hello-world
コメント