概要
- Quayのデプロイは下記のスペックのPCで行う
[root@container2 ~]# lscpu | head -8
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Vendor ID: Apple
BIOS Vendor ID: Apple
BIOS Model name: Apple silicon
- Quayをコンテナとしてでプロ視する前に以下のようばディレクトリ構造を用意する必要がある
[root@container2 ~]# tree /opt/quay/
/opt/quay/
├── config
├── postgres
└── storage
└── registry
- Quayに関するすべてのコンテナをPodに括ってデプロイする
[root@container2 ~]# podman pod create --name=quay-pod -p 8080:8080
3643de18184122940666ad950d8c0d25c980ae60aeb4075ec65edbc5114c510d
- Podの準備は完了だ
[root@container2 ~]# podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
3643de181841 quay-pod Created 6 seconds ago b674c123ab2a 1
- Quayはデータベースとして「Postgresql」を使用している
podman run -d --pod quay-pod --name quay-db -e POSTGRES_USER=quay -e POSTGRES_PASSWORD=quaypass -e POSTGRES_DB=quay -v /opt/quay/postgres:/var/lib/postgresql/data:Z docker.io/library/postgres:13
- Quayは「Redis」を使用している
podman run -d --pod quay-pod --name quay-redis docker.io/library/redis
- Quayの使うPostgresqlには「pg_trgm」というExtensionが必要になる
[root@container2 ~]# podman exec -it quay-db psql -U quay -d quay -c "CREATE EXTENSION pg_trgm;"
CREATE EXTENSION
- Quayの設定ファイルを作成する
[root@container2 ~]# vi /opt/quay/config/config.yaml
- データベースとRedisのコネクション設定とルートユーザーの情報を記入する
FEATURE_USER_INITIALIZE: true
SETUP_COMPLETE: true
FEATURE_REQUIRE_EMAIL_CONFIRMATION: false
SUPER_USERS:
- admin
SECRET_KEY: $(openssl rand -hex 32)
DATABASE_SECRET_KEY: $(openssl rand -hex 32)
DB_URI: postgresql://quay:quaypass@quay-db:5432/quay
REDIS_HOST: quay-redis
REDIS_PORT: 6379
BUILDLOGS_REDIS:
host: quay-redis
port: 6379
USER_EVENTS_REDIS:
host: quay-redis
port: 6379
DISTRIBUTED_STORAGE_CONFIG:
default:
- LocalStorage
- storage_path: /datastorage/registry
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- default
SERVER_HOSTNAME: 192.168.241.135:8080
PREFERRED_URL_SCHEME: http
- Quayにマウントされる「/opt/quay/storage」ディレクトリの権限を設定する
[root@container2 ~]# chown -R 1001:1001 /opt/quay/storage
[root@container2 ~]# chmod -R 775 /opt/quay/storage
- Quayを起動する
[root@container2 ~]# podman run -d --pod quay-pod --name quay -v /opt/quay/config:/conf/stack:Z -v /opt/quay/storage:/datastorage:Z quay.io/projectquay/quay:v3.12.15-arm64
- すべてのコンテナがUP状態になっている
[root@container2 ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b674c123ab2a 25 minutes ago Up 23 minutes 0.0.0.0:8080->8080/tcp 3643de181841-infra
24eceb5e815b docker.io/library/postgres:13 postgres 23 minutes ago Up 23 minutes 0.0.0.0:8080->8080/tcp, 5432/tcp quay-db
151934227aa9 docker.io/library/redis:latest redis-server 22 minutes ago Up 22 minutes 0.0.0.0:8080->8080/tcp, 6379/tcp quay-redis
9cbbee7327a3 quay.io/projectquay/quay:v3.12.15-arm64 registry Less than a second ago Up 1 second 0.0.0.0:8080->8080/tcp, 7443/tcp, 8443/tcp, 9091/tcp, 55443/tcp quay
- 問題なくQuayウェブにもアクセスできる
➜ ~ git:(develop) ✗ curl -o /dev/null -s -w "%{http_code}\n" http://container2:8080
200
- Quayウェブサイトに入ってルートユーザー名で会員登録をする
- メールサーバの設定はがないため、メール認証はできない
- データベースで強制的に認証フラグをアップデートする
[root@container2 ~]# podman exec -it quay-db psql -U quay -d quay -c "UPDATE \"user\" SET verified = true WHERE username = 'admin';"
UPDATE 1
- QuayレジストリーにアクセスするクライアントはTLS無視設定をする
[root@container2 ~]# vi /etc/containers/registries.conf.d/quay.conf
[root@container2 ~]# cat /etc/containers/registries.conf.d/quay.conf
[[registry]]
location = "192.168.241.135:8080"
insecure = true
- podman loginでカスタムQuayレジストリーにログインする
- アカウントはQuayウェブサイトで会員登録の際のアカウントである
[root@container2 ~]# podman login 192.168.241.135:8080
Username: admin
Password:
Login Succeeded!
- カスタムQuayにイメージをプッシュできた
[root@container2 ~]# podman push 192.168.241.135:8080/black/nginx
Getting image source signatures
Copying blob 495f44945d44 done |
Copying blob b6518a63d3f5 done |
Copying blob 9870c3588040 done |
Copying blob 52f372f2a633 done |
Copying blob e6133723babd done |
Copying blob 3e0268bbbafd done |
Copying blob e05580707e24 done |
Copying config 9e4696c649 done |
Writing manifest to image destination
- 逆にイメージのプールもできた
[root@container1 ~]# podman image pull 192.168.241.135:8080/black/nginx
Trying to pull 192.168.241.135:8080/black/nginx:latest...
Getting image source signatures
Copying blob 9832768625a4 skipped: already exists
Copying blob ce47c92e9d8e skipped: already exists
Copying blob df201bbfd12a skipped: already exists
Copying blob bdbcb9c2c29e skipped: already exists
Copying blob dc81109b5e81 skipped: already exists
Copying blob 49b3e94dfdaa skipped: already exists
Copying blob a0573bef783a skipped: already exists
Copying config 9e4696c649 done |
Writing manifest to image destination
9e4696c649b17b423f20292cae68e05ef6c813b01ae03853743497ef7621a72d
結論
- 社内イメージレジストリーが必要になった場合、Quayをデプロイして使用することを考慮してみよう
- Quayは割と簡単にデプロイできる