ローカルにある docker イメージをリモートサーバの microk8s のリポジトリに読み込ませる方法
kubernetes
2022-06-19 11:51 (3 years ago)
自宅サーバや社内サーバで Kubernetes を運用している際、手元の Mac でビルドした Docker イメージを、外部のイメージリポジトリ(DockerHub, ECR等) を介さずに、SSH でサーバに Push したい場合のやりかた。
ローカルの Docker イメージを、リモートサーバの Docker 用のイメージとしてロードさせる場合
まずは、Kubernetes に関係なく、ローカルの Docker から リモートの Docker にイメージを送る方法。
docker save ${image_name}:${image_tag} | ssh -C username@remote.example.com docker load
とすれば、ローカルの Docker イメージを直接リモートサーバに送信できる。
ただし、イメージリポジトリを使って docker push / docker pull を使う方法と比べると、更新のあったレイヤのみの差分更新はされず、全レイヤをすべて通信するため、比較して動作は遅い。
リモートサーバで MicroK8s (ctr) を使っている場合
サーバで MicroK8s を使っている場合、サーバ内の docker のイメージリポジトリとは別に、ctr 用のイメージリポジトリが作られ、MicroK8s ではその ctr を使うため、docker load してたイメージは使えない。
MicroK8s で ctr にイメージをインポートするには、
docker save mynginx > myimage.tar
microk8s ctr image import myimage.tar
参考 https://microk8s.io/docs/registry-images
上記のように、 ctr image import コマンドを使う。このコマンドは標準入力からのインポートはサポートしていないため、一旦イメージをファイルに保存する必要がある。
ローカルのイメージを、リモートの ctr に読み込ませるには
docker save ${image_name}:${image_tag} | ssh -C username@remote.example.com "cat > /tmp/_exported_image.tar"
ssh username@remote.example.com "sudo microk8s ctr image import /tmp/_exported_image.tar"
このように、一旦ファイルに書き込んでから microk8s ctr image import するとできる。
sudo が必要なので、sudores に下記のように登録しておくと良いと思う。
/etc/sudoers.d/91-working-users
username ALL=(ALL) NOPASSWD: /snap/bin/microk8s
評価をお願いします
現在の評価: 4.5 (2)
著者は、アプリケーション開発会社 Cyberneura を運営しています。
開発相談をお待ちしています。
開発相談をお待ちしています。