SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-30

FreeBSD Jails vs Docker Containers: முக்கிய வேறுபாடுகள்

FreeBSD Jails மற்றும் Docker Containers இடையிலான தொழில்நுட்ப வேறுபாடுகளை அறியுங்கள். முழுமையான userland மற்றும் layered images ஆகியவற்றின் செயல்பாட்டு முறைகளை இதில் விரிவாகக் காணலாம்.

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 இணைக்கப்பட்ட process-களைத் தொடங்குகிறது. அந்த ID-யைக் கொண்ட எந்தவொரு process-க்கும் ஒரு குறிப்பிட்ட செயல்பாடுகளை kernel அனுமதிக்காது. Jail-க்குள் இருக்கும் ஒரு process-ஆல் அதற்கு வெளியே உள்ள process-களைப் பார்க்க முடியாது, filesystem-களை mount அல்லது unmount செய்ய முடியாது, kernel module-களை ஏற்ற முடியாது, மற்றும் அந்த jail-க்கு வழங்கப்படாத network address-களில் bind செய்ய முடியாது. இதில் கற்றுக்கொள்ளத் தனித்தனி namespace வகைகள் இல்லை, ஒவ்வொரு வசதிக்கும் தனித்தனியாக opt-in செய்ய வேண்டிய அவசியமும் இல்லை: கட்டுப்பாடுகள் அனைத்தும் ஒரே தொகுப்பாக வருகின்றன, இவை jail-ன் config-ல் உள்ள parameters மூலம் மாற்றியமைக்கப்படுகின்றன.

Host-ல், jls இயங்கிக்கொண்டிருக்கும் jail-களின் பட்டியலைக் காட்டுகிறது, 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
jls

jls இப்போது 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 செய்யப்பட்ட ஒவ்வொரு service-யையும் தொடங்குகிறது. Docker container-ல் இதற்கு இணையான படி எதுவும் இல்லை, ஏனெனில் அது image-ன் entrypoint process-ஐ இயக்கி, அந்த process நின்றவுடன் தானும் நின்றுவிடும்.

மென்பொருளைப் பெறுதல்: 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-RELEASE

bastille setup உங்களுக்காக networking, storage மற்றும் firewall ஆகியவற்றை அமைக்கும். bastille bootstrap ஒருமுறை release-ஐப் பதிவிறக்கும், அதன் பிறகு நீங்கள் உருவாக்கும் ஒவ்வொரு jail-ம் அதையே பயன்படுத்திக்கொள்ளும். FreeBSD 15.1 என்பது தற்போதைய production release, இது 2026 ஜூன் மாதம் வெளியானது; நீங்கள் எந்த release-ஐப் பயன்படுத்துகிறீர்களோ அதை மாற்றிக்கொள்ளுங்கள்.

ஒரு jail-ஐ உருவாக்குவது ஒரு command, அதை நிரப்புவது மற்றொரு command:

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 web

bastille 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 கோப்பு முறைமை (filesystem) தற்காலிகமானது; உங்கள் தரவு ஒரு 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 பெயரைச் சரிபார்க்கவும்; மேலே உள்ள பாதை கையேட்டில் பயன்படுத்தப்படும் அமைப்பாகும். Snapshot எடுக்க ஒரு வினாடி மட்டுமே ஆகும், Jail-ன் உள்ளடக்கம் மாறும் வரை இது எந்த இடத்தையும் (space) எடுத்துக்கொள்ளாது. மேம்படுத்தல் சேவையை முடக்கினால், rollback மூலம் முழு userland-ம் அதன் முந்தைய நிலைக்குத் திரும்பும்; இதில் package database மற்றும் நீங்கள் அதிகாலையில் கைமுறையாகத் திருத்திய 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 install

Thin jails இந்த வேலையைத் திரும்பத் திரும்பச் செய்வதைத் தவிர்க்கின்றன. அவை ஒரு பகிரப்பட்ட read-only base-ஐ nullfs மூலம் mount செய்கின்றன. ஒவ்வொரு Jail-க்கும் சிறிய writable layer-ஐ வழங்குகின்றன. எனவே, நீங்கள் base-ஐ ஒருமுறை patch செய்தால் போதும், அனைத்து Jail-களும் அதன் முடிவுகளைப் பெற்றுக்கொள்ளும். Bastille முன்னிருப்பாக (default) 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 மற்றும் rctl ஒப்பீடு

Docker ஒரு container-ன் வளங்களை cgroups மூலம் கட்டுப்படுத்துகிறது. இந்த வரம்புகள் container வரையறுக்கப்படும் இடத்திலேயே அமைகின்றன: --memory=1g --cpus=1.5 கட்டளை வரியில் அல்லது Compose கோப்பில் உள்ள தொடர்புடைய விசைகள் மூலம் இவை அமைக்கப்படுகின்றன. உங்கள் stack-ஐ VPS-ல் உள்ள Docker Compose கோப்பில் ஏற்கனவே வைத்திருந்தால், அந்த வரம்பு எந்த service-க்கு பொருந்துமோ அதன் அருகிலேயே அமர்ந்து, git மூலம் அதனுடன் பயணிக்கிறது.

