DockerはそのままFreeBSDに移植出来そうなのだが・・・
こんにちは、無能です。
未だに自宅サーバの謎の突然死の病からも解消せず、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の場合はさらに強化され、プロセスもネットワークやユーザ空間等も分離されます。それからLinuxのcgroups自体はGoogleのエンジニアによって設計、実装され今に至るcgroups v2までとなります。私がそもそもDockerを使っている理由は簡単に変更出来るリソース制限以外での目的でしか無く別にjailでも良いのですが、そもそもなぜ同じような実装がFreeBSDで行われていないかの迷宮へ_____jailでリソース制限が出来ない?いいえ、出来るんですがなぜでしょう・・・
FreeBSDのDockerの現状
今も一応は対応しているのですがびっくりするくらい古いです。

これはどういうことなのかというと対応はしているのですが
最近の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