DockerはそのままFreeBSDに移植出来そうなのだが・・・

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

こんにちは、無能です。

未だに自宅サーバの謎の突然死の病からも解消せず、ConoHaのVPSダウンかつConoHaのDNSサーバごと死ぬということでしばらくダウンしてました。

そもそも

そもそも、元々jailからよりアプリケーションフレンドリーに出来上がったものが今のDockerであることは言うまでもありません。
chrootはあくまでchange rootであり、ファイルシステムレベルの制限が課された環境です。ある意味で言えば監獄と言えば監獄なのですがちょっと違います。あくまでroot/が変わるだけです。
手元で便利でわかりやすいものだと、arch-chrootがありますが普通のchrootを試しましょう。

thepassenger:[haturatu]:~$ sudo chroot chroot-test/
chroot: failed to run command ‘/usr/bin/bash’: No such file or directory

このようにデフォルトのchrootだとそもそもbash自体がその隔離環境から見えないため入れません。そして、たとえ/bin/bashをコピーしたとしてもbashが必要とする依存ライブラリはその隔離環境からは参照できないため実行出来ません。
これがChange Rootです。あくまでルートが変わるだけです。

sudo mkdir /mnt/arch
sudo pacstrap /mnt/arch base linux linux-firmware man-db vim
sudo arch-chroot /mnt/arch

上記だけで

thepassenger:[haturatu]:~$ sudo arch-chroot /mnt/arch
==> WARNING: /mnt/arch is not a mountpoint. This may have undesirable side effects.
[thepassenger /]# ls
bin   dev  home  lib64  opt   root  sbin  sys  usr
boot  etc  lib   mnt    proc  run   srv   tmp  var
[thepassenger /]# cd ~
[thepassenger ~]# ls
[thepassenger ~]# ls -la
total 16
drwxr-x---  4 root root 4096 Mar 31 11:37 .
drwxr-xr-x 16 root root 4096 Mar 31 11:37 ..
drwx------  3 root root 4096 Mar 31 11:37 .gnupg
drwx------  2 root root 4096 Mar 31 11:37 .ssh
[thepassenger ~]# 

この後に、このchrootである環境でps -efを実行すれば分かりますがホストマシン側のプロセス自体はこのchrootからは見えてしまいます。

FreeBSDのjailの場合はさらに強化され、プロセスもネットワークやユーザ空間等も分離されます。それからLinuxcgroups自体はGoogleのエンジニアによって設計、実装され今に至るcgroups v2までとなります。私がそもそもDockerを使っている理由は簡単に変更出来るリソース制限以外での目的でしか無く別にjailでも良いのですが、そもそもなぜ同じような実装がFreeBSDで行われていないかの迷宮へ_____jailでリソース制限が出来ない?いいえ、出来るんですがなぜでしょう・・・

FreeBSDのDockerの現状

今も一応は対応しているのですがびっくりするくらい古いです。

image.png


これはどういうことなのかというと対応はしているのですが
最近のFreeBSDコンテナ事情 #Docker - Qiita
この記事の通り、ただ今はメンテされていないようです。
かつ、このFreeBSD版のDockerは実質的にLinuxカーネル経由でDockerを実行しているに過ぎずネイティブ実装ではないみたいです。

FreeBSDでは出来ないの?

ぶっちゃけ、aliasを変更するだけでDocker完全互換でjailの監獄環境が出来てくれれば一番ありがたいです。
リソース制限もrctlと組み合わせれば出来ます。
https://codeberg.org/bsdpot/pot

こういう、jailを活用したものもありますがある意味FreeBSD経済圏上での実装です。
つまりはコンテナ環境としては実装できます。しかし移植するとしての問題はDockerfileのようなビルドスクリプトです。potで実装出来るようなビルド用シェルスクリプトに簡単に変換出来ると言えば出来ますが

FROM
WORKDIR
COPY
ARG
ENV
RUN
EXPOSE 

のようなレイヤーシステム上に仕方がないビルド言語(?)です。
つまりはこれらをパッケージマネージャも違うため完全に自動的に変換させるのはちょっと厳しそうです。一応はpotfileで対応はできるみたい。

https://github.com/ebarriosjr/potMachine/blob/master/Potfiles/Potfile

Related Posts