ローカルにある docker イメージをリモートサーバの microk8s のリポジトリに読み込ませる方法

Posted by: ytyng 1 month, 3 weeks 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

Currently unrated

Comments

Archive

2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011