Docker poderia provavelmente ser portado diretamente para o FreeBSD, mas...

6 min

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

Olá, sou incompetente.

Ainda não me recuperei da misteriosa morte súbita do meu servidor doméstico, e meu VPS da ConoHa caiu junto com o servidor DNS da ConoHa, então ficou fora do ar por um tempo.

Em primeiro lugar

Em primeiro lugar, é desnecessário dizer que o que evoluiu de jail para se tornar mais amigável a aplicações é o Docker de hoje.
chroot é meramente change root, um ambiente com restrições de nível de sistema de arquivos. Em certo sentido, é uma prisão, mas é um pouco diferente. Apenas o root, o /, muda.
Uma ferramenta conveniente e fácil de entender é arch-chroot, mas vamos tentar um chroot comum.

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

Como você pode ver, com o chroot padrão, o próprio bash não é visível a partir desse ambiente isolado, então você não pode entrar. E mesmo que você copie /bin/bash, as bibliotecas de dependência que o bash precisa não podem ser referenciadas a partir desse ambiente isolado, então ele não pode ser executado.
Isso é Change Root. Apenas o root muda.

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

Apenas com o acima,

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 ~]# 

Depois disso, se você executar ps -ef neste ambiente chroot, verá que os processos da máquina host são visíveis a partir deste chroot.

No caso do jail do FreeBSD, ele é ainda mais aprimorado, e processos, rede, espaço de usuário, etc., também são separados. Além disso, o próprio cgroups do Linux foi projetado e implementado por engenheiros do Google, levando ao cgroups v2 de hoje. Minha razão para usar o Docker em primeiro lugar é unicamente para propósitos que não sejam restrições de recursos facilmente modificáveis, e jail seria bom, mas por que uma implementação semelhante não é feita no FreeBSD? No labirinto... jail não pode fazer restrições de recursos? Não, pode, mas por quê...?

Situação atual do Docker no FreeBSD

Ainda é suportado, mas é surpreendentemente antigo.

image.png


O que isso significa é que é suportado, mas
Situação Recente dos Contêineres FreeBSD #Docker - Qiita
Como este artigo afirma, parece que não está sendo mantido agora.
Além disso, esta versão do Docker para FreeBSD essencialmente apenas executa o Docker via kernel Linux e não parece ser uma implementação nativa.

Não é possível no FreeBSD?

Francamente, seria muito apreciado se um ambiente de prisão jail totalmente compatível com Docker pudesse ser criado apenas alterando um alias.
Restrições de recursos também podem ser feitas combinando-o com rctl.
https://codeberg.org/bsdpot/pot

Existem também implementações que utilizam jail como esta, mas em certo sentido, são implementações dentro do ecossistema FreeBSD.
Em outras palavras, pode ser implementado como um ambiente de contêiner. No entanto, o problema com a portabilidade são os scripts de construção como Dockerfile. Pode ser facilmente convertido em um script shell de construção que pode ser implementado com pot, mas

FROM
WORKDIR
COPY
ARG
ENV
RUN
EXPOSE 

é uma linguagem de construção (?) inevitável em um sistema de camadas como este.
Em outras palavras, como seus gerenciadores de pacotes também são diferentes, parece um pouco difícil convertê-los completamente automaticamente. Aparentemente, pode ser tratado com potfile.

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

Related Posts