ラズパイのDockerからWSL2のDockerへ引っ越しする

Docker Nextcloud
待望のWindows10のMay 2020 Updateが一般に提供されました。何が良いってWSL2です。
WindowsでDockerが普通に動くようになったので、今まで別にLinuxサーバーを動かしてたのを停めてWindowsに集約できます。
Docker関連ファイルをラズパイから持ってくるのに手こずったのでメモしておきます。


Windows 10 May 2020 Updateはこちらから手動でアップデートしました。
May 2020 Update
Update Assistant が最新バージョンの Windows 10 へのアップデートをお手伝いします。開始するには、[今すぐアップデート] をクリックします。
私のところの2台のPCは問題なくアップデートできました。

早速WSL2をセットアップしました。
Windows 10 用 Windows Subsystem for Linux のインストール ガイド
そしてDocker Desktopをインストールします。
Using Docker in WSL 2
March 2, 2020 by Matt Hernandez, @fiveisprimeLast June, the Docker team announced that they will be investing in getting Docker running with the Windows Subsystem for Linux (WSL).
いままでRaspberry Pi 4 BのUbuntuでDockerを使っていましたが、Docker Desktopって便利ですね。動かしたコンテナを忘れる事があるので・・・

Dockerはx86/amd64アーキテクチャのイメージが豊富です。ラズパイなどARMの32bitのイメージはまだまだ少ないです。しかも少し動作がおかしい点も・・・
関連記事:

やっぱ、Docker使うならパソコンだね。と、WSL2を心待ちにしていました。

hello-worldが問題なく動いて、さぁラズパイからDockerファイルを持ってくるぞ!
・・・
どうやって?

ラズパイではローカルディレクトリをVolumeに割り当ててすべてのデータを一つのディレクトリで持ち運べるよう動かしていました。そのディレクトリをコピーすれば、RaspbianだろうがUbuntuだろうが自由に移動できます。Windowsへもディレクトリをコピーして持ってくればいいだけなんだけど・・・
コピーの条件としてパーミッション情報を維持すること。cpコマンドならpオプション必須です。これを忘れるとまともに動きません。

パーミッション情報というのがWindowsにとっては曲者です。ラズパイのSDメモリーカードをUSBカードリーダーでパソコンにつなぐとext4パーティションを認識しません。Windowsでext4フォーマットされたドライブを読むドライバーがあります。フリーのは古いしちょっと怪しい。有料のもなぁ。そもそもWindowsでどう認識されるのか?普通にエクスプローラで認識しただけだとファイルの所有者やグループのパーミッション情報が正しくコピーされるのか?ただファイルが見れれば良いというわけではありません。
Windowsでパーティションを読んでコピーする方法はダメそうです。

なんでWindowsをかますんだ?WSL2もラズパイもLinuxです。直接ネットでコピーすればいいでしょ!
はて?どうやって? パーミッション情報維持のためSMBはダメです。
LinuxにはNFS(Network File System)というのがあります。
Network File System (NFS)
A Network File System (NFS) allows you to share a directory located on one networked computer with other computers or devices on the same network. 
これで解決。設定を・・・・めんどくさ!
WindowsユーザーなのでLinuxを使っていてもSMBしかいじったことがありません。Linux間のネットワーク共有なんて標準でできると勝手に思っていました。

こうなったらSSHでコピーです。SCPで・・・。Winodwsのターミナルにrloginを使っているからSFTPでもいいか。
えーと、こっちでsudoで・・・あっちはsuか・・・suのパスワード設定してないや。rootのパスワード設定しないとrootのファイルが持ってこれない・・・。ちょっとイヤ。やりたくない。
こっちのsudoって?WSL2もrootパスワードが必要?やる気無くした!

お手軽な方法が無くなった!真面目に設定しなきゃダメなのか?ちょっとファイルをコピーしたいだけなのに・・・
そーだ、ディレクトリを全部tarで圧縮してSFTPで送れば簡単だ。tarでパーミッションを維持するオプションを忘れず付ければファイル一つの移動ですべて解決!
圧縮は
tar cvzfp xxx.tar.gz ディレクトリ名
解凍は
tar xvzfp xxx.tar.gz

これで無事にラズパイからWSL2へDockerディレクトリの移動ができました。

ラズパイで動かしてたNextcloud、少し設定を修正してあっさり動きました。
Docker Nextcloud
関連記事:Raspberry Pi 3でNextcloudを動かす時の注意点

まとめ

WSL2のDocker Desktopはとても便利。docker-composeも最初から入ってます。

パーミションを維持してDockerの使うボリュームファイルをコピーすれば、ラズパイで動いていたプログラムがWindowsでもすぐに動きます。パーミション情報を維持してコピーする方法に手こずりました。パーミッション情報を維持してtar圧縮してしまえばWindows経由でも簡単に移動できます。

WS2はすばらしい!
あとはUSBカメラやGPUなどハードウエアへアクセスできるようになればLinuxサーバーマシンを別に用意する必要はほぼなくなります。WSL2の開発予定には入っているそうです。期待して待ちましょう。

コメント

最近のコメント

Threaded Recent Comments will be here.