FreeBSD rctl-ஐப் பயன்படுத்துகிறது. இது நீங்கள் சுயமாக இயக்க வேண்டிய ஒரு subsystem ஆகும். ஒவ்வொரு ஒதுக்கீட்டிலும் (allocation) சிறிய அளவு செயல்திறன் செலவாகும் என்பதால், resource accounting இயல்பாகவே முடக்கப்பட்டிருக்கும். /boot/loader.conf-ல் tunable-ஐச் சேர்த்து, கணினியை reboot செய்யவும்:

kern.racct.enable=1

பின்பு ஒரு விதியை அமைத்து அதைக் கண்காணிக்கவும்:

sudo rctl -a jail:web:vmemoryuse:deny=1g
rctl -hu jail:web

rctl -hu jail:web, jail-ன் தற்போதைய பயன்பாட்டை மனிதர்கள் வாசிக்கும் வகையில் காட்டுகிறது. இதனால், ஏதேனும் பாதிப்பு ஏற்படும் முன் வரம்பிற்கு எவ்வளவு அருகில் உள்ளது என்பதை நீங்கள் அறியலாம். deny செயல்பாடு, வரம்பைத் தாண்டிய ஒதுக்கீட்டை jail-க்குள் தோல்வியடையச் செய்கிறது. இதனால் host-ல் ஒரு kill message-ஐப் பார்ப்பதற்குப் பதிலாக, application-ன் சொந்த ஒதுக்கீட்டுப் பிழையை நீங்கள் காணலாம்.

rctl -a மூலம் சேர்க்கப்படும் விதிகள் அடுத்த reboot-ல் மறைந்துவிடும். FreeBSD-ன் rctl service, /etc/rctl.conf கோப்பிலிருந்து அவற்றை மீண்டும் ஏற்றுகிறது. எனவே, விதியை அந்தக் கோப்பில் எழுதி, service-ஐ enable செய்யவும்:

sudo sysrc rctl_enable=YES

இந்த விஷயத்தில் Docker மிகவும் வசதியானது என்பது தெளிவாகிறது. 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 இருக்கும்போது, இதுவே சரியான கருவியாகும். இதற்குப் பதிலாக, பகிரப்பட்ட நினைவகத்திற்குப் பதிலாக ஒதுக்கப்பட்ட நினைவகத்தை (reserved 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-லும் உள்ள ஒரு-கட்டளை quickstart. 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-ஐ உருவாக்கும். இதற்கு container monitor-க்காக fdescfs-ஐ /dev/fd-ல் mount செய்ய வேண்டும், மேலும் container NAT (network address translation)-க்காக pf தேவைப்படுகிறது. FreeBSD-native OCI images சிறப்பாகச் செயல்படும். Linux images-க்கு கூடுதலாக Linux compatibility layer தேவைப்படுகிறது. ஆகஸ்ட் 2026 நிலவரப்படி, FreeBSD Podman port இன்னும் சோதனை நிலையிலேயே (experimental) உள்ளது. உங்கள் deployment ஒரு Linux images stack என்றால், அதை Linux-லேயே இயக்கவும். RHEL குடும்பத்தில், Rocky Linux அல்லது AlmaLinux-ல் Docker-ஐ நிறுவுதல் என்பது, நீங்கள் எதையும் நிறுவுவதற்கு முன்பே docker கட்டளையைக் கொண்ட தொகுப்பாக Podman ஏற்கனவே இருக்கும் இடமாகும்.

Docker containers-ஐ விட FreeBSD jails அதிக பாதுகாப்புடையதா?

இரண்டுமே ஒரே host kernel-ஐப் பகிர்ந்துகொள்வதால், kernel bug இரண்டிற்கும் ஆபத்தானது. நம்பகத்தன்மையற்ற குறியீடுகளுக்கு (untrusted code) இவை இரண்டையுமே நீங்கள் எல்லையாகத் தேர்ந்தெடுக்க மாட்டீர்கள். இவற்றிற்கு இடையிலான வேறுபாடு தொடக்க நிலையில்தான் உள்ளது. ஒரு jail, பல செயல்பாடுகளைத் தடுத்த நிலையிலேயே தொடங்குகிறது; நீங்கள் ஒவ்வொன்றாகத் தேவைக்கேற்ப அனுமதி அளிக்க வேண்டும். ஒரு Docker container, root பயனர் உரிமையுடன், சில capabilities நீக்கப்பட்ட namespaces-க்குள் தொடங்குகிறது; கூடுதல் பாதுகாப்பிற்கு நீங்கள் அதைத் தேர்வு செய்ய வேண்டும். நடைமுறையில், மாதிரியை விட உள்ளமைப்பே (configuration) பாதுகாப்பைத் தீர்மானிக்கிறது: allow.mount மற்றும் allow.raw_sockets இயக்கப்பட்ட நிலையில் உள்ள ஒரு jail, கவனமாக உள்ளமைக்கப்பட்ட container-ஐ விட பாதுகாப்பானது அல்ல.

ஒரு jail-ஐ எப்படி backup எடுப்பது?

dataset-ஐ snapshot எடுத்து அதை அனுப்பவும். sudo zfs snapshot zroot/jails/containers/web@backup கட்டளையைப் பயன்படுத்தி, அந்த snapshot-ஐ மற்றொரு pool-க்கு அல்லது நீங்கள் server-லிருந்து நகலெடுக்கும் ஒரு கோப்பிற்கு 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-ஐச் சேர்த்துக்கொள்ளுங்கள்.