QNAPのContainer Stationにリモートからコマンドラインで接続

投稿者: | 6月 8, 2025

昨今の電気代の高騰。結構えげつない。一時期、そこいらの町工場?くらいの電気代がかかっていた。以前は、仮想環境関連の仕事をやっていて、サーバやらストレージの電源が常時はいっていた。一方、動かす環境をコンテナファーストでコンテナ環境に移してきていて、仮想環境はもうだいぶ要らなくなっている。とはいえ、コンテナ環境を別途立ててしまうと何も変わらないので、CPU、メモリもだいぶ増えたので、積極的にQNAPのコンテナ環境を使うようにしている。

 

閑話休題

 

QNAPのコンテナは、Container StationというUIから、DockerやLXDが動くようになっている。しかし、実際はコマンドラインが楽。sshでログインをすれば、dockerやlxcコマンドが動く。しかし、いちいちSSHで接続するのはめんどくさい。リモートの環境でもQNAPのLXDとDockerがあたかもローカルで動いているようにする方法を調べた。

 

接続元は、Ubuntu Server 24.04としている。(ただ、OSを入れただけ)設定を読み解けば、Windowsでも多分設定は可能だと思う。

QNAPのIPアドレスは、192.168.10.233 としている。

 

LXDの設定

QNAP側の設定

QNAPにsshでログインして、以下を行う。

lxc config set core.https_address "[::]:8443”
lxc config set core.trust_password “StrongPassword123”
lxc config get core.https_address
lxc config show --expanded

ちなみに設定を解除するには?

lxc config unset core.https_address
lxc config unset core.trust_password
lxc config get core.https_address
lxc config show —expanded

クライアント側の設定

goで入れる。goで作ったlxcが使われることも確認

curl -OL https://go.dev/dl/go1.24.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz
mkdir -p $HOME/go/bin
cat << 'EOF' > /etc/profile.d/go.sh
export PATH=/usr/local/go/bin:$HOME/go/bin:$PATH
EOF
source /etc/profile.d/go.sh
go install github.com/canonical/lxd/lxc@latest
which lxc

動作確認

LXDPASS=“StrongPassword123”
QNAPHOST=192.168.10.233
LXDNAME=qnap1-test

lxc remote add ${LXDNAME} ${QNAPHOST} --password ${LXDPASS} --accept-certificate
lxc remote list
lxc remote get-default
lxc list ${LXDNAME}:
lxc remote switch ${LXDNAME}
lxc remote get-default
lxc remote list

ちなみにサーバの登録を解除するには?  

lxc remote get-default
lxc remote remove qnap1-test
lxc remote switch local
lxc remote get-default

 

Dockerの設定

クライアント側の設定

dockerクライアントとcomposeしか入れない。

apt update
apt -y install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt -y install docker-ce-cli docker-compose

事前に証明書をダウンロードして/tmpにアップロードをしておく。

DOCKERCER=$HOME/.docker

mkdir -p ${DOCKERCER}
cd ${DOCKERCER}
apt -y install unzip
unzip /tmp/cert.zip
rm /tmp/cert.zip
cd
chmod 0400 ${DOCKERCER}/key.pem
chmod 0444 ${DOCKERCER}/ca.pem ${DOCKERCER}/cert.pem

証明書のパスはフルパスではないとダメ。~/.docker/ca.pemでは認識しない。

QNAPHOST=192.168.10.233
DOCKERNAME=qnap1-test
DOCKERCER=$HOME/.docker

docker context create ${DOCKERNAME} --description “QNAP Container Station” \
--docker "host=tcp://${QNAPHOST}:2376,ca=${DOCKERCER}/ca.pem,cert=${DOCKERCER}/cert.pem,key=${DOCKERCER}/key.pem”
docker context ls
docker context use ${DOCKERNAME}
docker context ls
docker ps

ちなみにサーバの登録を解除するには?  

docker context use default
docker context rm qnap1-test
docker context ls

 

(オマケ)KVM (Virtualization Station)

事前に、QNAPのadminユーザを有効にして、鍵認証でSSHログインができるようにしておく。

以下のようにしか接続ができなかった。

ssh admin@192.168.10.233 /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/virsh list --all

 

これで、QNAPのUIを使うことなく、あたかもローカル環境のような感覚でコンテナ環境を使うことができるようになった。自分は、この操作端末もQNAPのLXDで起動しているので、すべてNASの中で完結している。KVMでUbuntuを建てようかとも思ったが、パフォーマンスのことを考えると全く魅力はない。さらに、これができると気軽にLXDでCloud-initが使える。これが一番の目的だったかもしれない。

コメントを残す