自分は、氷河期世代のインフラ系エンジニアだったおじさんで、以前はホームラボがドーンとあったんだが、ほとんど撤去、残したマシンもほとんど電源を入れていない。QNAP TS-464が一個動いているだけ。そもそも何か確認したいときは、LXDあるいはDockerでことが済んでしまう。どうしても仮想マシンとなるとLinuxであれば最悪KVM。なんてったて、TS-464にメモリが64GBもあるので。CPUがちょっと貧弱だが。
それにしても、俗に言うインフラをやっている人はあんまり気にならないかもしれないが、コンテナの利用が加速的増えてきたような気がする。ちょっとした開発から大型の環境まで、Docker/PodmanあるいはKubernetesに。何年か前は、コンテナはまだまだかもと言っていたがもうそれどころではない。
コンテナの最初の入り口の難関は、仮想マシンの考え方があまり役に立たないことかもしれない。コンテナイメージは仮想マシンではなく、強いて言えばOSにアプリケーションが1つ入ったもの。OSもアプリケーションもバージョンが変わるので、コンテナイメージを管理しなきゃいけない。コンテナは仮想マシンじゃないので、動いているコンテナでの変更ではなく、元のイメージで変更をする。大抵元のイメージは、Docker Hubなどから持ってくるが、いざ、変更した場合、自分のストレージに持っておかなければならない。それがDocker Registryサーバ。よって、DockerやKubernetesを真剣にやるとなると、Registryサーバが必要不可欠。ただ、Registryサーバはたいてい自分で用意するものであって、インストーラーとかにはついてこない。Registryサーバは、DockerあるいはLinuxが動き、ストレージがあればいいので、いっそQNAPで動かそうということに。
閑話休題
以前、同じようなエントリを書いたのだがだいぶ変わっていたので改めて。
https://www.blog.slow-fire.net/2021/06/07/qnapでdockerレポジトリサーバの作成/
事前にQNAPにSSHでログインをして、イメージが使うディレクトリを確保しておく。config.ymlは少しカスタマイズしてある。
sudo mkdir -p /share/Share/docker/registry-v2/config
sudo mkdir -p /share/Share/docker/registry-v2/data
cat << 'EOF' > config.yml
version: 0.1
log:
level: info
formatter: text
fields:
service: registry
accesslog:
disabled: false
stdout: true
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
relativeurls: false
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
maintenance:
uploadpurging:
enabled: true
age: 168h
interval: 24h
dryrun: false
EOF
sudo mv config.yml /share/Share/docker/registry-v2/config
Contaner Stationを立ち上げて、右上のExploreをクリック。
Registryで検索
Docker Hubからregistryを検索。App Templateから作るとv2.8.1固定だが、Docker Hubだと2.8.3や3.0.0が作れる。2.8.3を選択。3.0.0はまだやめた方がいい。
Restart policyは、Alwaysに。またポートの設定は、Hostの部分にQNAPで公開するポートを入れる。ポートを入れないと接続できない。
マウントの設定を行う。
- /share/Share/docker/registry-v2/data
- /var/lib/registry
-> /var/lib/registryの内容がホストの/share/Share/docker/registry-v2/dataになる。共有で言うと、/Share/docker/registry-v2/dataとなる。
- /share/Share/docker/registry-v2/config
- /etc/docker/registry
-> /etc/docker/registryの内容がホストの/share/Share/docker/registry-v2/configになる。共有で言うと、/Share/docker/registry-v2/configとなる。
config.ymlの書き換えが楽になる。
これでFinishをクリック
うまくいけばRunningになる。うまく行かないときは、config.ymlに問題がある。Logsタブでメッセージを確認
動作確認といきたいところだが、dockerの設定を変えるまえに、reg コマンドで設定確認
reg コマンドのインストール
https://github.com/genuinetools/reg/releases/tag/v0.16.1
Linuxの場合
curl -Lo reg https://github.com/genuinetools/reg/releases/download/v0.16.1/reg-linux-amd64
chmod +x reg
mv reg /usr/local/bin/
以下で接続をする。
reg ls -f <QNAPのIPアドレス>:5000
以下のメッセージが出れば成功
Container Station自体にRegistryを登録
以下のような設定をする。設定をしたら、Test Connectionをクリック。成功したらApplyをクリックする。
登録が成功するとリストに表示される。
適当なイメージをPushしてみる。
タグ付けされて、Pushされる。
もう一度、Regコマンドで確認する。ちゃんと登録されている。
reg ls -f <QNAPのIPアドレス>:5000
ちなみにGUIで見たい場合は、
reg server -f -r <QNAPのIPアドレス>:5000 -p 8080
regコマンドを実行しているホストのポート18080にブラウザでアクセス。
http://<regコマンドを実行しているホスト>:18080
別のDockerホストから繋げたい場合は、
cat /etc/docker/daemon.json
{
"insecure-registries": [
"192.168.10.4:5000”
]
}
その後、Dockerを再起動
k3sから使えるようにしたい場合は
cat /etc/rancher/k3s/registries.yaml
mirrors:
"192.168.10.4:5000”:
endpoint:
- "http://192.168.10.4:5000”
その後、k3sを再起動
RegistryサーバのイメージをDockerやKubernetesから使う方法は割愛(それがわからない人にはこのページの意味はないので。)ちなみに、なぜ、v3.0.0にしなかったかというと、テレメトリーにアクセスできないというログが出ていたので、ログが見にくいからということで諦めた。