Қазіргі заманғы бағдарламаларды әзірлеуде көбінесе Docker контейнерлерімен жұмыс істеуге тура келеді, себебі олар қосымшаларды ауқымды әрі оқшауланған түрде іске қосуға мүмкіндік береді. Контейнерлермен жұмыс істегенде маңызды аспектілердің бірі — деректерді сақтау мәселесі. Кейде контейнерлерге сыртқы сақтау құрылғыларын, мысалы, NFS (Network File System), қосу қажет болады. Бұл мақалада біз NFS-дискіні Docker контейнеріне дұрыс қосу әдістерін қарастырамыз.
1. NFS дегеніміз не?
NFS (Network File System) — бұл желі арқылы файлдармен алмасуға мүмкіндік беретін протокол. Бұл файлдар физикалық тұрғыдан басқа компьютерде немесе серверде орналасқанымен, оларды жергілікті файлдық жүйе сияқты қолдануға болады. Docker контейнерлерімен жұмыс істегенде, NFS қажет болған жағдайда контейнерлер мен хост жүйесі арасындағы деректерді бөлісу үшін қолданылуы мүмкін. Бұл әсіресе деректердің тұрақтылығын қамтамасыз ету және контейнерлер арасында деректерді синхрондаудың қажеті туындағанда пайдалы.
2. NFS-ті Docker-ге қосу қажеттілігі
Docker контейнерлері өз табиғаты бойынша оқшауланған және контейнерлер өздерінің жеке файлдық қабатын қолданады. Бұл дегеніміз, контейнер ішінде жасалған өзгерістер контейнер жойылғаннан кейін сақталмайды. Егер деректерді контейнерлерден тыс сақтауды немесе ортақ сақтау жүйесіне қатынауды қамтамасыз ету қажет болса, сыртқы файлдық жүйелерді, мысалы, NFS қолдану керек. Бұл:
- Деректерді контейнерлер арасында бөлісуге мүмкіндік береді.
- Деректердің тұрақтылығын қамтамасыз етеді.
- Қорғанысты жеңілдетеді және қалпына келтіруді оңайлатады.
- Контейнерлерді бұрыннан бар сақтау жүйелерімен біріктіруді жеңілдетеді.
3. Жүйені дайындау
NFS-дискіні Docker контейнеріне қосу үшін бірнеше бастапқы қадамды орындау қажет.
3.1. NFS клиентін орнату
Алдымен, хост жүйесінде NFS клиентінің орнатылғанына көз жеткізу керек. Linux жүйелерінде мұны келесі командамен жасауға болады:
sudo apt-get install nfs-common # Debian/Ubuntu үшін
sudo yum install nfs-utils # CentOS/RHEL үшін
3.2. NFS серверін орнату
Егер сіз өзіңіздің NFS серверіңізді қолдансаңыз, оның дұрыс бапталғанын және желі арқылы қолжетімді екенін тексеріңіз. Мысалы, серверде экспортталған директорларды /etc/exports
конфигурация файлында көрсету қажет. Экспорттау мысалы:
/mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
Содан кейін серверді қайта жүктеңіз:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
3.3. NFS дискіні хост жүйесінде монтирлеу
Хост жүйесінде NFS дискінің дұрыс қосылғанын тексеру үшін оны монтирлеу қажет. Мысалы:
sudo mount -t nfs 192.168.1.100:/mnt/nfs_share /mnt/nfs
Егер бәрі дұрыс болса, онда /mnt/nfs
директориясы хост жүйесінде қолжетімді болады.
4. NFS дискіні Docker контейнеріне қосу
4.1. Docker-де volume қолдану
Docker сыртқы файлдық жүйелерді volume арқылы монтирлеуді қолдайды. NFS дискіні контейнерге қосу үшін, nfs
типті volume жасау керек.
NFS қолдану арқылы volume құрудың мысалы:
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.100,rw \
--opt device=:/mnt/nfs_share \
my_nfs_volume
Мұнда:
--driver local
— volume жергілікті болуы керек екенін көрсетеді.--opt type=nfs
— файлдық жүйенің түрі NFS екенін көрсетеді.--opt o=addr=192.168.1.100,rw
— NFS серверінің IP мекенжайын және оқуға/жазуға рұқсатты көрсетеді.--opt device=:/mnt/nfs_share
— NFS серверінде экспортталған директорияның жолын көрсетеді.
4.2. Volume-ды контейнерге қосу
Volume құрылғаннан кейін оны контейнер іске қосылғанда қосуға болады. Мысалы:
docker run -d \
--name my_container \
-v my_nfs_volume:/data \
nginx
Бұл мысалда біз Nginx бейнесі негізінде контейнер жасаймыз және NFS серверінен /mnt/nfs_share
директориясын контейнерге /data
директориясына монтирлейміз.
Енді контейнердегі /data
директориясына сақталған деректер NFS серверінде сақталады, бұл контейнер жойылған кезде де деректердің сақталуын қамтамасыз етеді.
4.3. NFS дискіні хост жүйесіне тікелей монтирлеу және bind mount қолдану
Volume қолданудың орнына, сіз NFS дискіні тікелей хост жүйесіне монтирлеп, оны контейнерге bind mount арқылы қосуға болады:
- Хост жүйесінде NFS дискіні монтирлеңіз:
sudo mount -t nfs 192.168.1.100:/mnt/nfs_share /mnt/nfs
- Контейнерді bind mount арқылы іске қосыңыз:
docker run -d \
--name my_container \
-v /mnt/nfs:/data \
nginx
Бұл жағдайда контейнер хост жүйесінде бұрыннан монтирленген директорияны пайдаланады, ол NFS серверінен алынған.
5. Мәселелер мен шешімдер
5.1. Құқықтарға қатысты мәселелер
NFS-ті Docker-мен бірге қолданудағы ең жиі кездесетін мәселе — құқықтарды дұрыс орнатпау. Бұл контейнерлердің NFS ортақ каталогтарына қол жеткізе алмауына әкелуі мүмкін. Мәселе мынада, NFS пайдаланушы мен топтың UID (User ID) және GID (Group ID) негізінде жұмыс істейді, бірақ бұл мәндер хост жүйесі мен контейнерлер арасында сәйкес келмеуі мүмкін.
Негізгі себептер:
- UID/GID сәйкессіздігі: Хост жүйесі мен контейнерлерде UID мен GID мәндері әртүрлі болуы мүмкін, бұл файлдарға қолжетімділіктің болмауына әкеледі.
- Файлдардың дұрыс емес рұқсаттары: NFS арқылы қолжетімді файлдар кейде контейнер үшін оқу/жазу құқықтары шектеулі болуы мүмкін.
Шешімдер:
-
UID/GID сәйкестендіру: Деректерге дұрыс қол жеткізу үшін хост жүйесі мен контейнерлердегі UID мен GID мәндерінің сәйкес болуы маңызды. Бір жолы — контейнерді хост жүйесіндегі пайдаланушының UID/GID мәндерін пайдаланып орнату.
Мысалы, Docker-де
user
параметрін пайдаланып, UID мен GID мәндерін көрсетуге болады:docker run -d \ --name my_container \ -v /mnt/nfs:/data \ --user $(id -u):$(id -g) \ nginx
Бұл контейнердің хост жүйесіндегі ағымдағы пайдаланушы құқықтарымен жұмыс істейтініне кепілдік береді.
-
NFS серверінде
no_root_squash
қолдану: NFS серверлері әдепкі бойынша root пайдаланушысының құқықтарын өзгертуі мүмкін (оны "root squashing" деп атайды). Бұл контейнердегі root пайдаланушысының әрекеттерін төмен құқықты пайдаланушы ретінде орындауға әкеледі. Бұл мәселені шешу үшін NFS серверінде "root squashing"-ты өшіруге болады./etc/exports
файлында экспортталатын каталог үшінno_root_squash
опциясын қосыңыз:/mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
Одан кейін NFS серверін қайта іске қосыңыз:
sudo exportfs -a sudo systemctl restart nfs-kernel-server
-
Құқықтарды тексеру: NFS серверінде деректерге қол жеткізуі тиіс барлық пайдаланушылар үшін рұқсаттардың дұрыс орнатылғанына көз жеткізіңіз. Мысалы:
sudo chown -R nobody:nogroup /mnt/nfs_share sudo chmod -R 755 /mnt/nfs_share
Бұл командалар каталогты барлық пайдаланушыларға оқу және жазу үшін қолжетімді етеді.
5.2. Өнімділік мәселелері
NFS-ті Docker-пен қолданғанда өнімділік мәселелері туындауы мүмкін, әсіресе серверлер үлкен қашықтықта орналасса немесе желі баяу болса. NFS жоғары латенттілік пен өткізу қабілеттілігінің төмендеуінен зардап шегуі мүмкін, бұл контейнерлердің жұмысын баяулатуы мүмкін.
Негізгі себептер:
- Жоғары латенттілік: Егер NFS сервері алыста болса немесе желіде үлкен кідіріспен жұмыс істесе, бұл файлдарға қолжетімділікті баяулатуы мүмкін.
- Желілік жүктеме: Контейнерлер файлдармен көп жұмыс істеген кезде, желі жүктемесі өсуі мүмкін, бұл өнімділіктің төмендеуіне әкеледі.
- Желілік проблемалар: Желідегі мәселелер (мысалы, байланыс тұрақсыздығы) пакеттердің жоғалуына әкелуі мүмкін, бұл деректерге кіруді баяулатады.
Шешімдер:
-
Кэштеу қолдану: NFS өнімділігін арттыру үшін клиент жағында кэштеуді қосуға болады, бұл серверге жіберілетін сұраныстардың санын азайтады. Мұны монтирлеу параметрлері арқылы орнатуға болады.
Мысалы, NFS дискіні монтирлеу кезінде
rsize
жәнеwsize
параметрлерін қолдану арқылы деректер блоктарының өлшемін ұлғайтуға болады:sudo mount -t nfs -o rsize=8192,wsize=8192,hard,timeo=14,intr 192.168.1.100:/mnt/nfs_share /mnt/nfs
-
Желіні оңтайландыру: Жоғары жылдамдықты байланыс (мысалы, Gigabit немесе 10Gigabit Ethernet) контейнерлердің үлкен көлемдегі деректермен жұмыс істеуі кезінде желінің өткізу қабілеттілігін арттыруға көмектеседі.
-
Өнімділікті бақылау және талдау: Желіні және дискіні бақылау құралдарын пайдаланыңыз, мысалы
nfsstat
,iostat
немесеnetstat
, NFS серверінің күйін бақылау үшін.
5.3. Сәйкессіздік мәселелері
Docker мен NFS арасында кейде сәйкессіздік мәселелері туындайды, себебі Docker контейнерлері кейбір NFS функцияларын қолдамауы мүмкін немесе арнайы баптауларды қажет етеді.
Негізгі себептер:
- Контейнерде NFS қолдауы жоқ: Кейбір Docker бейнелерінде NFS жұмысын қамтамасыз ететін қажетті пакеттер жоқ (мысалы, NFS клиенті). Бұл NFS дискіні контейнерге монтирлеу кезінде қателіктер туындауына әкеледі.
- Docker түрлі операциялық жүйелерде: Әртүрлі операциялық жүйелерде жұмыс істейтін контейнерлер мен NFS серверлерінің арасында үйлесімсіздік мәселелері болуы мүмкін.
Шешімдер:
-
Контейнерде қажетті пакеттерді орнату: Контейнерде NFS қолдауы болмаса, қажетті пакеттерді орнату керек, мысалы
nfs-common
Debian/Ubuntu үшін немесеnfs-utils
CentOS/RHEL үшін. Dockerfile арқылы мұны келесі түрде жасай аласыз:FROM ubuntu:20.04 RUN apt-get update && apt-get install -y nfs-common
-
NFS нұсқаларын тексеру: NFS сервері мен контейнерде қолданылатын NFS протоколының нұсқалары үйлесімді болуы керек. Мысалы, сервер NFSv3 қолданса, ал контейнер NFSv4 қолданса, сәйкессіздік туындауы мүмкін.
-
Монтирлеу параметрлерін қолдану: Максималды үйлесімділікті қамтамасыз ету үшін монтирлеу кезінде арнайы параметрлерді қолдану қажет болуы мүмкін. Мысалы,
nfsvers=3
немесеnfsvers=4
параметрлерін қолдануға болады.
5.4. Масштабтау мәселелері
NFS дискіні бір уақытта көптеген контейнерлер қолданған кезде масштабтау мәселелері туындауы мүмкін. NFS сервері контейнерлерден көп сұраныс алған жағдайда жүктеме артуы мүмкін, бұл өнімділіктің төмендеуіне әкеледі.
Шешімдер:
-
Қуатты NFS серверлерін қолдану: Масштабтау үшін жоғары өткізу қабілеттілігі мен көп тапсырмаларды бір уақытта өңдеуге мүмкіндік беретін қуатты NFS серверлері қажет.
-
NFS кластерін қолдану: Жоғары қолжетімділік пен төзімділікті қамтамасыз ету үшін бірнеше NFS серверінен тұратын кластерлерді қолдануға болады. Мысалы, Ceph немесе GlusterFS сияқты технологиялар масштабталатын шешімдер ұсынуға болады, олар Docker контейнерлерімен жақсы жұмыс істейді.
Қорытынды
NFS дискіні Docker контейнерлеріне қосу — деректерді сақтау және ортақ пайдалану үшін күшті құрал. Алайда, бұл құралды қолдану кезінде өнімділік пен тұрақтылыққа әсер етуі мүмкін бірнеше мәселелер туындауы мүмкін. Оларды түсініп, дұрыс шешімдер қабылдай отырып, NFS-ті контейнерлендірілген ортада тиімді қолдануға болады.
Реклама Google |
![]() |
Назар аударыңыз! Бұл мақала ресми құжат емес.Ақпаратты сақтықпен және сынақ ортасында пайдалану керек.
Заманауи сақтық көшірме жасау, репликациялау, деректерді синхрондау және төлемдік бағдарламадан қорғау жүйелерін құру туралы сұрақтарыңыз болса, қазіргі заманғы деректердің сақтық көшірмесін жасау және қалпына келтіру технологиялары бойынша кеңес алу үшін біздің компанияға хабарласыңыз . Біздің компанияның осы салада 20 жылдан астам тәжірибесі бар. |
Қазақстандағы резервтік көшірудің ең жақсы он тәжірибесі
- Ubuntu 24 жүйесінде Docker контейнерлерін орнату және баптау
- Docker контейнерлерін Kubernetes құралдарымен резервтік көшіру және қалпына келтіру
- NFS-дискіні Docker контейнеріне қосу: Тәжірибелік терең зерттеу
- Bacula на oVirt: Орнату, баптау және тиімді пайдалану
- Zabbix на oVirt: Орнату, баптау және тиімді пайдалану
- Prometheus + Grafana на oVirt: Орнату және тиімді пайдалану
- oVirt Backup: Орнату, баптау және тиімді пайдалану
- oVirt жүйесінде Docker контейнерлері — терең шолу
- Kubernetes-ті oVirt-те орнату және баптау — терең шолу
- oVirt жүйесінде ManageIQ орнату және баптау: Толық нұсқаулық