1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Quay] カスタムリポジトリQuayをデプロイしてみた

1
Posted at

概要

  • 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は割と簡単にデプロイできる
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?