QNAP TS-228A のコンテナ機能を使用して、 Docker Registry をつくる手順を記載しています。
どうも、ごえごえです。我が家のデータのほとんどは数年前に購入した QNAP の TS-228A という NAS に保存してます。ここから写真やビデオのバックアップを Amazon Photos だったり、Google フォトにバックアップしたりしています。昔と比べて動画をストリーミングで見ることが多くなったためか、数TB 単位で容量が余っているので、 NAS をなんとか(諸事情もあり)有効活用できないか考えていました。
ふーーん、あんなに必要だといって 3TB 買ったのに余ってるのね
ただちに有効活用します!
なんと、QNAP TS-228A は Container Station というアプリケーションを使用することで LXC や Docker を使うことができます。
ただし、TS-228A はエントリーモデル。搭載メモリは 1GB で CPU が ARM なんです。気軽に Docker 使うにはどうしても微妙で、これまで何度も Docker で何か起動してはメモリが足りなくなり停止していてイマイチ活用できてません。
そこで、今回はそれほど負荷がかからずにストレージとしての役割も果たせそうで、なにより Docker Hub だと Private Repository が 1つまでという制限も回避できるだろう。
ということで、QNAP にプライベートレジストリ環境として Docker Registry を作ってみました。
Docker Registry のインストール
Docker Registry 用ディレクトリの作成
Docker Registry で使用するディレクトリを「FileStation」を起動して作成します。ここでは例として「DataVol1/Container/docker-registry」というディレクトリを作成してます。
Container Station の起動
QNAP の Web GUI にログインしてデスクトップの Container Station を起動します。
もしも、インストールされていない場合は、App Center の「ユーティリティ」からインストールしてください。
registry のインストール
Container Station が起動したら、「作成」をクリックし検索スペースに「registry」と入力します。
検索結果で Docker 公式の 「registry」が表示されると思いますので、「インストール」をクリックします。
「バージョン」で「latest」を選択するとARMが選択されます。
免責が表示されるので確認して「OK」をクリックします。
「コンテナの作成」で「名称」や「メモリー制限」を任意で設定後、「詳細設定」をクリックします。
「ネットワーク」で「ネットワークモード」を自身の環境に適切な設定にします。よくわからなければ一旦は「NAT(bridge)」を選択でいいと思います。ホスト側のポートも任意です。
「共有フォルダ」で「ホストからのボリューム」に事前に作成していたディレクトリを指定します。「マウントポイント」は /var/lib/registry を設定します。
「詳細設定」をクリックして「コンテナの作成」画面に戻り「作成」をクリックします。サマリが表示されるので内容を確認して「OK」をクリックします。
「Container Station」に戻り、左ペインの「コンテナ」でインストール後の状態を確認することができます。ポート番号や起動状態などを確認しておくといいです。
Docker イメージの作成
Docker イメージのダウンロード
実際に Docker Registry が使用できるのか確認するため、Docker がインストールされた端末で Docker イメージを作成します。今回は ubuntu 18.04 を pull して Docker イメージを作成しています。
$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
423ae2b273f4: Pull complete
de83a2304fa1: Pull complete
f9a83bce3af0: Pull complete
b6b53be908de: Pull complete
Digest: sha256:04d48df82c938587820d7b6006f5071dbbffceb7ca01d2814f81857c631d44df
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 72300a873c2c 2 weeks ago 64.2MB
Docker イメージの起動とアプリケーションのインストール
ダウンロードしたイメージを起動して、apt-get update を実行します。その後で今回は iproute 2 をインストールしてみます。
$ docker run -it ubuntu:18.04 /bin/bash
$ apt-get update
$ apt install iproute2
$ exit
Docker イメージの作成
docker commit コマンドで個別にアプリケーションをインストールした Docker イメージを作成します。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07c5fd4dae88 ubuntu:18.04 "/bin/bash" 5 minutes ago Exited (0) 48 seconds ago nifty_beaver
$ docker commit 07c5f iproute2
sha256:4c0aab89bb6c154c35553379ddd
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
iproute2 latest 4c0aab89bb6c 25 seconds ago 95.7MB
ubuntu 18.04 72300a873c2c 2 weeks ago 64.2MB
作成したイメージを起動して確認
新しく作成したイメージを起動して iproute2 のインストールがされていることを確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
iproute2 latest 4c0aab89bb6c 25 seconds ago 95.7MB
ubuntu 18.04 72300a873c2c 2 weeks ago 64.2MB
$ docker run -it iproute2:latest /bin/bash
root@79b94b270f6e:/# ss ← 実行ができることの確認
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
$ exit
Docker イメージにタグ付け
Docker イメージに以下の手順でタグ付けします
$ docker tag iproute2 192.168.1.200:5555/ubuntu-iproute2
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.200:5555/ubuntu-iproute2 latest 4c0aab89bb6c 19 minutes ago 95.7MB
iproute2 latest 4c0aab89bb6c 19 minutes ago 95.7MB
ubuntu 18.04 72300a873c2c 2 weeks ago 64.2MB
Docker Registry へアップロード
作成した Docker Registry へアップロードします。
$ docker push 192.168.1.200:5555/ubuntu-iproute2
The push refers to repository [192.168.1.200:5555/ubuntu-iproute2]
6a2f5d2f78a7: Pushed
1852b2300972: Pushed
03c9b9f537a4: Pushed
8c98131d2d1d: Pushed
cc4590d6a718: Pushed
latest: digest: sha256:aaab1eab88e550d9e637b0473cc346095c89dcb08e5b1f9bd4f2743129dd6615 size: 1364