FreeBSD Jails vs Docker Containers: முக்கிய வேறுபாடுகள்
FreeBSD Jails மற்றும் Docker Containers இடையிலான தொழில்நுட்ப வேறுபாடுகளை அறியுங்கள். முழுமையான userland தனிமைப்படுத்தல் மற்றும் layered image முறை எவ்வாறு செயல்படுகிறது என்பதை இந்த
FreeBSD jails மற்றும் Docker containers ஆகிய இரண்டும் ஒரே சிக்கலை இரண்டு வெவ்வேறு வடிவங்களில் தீர்க்கின்றன. இவை இரண்டுமே பகிரப்பட்ட kernel-ஐப் பயன்படுத்தி தனிமைப்படுத்தப்பட்ட userland-களை இயக்குகின்றன, எனவே இவை virtual machine-கள் அல்ல. இவற்றிற்கு இடையேயான வேறுபாடு உள்ளே என்ன இயங்குகிறது என்பதில் உள்ளது. ஒரு Docker container என்பது registry-யிலிருந்து பெறப்பட்ட layered image-லிருந்து ஒரு process-ஐ இயக்குகிறது. ஒரு jail என்பது முழுமையான FreeBSD userland-ஐ இயக்குகிறது: இதில் அதன் சொந்த /etc, அதன் சொந்த rc startup scripts, அதன் சொந்த pkg database மற்றும் நீங்கள் விரும்பும் பல process-கள் இயங்கலாம். இந்தப் பக்கத்தில் உள்ள மற்ற அனைத்து வேறுபாடுகளும் இந்த ஒரு அடிப்படை வேறுபாட்டிலிருந்தே உருவாகின்றன.
SSD Nodes FreeBSD images-ஐ வழங்குவதில்லை. இந்தத் தளத்தில் நீங்கள் FreeBSD server-ஐ வாடகைக்கு எடுக்க முடியாது, மேலும் கீழே உள்ளவை நீங்கள் இங்கு வாங்கக்கூடிய ஒரு machine-க்கான நிறுவல் வழிகாட்டி அல்ல. இது இரண்டு isolation மாதிரிகளின் ஒப்பீடு மட்டுமே; எந்த மாதிரியான பணிச்சுமைக்கு (workload) எது தேவை என்பதை நீங்கள் புரிந்துகொள்ளவும், FreeBSD குழுவின் அமைப்பை ஊகிக்காமல் வாசிக்கவும் இது எழுதப்பட்டுள்ளது.
Jail என்றால் என்ன
FreeBSD 4.0 பதிப்பில் மார்ச் 2000-ல் Jails அறிமுகப்படுத்தப்பட்டன. இவை cgroups-ஐ விட பழையவை, Docker-ஐ விட சுமார் ஒரு தசாப்தம் முந்தையவை. இதன் செயல்முறை ஒரு kernel call மூலம் நடைபெறுகிறது. jail(8) ஒரு directory tree-ஐ எடுத்துக்கொண்டு, அதற்குள் jail ID இணைக்கப்பட்ட processes-ஐத் தொடங்குகிறது. அந்த ID-ஐக் கொண்ட எந்தவொரு process-க்கும் சில குறிப்பிட்ட செயல்பாடுகளை kernel அனுமதிக்காது. Jail-க்குள் இருக்கும் ஒரு process-ஆல் அதற்கு வெளியே உள்ள processes-ஐப் பார்க்க முடியாது, filesystem-ஐ mount அல்லது unmount செய்ய முடியாது, kernel modules-ஐ ஏற்ற முடியாது, மற்றும் அந்த jail-க்கு வழங்கப்படாத network addresses-ல் bind செய்ய முடியாது. இதில் கற்றுக்கொள்ளத் தனித்தனி namespace வகைகள் இல்லை, ஒவ்வொரு வசதிக்கும் தனித்தனியாக opt-in செய்ய வேண்டிய அவசியமும் இல்லை: கட்டுப்பாடுகள் அனைத்தும் ஒரே தொகுப்பாக வருகின்றன, இவை jail-ன் config-ல் உள்ள parameters மூலம் மாற்றியமைக்கப்படுகின்றன.
Host-ல், jls இயங்கிக்கொண்டிருக்கும் jails-ன் பட்டியலைக் காட்டும். jexec web sh கட்டளையைப் பயன்படுத்தி, web என்று பெயரிடப்பட்ட jail-க்குள் ஒரு shell-ஐப் பெறலாம்.
ஒரு FreeBSD userland-ஐ ஒரு directory-க்குள் வைப்பதன் மூலம் நீங்கள் jail-ஐ உருவாக்கலாம். Base system இதை உங்களுக்காகச் செய்கிறது:
sudo bsdinstall jail /usr/local/jails/containers/webஇது உங்கள் release-க்கான base distribution தொகுப்பைப் பதிவிறக்கி, சாதாரண post-install படிகளை இயக்கும். எனவே, ஒரு புதிய server-ல் செய்வது போலவே, நீங்களும் root password-ஐ அமைத்து, timezone-ஐத் தேர்ந்தெடுக்கலாம். இதன் விளைவாக, ஒரு folder-க்குள் FreeBSD installation அமையும். பின்னர், அதை /etc/jail.conf-ல் விவரிக்க வேண்டும்:
web {
host.hostname = "web.example.internal";
path = "/usr/local/jails/containers/web";
ip4.addr = "10.0.0.10";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
mount.devfs;
}அதைத் தொடங்கி, பின் சரிபார்க்கவும்:
sudo service jail start web
jlsjls இப்போது web-ஐ அதன் JID, hostname மற்றும் IP address ஆகியவற்றுடன் பட்டியலிட வேண்டும். Jail தோன்றவில்லை எனில், sudo jail -c web கட்டளையை நேரடியாக இயக்கவும். இது அதே configuration-ஐ foreground-ல் இயக்கும். சேவை வெளியீட்டில் (service output) பிழையைத் தேடுவதற்குப் பதிலாக, ஏற்றுக்கொள்ள முடியாத parameter-ஐ இது நேரடியாகக் காட்டும்.
இரண்டு முறை கவனிக்க வேண்டிய வரி exec.start = "/bin/sh /etc/rc" ஆகும். ஒரு jail-ஐத் தொடங்குவது, அதற்குள் FreeBSD-ன் சாதாரண boot script-ஐ இயக்குகிறது. எனவே, அந்த jail-ன் சொந்த /etc/rc.conf-ல் enabled செய்யப்பட்ட அனைத்து சேவைகளும் jail-க்குள் தொடங்கும். Docker container-ல் இதற்கு இணையான படிநிலை இல்லை, ஏனெனில் அது image-ன் entrypoint process-ஐ மட்டுமே இயக்கும், அந்த process நின்றவுடன் container-ம் நின்றுவிடும்.
மென்பொருளைப் பெறுதல்: images மற்றும் registries vs நீங்கள் நிரப்பும் userland
இதுவே நீங்கள் முதல் நாளில் உணரும் முக்கிய வேறுபாடு.
Docker-ல் நீங்கள் மென்பொருளின் பெயரைத் தெரிவித்தால், அது உங்களுக்குக் கிடைத்துவிடும். docker pull nginx என்பது வேறொருவர் உருவாக்கிச் சோதித்த, layered மற்றும் content-addressed image-ஐப் பதிவிறக்குகிறது. docker compose up -d அதை அதன் volumes மற்றும் network-உடன் இயக்குகிறது. இங்கே registry-யே முதன்மையானது. ஆயிரக்கணக்கான திட்டங்கள் இயங்கக்கூடிய image-களை வெளியிடுவதே Docker workflow-ன் முக்கியப் பலன். இதுவே VPS-ல் Docker-ஐ இயக்குவதை ஒரு பெரிய திட்டமாக இல்லாமல், ஒரு சிறிய பணியாக மாற்றுகிறது.
FreeBSD-ல் jail image-களுக்கென பொதுவான registry எதுவும் இல்லை. நீங்கள் ஒரு காலி userland-ஐ உருவாக்கி, அதில் மென்பொருளை நிறுவ வேண்டும்; இது ஒரு bare server-ஐ அமைப்பது போன்றது. இதில் தட்டச்சு செய்யும் வேலை அதிகம். ஆனால் இது அதிக வெளிப்படைத்தன்மை கொண்டது, ஏனெனில் jail-க்குள் இயங்குவது pkg மூலம் நிறுவப்பட்டவை மட்டுமே; இவை host பயன்படுத்தும் அதே package தொகுப்பிலிருந்து வந்தவை.
கருவிகள் (Tooling) இந்த வேலையை எளிதாக்குகின்றன. BastilleBSD என்பது பொதுவான jail manager, இது ஒரு package ஆகக் கிடைக்கிறது:
sudo pkg install bastille
sudo sysrc bastille_enable=YES
sudo bastille setup
sudo bastille bootstrap 15.1-RELEASEbastille setup உங்களுக்காக networking, storage மற்றும் firewall ஆகியவற்றை உள்ளமைக்கிறது. bastille bootstrap ஒருமுறை release-ஐப் பதிவிறக்குகிறது, அதன் பிறகு நீங்கள் உருவாக்கும் ஒவ்வொரு jail-ம் அதையே மீண்டும் பயன்படுத்துகிறது. FreeBSD 15.1 என்பது ஜூன் 2026-ல் வெளியான தற்போதைய production release ஆகும்; நீங்கள் பயன்படுத்தும் release-க்கு ஏற்ப இதை மாற்றிக்கொள்ளவும்.
ஒரு jail-ஐ உருவாக்குவது ஒரு கட்டளை, அதை நிரப்புவது மற்றொரு கட்டளை:
sudo bastille create web 15.1-RELEASE 10.17.89.10/24
sudo bastille pkg web install nginx
sudo bastille service web nginx start
sudo bastille console webbastille console web உங்களுக்கு jail-க்குள் ஒரு login shell-ஐ வழங்குகிறது, bastille list host-ல் என்னென்ன உள்ளன என்பதைக் காட்டுகிறது. ஒரு build-ஐ மீண்டும் செய்ய, Bastille templates வழிமுறைகளை ஒரு கோப்பில் வைத்து jail-க்குச் செயல்படுத்தும். இது Dockerfile-க்கு இணையான ஒரு வசதியாகும். ஒரு template ஒவ்வொரு jail-லும் மீண்டும் இயக்கப்படும். எதுவும் முன்பே கட்டமைக்கப்பட்டு (prebuilt) வருவதில்லை.
இதன் சுருக்கம் இதுதான்: Docker மற்றவர்கள் உருவாக்கிய build-களை உங்களுக்கு வழங்குகிறது. Jails உங்கள் சொந்த நிறுவல்கள் (installs) மூலம் இயங்குகிறது. உங்கள் பட்டியலில் உள்ள மென்பொருள் container image-ஆக மட்டுமே கிடைத்தால், மற்ற காரணிகளைப் பரிசீலிக்கும் முன்பே Docker-ஐத் தேர்ந்தெடுப்பதே தீர்வாக அமையும்.
நிலை மற்றும் மேம்படுத்தல்கள்: ZFS மாற்றங்களின் பங்கு
Docker வேண்டுமென்றே நிலையை (state) பிரிக்கிறது. Container கோப்பு முறைமை தற்காலிகமானது, உங்கள் தரவு ஒரு named volume அல்லது bind mount-ல் இருக்கும், மேலும் ஒரு மேம்படுத்தல் என்பது docker compose pull-ஐத் தொடர்ந்து docker compose up -d செய்வதாகும். Container மாற்றப்பட்டுவிடும், நீங்கள் volume-ல் வைக்காத அனைத்தும் அழிந்துவிடும். நீங்கள் விதியைப் பின்பற்றும்போது இது ஒரு வசதி, ஆனால் அதை மறந்துவிட்டால் தரவு இழப்பு ஏற்படும். இதனால்தான் bind mounts மற்றும் named volumes ஆகியவற்றுக்கு இடையேயான தேர்வு ஒரு Compose stack-ல் அதிக முக்கியத்துவம் பெறுகிறது.
ஒரு jail நிலையைப் பிரிப்பதில்லை, ZFS இருப்பதால்தான் இது சாத்தியமாகிறது. முழு jail-ம் ஒரே dataset-ஆக இருக்கும்:
sudo zfs snapshot zroot/jails/containers/web@pre-upgrade
sudo pkg -j web upgrade
sudo zfs rollback zroot/jails/containers/web@pre-upgradeஇதை இயக்குவதற்கு முன் zfs list மூலம் உண்மையான dataset பெயரைச் சரிபார்க்கவும்; மேலே உள்ள பாதை handbook பயன்படுத்தும் அமைப்பாகும். Snapshot எடுக்க ஒரு வினாடி மட்டுமே ஆகும், jail-ன் உள்ளடக்கம் மாறும் வரை இது கிட்டத்தட்ட இடத்தையே எடுத்துக்கொள்ளாது. மேம்படுத்தல் சேவையை முடக்கினால், rollback மூலம் முழு userland-ம் அதன் முந்தைய நிலைக்குத் திரும்பும், இதில் package database மற்றும் நீங்கள் அதிகாலை 2 மணிக்கு கைமுறையாகத் திருத்திய config கோப்புகளும் அடங்கும். Docker-ல் இதற்கு இணையான வசதி இல்லை, ஏனெனில் அதன் மாதிரி (model) உங்களுக்கு அது தேவையில்லை என்றே கருதுகிறது.
zfs clone என்பது இதன் மறுபாதியாகும். Snapshot-ன் clone என்பது ஒரு புதிய writable jail ஆகும், இது மாற்றப்படாத தொகுதிகளை (blocks) அதன் parent-உடன் பகிர்ந்து கொள்கிறது. எனவே, 3 GB jail-ன் staging நகல், நீங்கள் மாற்றத் தொடங்கும் வரை வட்டில் கிட்டத்தட்ட எந்த இடத்தையும் எடுத்துக்கொள்ளாது. ஒரு FreeBSD நிர்வாகி மேம்படுத்தலைச் சோதிக்க "production போன்றே உள்ள" jail-ஐ இப்படித்தான் உருவாக்குகிறார்.
Base system மேம்படுத்தல் என்பது packages-லிருந்து தனிப்பட்டது. சொந்த userland நகலைக் கொண்ட ஒரு jail-க்கு:
sudo freebsd-update -b /usr/local/jails/containers/web fetch installThin jails இந்த வேலையை மீண்டும் செய்வதைத் தவிர்க்கின்றன. அவை ஒரு பகிரப்பட்ட read-only base-ஐ nullfs மூலம் mount செய்கின்றன மற்றும் ஒவ்வொரு jail-க்கும் சிறிய writable layer-ஐ வழங்குகின்றன. எனவே, நீங்கள் base-ஐ ஒருமுறை patch செய்தால் போதும், ஒவ்வொரு jail-ம் அதன் முடிவைக் காணும். Bastille இயல்பாகவே thin jails-ஐ உருவாக்குகிறது.
Networking: published ports மற்றும் முகவரி தொடர்பான முடிவுகள்
Docker உங்களுக்காக networking-ஐத் தீர்மானித்து, விதிவிலக்குகளை மட்டும் publish செய்யக் கேட்கிறது. Containers ஒரு bridge-ல் அமர்கின்றன, அவை user-defined network-ல் service name மூலம் ஒன்றையொன்று சென்றடைகின்றன, மேலும் -p 8080:80 அவற்றில் ஒன்றை host-க்கு வெளிப்படுத்துகிறது. இதைச் சாத்தியப்படுத்த Docker தனது சொந்த packet filter விதிகளை எழுதுகிறது; இதுவே a published container port walks straight past ufw நடப்பதற்கான வழியாகும்.
ஒரு jail-ஐப் பயன்படுத்தும்போது, நீங்கள் தொடக்கத்திலேயே ஒரு மாதிரியைத் தேர்ந்தெடுக்க வேண்டும்; அதில் இரண்டு வகைகள் உள்ளன.
Shared IP. ip4.addr = "10.0.0.10" அந்த முகவரியை ஏற்கனவே உள்ள ஒரு host interface-ல் சேர்த்து, jail-ஐ அதற்குள் கட்டுப்படுத்துகிறது. இந்த jail-க்குத் தனக்கென network stack கிடையாது, எனவே அது தனது சொந்த firewall-ஐ இயக்க முடியாது. மேலும், அது அனைத்து முகவரிகளிலும் bind செய்ய முடியாது: 0.0.0.0-ல் கேட்கும் ஒரு jailed socket, kernel-ஆல் jail-ன் சொந்த முகவரிக்கு மாற்றியமைக்கப்படுகிறது. ஒரே முகவரியின் port 80-ல் இரண்டு jail-களும் listen செய்ய முடியாது, எனவே நீங்கள் ஒவ்வொன்றிற்கும் ஒரு முகவரியை ஒதுக்க வேண்டும் அல்லது முன்னால் ஒரு reverse proxy-ஐ வைக்க வேண்டும்.
VNET. jail-ல் vnet;-ஐச் சேர்க்கும்போது, அதற்கு முழுமையான network stack கிடைக்கிறது: அதன் சொந்த interfaces, routing table மற்றும் firewall விதிகள். நீங்கள் அதை ஒரு epair மூலம் host-உடன் இணைக்கிறீர்கள்; இது இருபுறமும் முனைகளைக் கொண்ட ஒரு virtual cable ஆகும், இதன் host முனையை ஒரு bridge-ல் இணைக்க வேண்டும். Docker உங்களுக்கு வழங்குவதற்கு இதுவே மிக நெருக்கமான அமைப்பாகும், மேலும் Bastille-ன் -V மற்றும் -B jail வகைகளுக்குப் பின்னால் உள்ள முறையும் இதுவே.
ஒரு host port-ஐ jail-க்குள் forward செய்வது ஒரு pf redirect விதியாகும். Bastille இதை இவ்வாறு கையாளுகிறது:
sudo bastille rdr web tcp 80 80இங்கு EXPOSE கிடையாது, தானியங்கி publishing-ம் கிடையாது. ஒரு jail-ன் முகவரி அல்லது redirect விதி அனுமதித்தால் ஒழிய, எதையும் jail-க்குள் சென்றடைய முடியாது. இது தொடக்கத்தில் சற்று மெதுவானது, ஆனால் மிகவும் பாதுகாப்பான firewall அமைப்பைக் கொண்டது.
வளக் கட்டுப்பாடுகள்: cgroups vs rctl
Docker ஒரு container-ன் வளங்களை cgroups மூலம் கட்டுப்படுத்துகிறது. இந்த வரம்புகள் container வரையறுக்கப்படும் இடத்திலேயே அமையும்: --memory=1g --cpus=1.5 கட்டளை வரியில் அல்லது Compose கோப்பில் உள்ள தொடர்புடைய keys. நீங்கள் ஏற்கனவே உங்கள் stack-ஐ VPS-ல் உள்ள Docker Compose கோப்பில் வைத்திருந்தால், அந்த வரம்பு அது கட்டுப்படுத்தும் service-க்கு அருகிலேயே இருக்கும் மற்றும் git மூலம் அதனுடன் பயணிக்கும்.
FreeBSD rctl-ஐப் பயன்படுத்துகிறது. இது நீங்கள் சுயமாக இயக்க வேண்டிய ஒரு subsystem ஆகும். ஒவ்வொரு ஒதுக்கீட்டின் போதும் சிறிய அளவில் செயல்திறன் பாதிப்பு ஏற்படும் என்பதால், resource accounting இயல்பாகவே முடக்கப்பட்டிருக்கும். /boot/loader.conf-ல் tunable-ஐச் சேர்த்து, கணினியை reboot செய்யவும்:
kern.racct.enable=1பின்பு ஒரு விதியை (rule) அமைத்து அதைக் கண்காணிக்கவும்:
sudo rctl -a jail:web:vmemoryuse:deny=1g
rctl -hu jail:webrctl -hu jail:web, jail-ன் தற்போதைய பயன்பாட்டை மனிதர்கள் வாசிக்கும் வகையில் அச்சிடும். இதனால், ஏதேனும் பாதிப்பு ஏற்படும் முன் வரம்பிற்கு எவ்வளவு நெருக்கத்தில் உள்ளது என்பதை நீங்கள் அறியலாம். deny செயல்பாடு, வரம்பைத் தாண்டிய ஒதுக்கீட்டை jail-க்குள் தோல்வியடையச் செய்யும். இதனால் host-ல் kill செய்தி வருவதைக் காட்டிலும், application-ன் சொந்த ஒதுக்கீட்டுப் பிழையை நீங்கள் பார்க்க முடியும்.
rctl -a மூலம் சேர்க்கப்படும் விதிகள் அடுத்த reboot-ல் மறைந்துவிடும். FreeBSD-ன் rctl service, /etc/rctl.conf கோப்பிலிருந்து அவற்றை மீண்டும் ஏற்றும். எனவே, விதியை அந்தக் கோப்பில் எழுதி, service-ஐ enable செய்யவும்:
sudo sysrc rctl_enable=YESDocker அதிக வசதியானது என்பதற்கு இதுவே சான்று. Compose கோப்பில் உள்ள ஒரு வரம்பு, அது கட்டுப்படுத்தும் service-உடன் சேர்த்து ஆய்வு செய்யப்படுகிறது. ஆனால், ஒரு rctl விதி என்பது, எங்கோ வரையறுக்கப்பட்ட ஒரு jail-ஐக் குறிப்பிடும் தனித்த கோப்பில் உள்ள ஒரு வரியாகும்.
பதில் ஒரு virtual machine ஆக இருக்கும்போது: bhyve
ஒரு jail, host kernel-ஐப் பகிர்ந்துகொள்வதால், சில விஷயங்களை எப்போதும் செய்ய முடியாது. இதில் வேறு kernel version-ஐ இயக்க முடியாது, kernel module-ஐ ஏற்ற முடியாது, மேலும் Linux container-ல் செய்வது போல Linux binary-களை இயக்க முடியாது. FreeBSD-ல் linuxulator என்ற Linux compatibility layer உள்ளது, ஆனால் இது Linux system call-களின் ஒரு பகுதியை மட்டுமே செயல்படுத்துகிறது; எனவே இது அனைத்து வகையான Linux image-களுக்கும் பொதுவான தீர்வாகாது.
bhyve என்பது FreeBSD-ன் hypervisor ஆகும். உங்களுக்கு ஒரு உண்மையான machine boundary தேவைப்படும்போது, அதாவது வேறு ஒரு operating system, வேறு ஒரு kernel, அல்லது kernel-ஐப் பகிர விரும்பாத ஒரு tenant தேவைப்படும்போது, இதுவே சரியான கருவியாகும். இதற்குப் பதிலாக, நீங்கள் நினைவகத்தை (memory) பகிர்ந்துகொள்ளாமல் ஒதுக்கி வைக்க வேண்டும், மேலும் இரண்டாவது kernel-ஐயும் patch செய்ய வேண்டியிருக்கும். Linux-ல் container-களுக்கும் முழுமையான virtual machine-களுக்கும் இடையே நீங்கள் எடுக்கும் அதே முடிவே இது. மேலும், உங்களுக்கு nested virtualization-ஐ ஆதரிக்கும் VPS கீழே தேவைப்படுமா என்பதை இதுவே தீர்மானிக்கிறது.
Docker-ஐ பெரும்பாலான குழுக்கள் பயன்படுத்துவதற்கான உண்மையான காரணமான ecosystem
மேலே உள்ள அனைத்தும் மாதிரியைப் பற்றியவை. பெரும்பாலான குழுக்கள் எதைத் தேர்ந்தெடுக்கின்றன என்பதைத் தீர்மானிப்பது, ஒவ்வொன்றைச் சுற்றியுள்ள உலகின் அளவே ஆகும்.
Docker, Docker Hub மற்றும் GHCR-ஐக் கொண்டுவருகிறது, docker compose, ஒரு server போதாதபோது Kubernetes, ஏற்கனவே இணைக்கப்பட்ட container ஆதரவு கொண்ட CI runners, மற்றும் கிட்டத்தட்ட ஒவ்வொரு project-ன் README-லும் உள்ள ஒரு command-ல் தொடங்கும் வசதி. Jails, FreeBSD ports tree-ஐக் கொண்டுவருகின்றன; இது பெரியது மற்றும் கவனமாகப் பராமரிக்கப்படுகிறது, மேலும் இயங்கத் தயாராக உள்ள application bundles-ன் தொகுப்பு மிகச் சிறியது. ஒரு project, container image-ஐ மட்டும் வெளியிட்டு, வேறெதையும் வழங்காதபோது, FreeBSD-ல் அதன் ஆவணங்களைப் படித்துவிட்டு நீங்களே பாகங்களைச் சேர்க்க வேண்டியிருக்கும்.
அந்த வர்த்தகத்தின் மறுபக்கத்தில் Jails தங்களுக்குரிய இடத்தைப் பிடிக்கின்றன. நீங்கள் ஏற்கனவே ZFS-ஐப் பயன்படுத்தி, ஒரு முழு service-ன் snapshot மற்றும் rollback-ஐ முக்கியமாகக் கருதினால், உங்கள் services FreeBSD native-ஆக இருந்தால், ஒரு single process-க்கு பதிலாக ஒவ்வொரு tenant-க்கும் முழுமையான userland தேவைப்பட்டால், அல்லது kernel, packet filter, filesystem மற்றும் ஆவணங்கள் அனைத்தும் ஒரே அமைப்பாகப் பராமரிக்கப்பட வேண்டும் என்று விரும்பினால், நீங்கள் Jails-ஐத் தேர்ந்தெடுக்கலாம். FreeBSD-ஐ coherent என்று அழைக்கும்போது மக்கள் குறிப்பிடுவது இந்த கடைசி அம்சத்தைத்தான், இது Linux மற்றும் FreeBSD-ஐ server தளங்களாக ஒப்பிடும் விரிவான ஒப்பீட்டில் மற்றும் FreeBSD 15 server பயன்பாட்டிற்காக எதை மாற்றியது என்பதில் கூடுதல் விளக்கத்துடன் உள்ளது.
இறுதி முடிவு. உங்கள் குழுவிற்கு ஏற்கனவே Docker தெரிந்திருந்தால், மாறுவதற்கான செலவு உண்மையானது மற்றும் அதற்கான பலன் குறிப்பிட்டதாக இருக்க வேண்டும். isolation தரம் காரணமாக மாற வேண்டாம்; இரண்டு மாதிரிகளும் போதுமான அளவு நெருக்கமானவை, எனவே உங்கள் configuration-தான் முக்கியமானது. முழு service-களையும் ZFS மூலம் rollback செய்ய விரும்பினால் அல்லது நீங்கள் ஏற்கனவே FreeBSD-ல் இருந்தால் மட்டும் மாறவும்.
FAQ
FreeBSD-ல் Docker images-ஐ இயக்க முடியுமா?
Linux images-ஐ இயக்க முடியாது, மேலும் இது ஆதரிக்கப்படும் வழிமுறை அல்ல. FreeBSD-ல் OCI container ஆதரவு உள்ளது: sudo pkg install -y podman-suite மூலம் Podman-ஐ நிறுவலாம். இது ocijail வழியாக containers-ஐ இயக்குகிறது; இது உள்ளுக்குள் உண்மையான jails-ஐ உருவாக்கும் runtime ஆகும். இதற்கு container monitor-க்காக fdescfs-ஐ /dev/fd-ல் mount செய்ய வேண்டும், மேலும் container NAT (network address translation)-க்காக pf தேவைப்படும். FreeBSD-க்கு உரிய OCI images சிறப்பாகச் செயல்படும். Linux images-க்கு கூடுதலாக Linux compatibility layer தேவைப்படுகிறது. 2026 ஆகஸ்ட் நிலவரப்படி, FreeBSD Podman port இன்னும் சோதனை நிலையிலேயே (experimental) உள்ளது. உங்கள் deployment Linux images-ஐக் கொண்ட stack என்றால், அதை Linux-லேயே இயக்கவும்.
Docker containers-ஐ விட FreeBSD jails அதிக பாதுகாப்புடையதா?
இரண்டுமே ஒரே host kernel-ஐப் பகிர்ந்துகொள்வதால், kernel bug இரண்டிற்கும் பொதுவான ஆபத்தாகும். நம்பகத்தன்மையற்ற குறியீடுகளுக்கு (untrusted code) இவை இரண்டையும் நீங்கள் பாதுகாப்பு எல்லையாகக் கருதக்கூடாது. இவற்றிற்கு இடையேயான வேறுபாடு தொடக்க நிலையில்தான் உள்ளது. ஒரு jail-ஐ உருவாக்கும்போது, பெரும்பாலான செயல்பாடுகள் முதலில் தடுக்கப்பட்டிருக்கும்; நீங்கள் ஒவ்வொன்றாகத் தேவைக்கேற்ப அனுமதி அளிக்க வேண்டும். ஒரு Docker container-ஐ உருவாக்கும்போது, அது root பயனர் உரிமையுடன் namespaces-க்குள் தொடங்குகிறது, சில capabilities மட்டுமே நீக்கப்பட்டிருக்கும்; கூடுதல் பாதுகாப்பை நீங்கள்தான் சேர்க்க வேண்டும். நடைமுறையில், மாதிரியை விட உள்ளமைவே (configuration) பாதுகாப்பைத் தீர்மானிக்கிறது: allow.mount மற்றும் allow.raw_sockets இயக்கப்பட்ட நிலையில் உள்ள ஒரு jail, கவனமாக உள்ளமைக்கப்பட்ட ஒரு container-ஐ விட அதிக பாதுகாப்பானது அல்ல.
ஒரு jail-ஐ எப்படி backup எடுப்பது?
Dataset-ஐ snapshot எடுத்து அதை அனுப்ப வேண்டும். sudo zfs snapshot zroot/jails/containers/web@backup கட்டளையைப் பயன்படுத்தி, அந்த snapshot-ஐ மற்றொரு pool-க்கு அல்லது நீங்கள் வெளியே நகர்த்தக்கூடிய ஒரு கோப்பிற்கு zfs send செய்யவும். ஒரு jail அதன் முழு userland-ஐயும் ஒரே dataset-ல் வைத்திருப்பதால், அந்த snapshot நிறுவப்பட்ட packages மற்றும் தரவுகளை ஒரே சீரான நிலையில் சேமிக்கும்; நீங்கள் கைமுறையாக மாற்றிய அனைத்து config கோப்புகளும் அதில் அடங்கும். இது Docker முறைக்கு நேர்மாறானது; Docker-ல் நீங்கள் named volumes மற்றும் Compose கோப்பை மட்டும் backup எடுத்துவிட்டு, மற்றவற்றை image-லிருந்து மீண்டும் உருவாக்க வேண்டும்.
எனக்கு BastilleBSD தேவையா, அல்லது base system போதுமானதா?
Base system போதுமானது, அதுவே தொடங்குவதற்குச் சிறந்த இடமாகும். jail.conf, jls, jexec மற்றும் service jail start ஆகியவை முழு மாதிரியையும் உள்ளடக்கியவை. இவற்றை நீங்கள் கற்றுக்கொண்டால், அந்த host-ன் பிரத்யேகக் கருவிகளைத் தெரிந்துகொள்ளாமலேயே எந்தவொரு FreeBSD host-ஐயும் உங்களால் கையாள முடியும். Bastille என்பது அதன் மேல் உள்ள ஒரு வசதிக்கான அடுக்கு (convenience layer): இது releases-ஐ bootstrap செய்யவும், thin jails-ஐ உருவாக்கவும், templates-ஐப் பயன்படுத்தவும், உங்களுக்காக pf redirect விதிகளை எழுதவும் உதவுகிறது. முதலில் base கட்டளைகளைக் கற்றுக்கொள்ளுங்கள்; jails-ன் எண்ணிக்கை அதிகரித்து தட்டச்சு செய்வது கடினமாகும்போது Bastille-ஐப் பயன்படுத்தத் தொடங்குங்கள்.