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