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

kubernetes
2022-06-19 20:51 (2年前) ytyng
View in English
この記事を歌う

自宅サーバや社内サーバで 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
タイトルとURLをコピー
著者は、アプリケーション開発会社 Cyberneura を運営しています。
開発相談をお待ちしています。

アーカイブ

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