Docker — бұл қосымшаларды контейнерлеу үшін қуатты құрал, ол қосымшаларды жасау, тестілеу және орналастыру барысында икемділік ұсынады. Docker-мен жұмыс жасаудың басты аспектілерінің бірі — тиімді және оңтайландырылған Docker образдарын жасау. Образдардың дұрыс оңтайландырылмауы контейнерлерді жүктеу уақытын, дискінің көлемін, қауіпсіздікті және өнімділікті нашарлатуы мүмкін.
Бұл мақалада біз Dockerfile образдарын оңтайландыруға қатысты терең талқылап, негізгі ұсыныстардан бастап, жылдам, жеңіл және қауіпсіз образдар жасау үшін қолдануға болатын күрделі әдістерді қарастырамыз.
1. Дұрыс базалық образды таңдау
Dockerfile процесіндегі алғашқы және, мүмкін, ең маңызды қадам — дұрыс базалық образды таңдау. Docker Hub-та көптеген қоғамдық образдар бар, және дұрыс таңдалмаған базалық образ образдың өлшеміне және жүктеу уақытына әсер етуі мүмкін.
Минималистік образдарды қолдану
alpine
— бұл тек 5 МБ占тайтын минималистік образ. Ол жиі жеңіл және қауіпсіз контейнерлер жасау үшін қолданылады.
FROM alpine
Дегенмен, бұл образ көптеген стандартты кітапханаларды қамтымайды, олар сіздің қосымшаңызға қажет болуы мүмкін. Сондықтан күрделі қосымшалар үшін debian
немесе ubuntu
сияқты басқа толығырақ образдарды қолдану орынды.
Арнайы оптимизацияланған образдарды қолдану
Егер сіз белгілі бір қосымшамен жұмыс істесеңіз (мысалы, Python, Node.js), онда осы стекке оңтайландырылған образды пайдалану жақсы. Мысалы:
FROM python:3.9-alpine
немесе
FROM node:16-alpine
Бұл образдар өздеріне тиісті фреймворктарды пайдалану үшін қажет барлық құралдарды қамтиды, бұл уақыт пен орын үнемдеуге мүмкіндік береді.
2. Қабаттарды (слойларды) минимизациялау
Әрбір команда Dockerfile ішіндегі жаңа қабатты құрады. Қабаттардың саны образдың өлшеміне, өнімділікке және құрылыс уақытын тікелей әсер етеді. Сондықтан қабаттардың санын минимизациялау маңызды.
Командаларды біріктіру
Оңтайландырудың бір әдісі — бірнеше командаларды бір қабатта орындау үшін біріктіру. Көптеген RUN
командаларын жеке-жеке орындаудың орнына оларды &&
арқылы біріктіруге болады:
RUN apt-get update && apt-get install -y \
curl \
git \
vim \
&& rm -rf /var/lib/apt/lists/*
Мұнда:
- Барлық орнату командалары бір жолға біріктірілген.
- Соңында уақытша файлдар жойылады, бұл образдың көлемін азайтады.
Көп сатылы құрылыс (multi-stage builds)
Dockerfile-де бірнеше құрылыс кезеңдерін қолдануға болады, бұл процесті бірнеше қадамға бөлуге және аралық файлдарды соңғы образдан шығаруға мүмкіндік береді. Бұл көп сатылы құрылыс деп аталады.
Мысал:
# Құрылыс кезеңі
FROM node:16-alpine AS build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
# Соңғы образ
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
Мұнда бірінші кезеңде қосымша құрылып, екінші кезеңде тек дайын өнім Nginx образына көшіріледі. Бұл тәсіл соңғы образдан барлық уақытша файлдар мен тәуелділіктерді алып тастауға мүмкіндік береді.
3. Образдың көлемін азайту
Уақытша файлдарды жою
Қосымша тәуелділіктерді орнату және әртүрлі әрекеттерді орындау кезінде уақытша файлдар пайда болуы мүмкін, олар образдың көлемін арттырады. Оларды қолданғаннан кейін жою маңызды. Мұны rm
немесе кэшті тазалау арқылы жасауға болады:
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
--no-install-recommends
параметрін қолдану
Пакеттерді орнату кезінде қосымша тәуелділіктерді орнатпау үшін --no-install-recommends
параметрін қолдануға болады.
RUN apt-get install --no-install-recommends -y \
curl \
git
Бұл тәсіл образдың көлемін азайтуға мүмкіндік береді, себебі қосымша пакеттер мен тәуелділіктер орнатылмайды.
Тәуелділіктерді минимизациялау
Контейнерге орнатылатын кейбір кітапханалар немесе құралдар әрдайым қосымшаның жұмыс істеуі үшін қажет болмауы мүмкін. Мүмкіндігінше тек қосымшаңызға қажетті тәуелділіктерді ғана орнатыңыз.
Компиляция деңгейінде оңтайландыру
Егер образда компиляцияланған код (мысалы, C немесе C++ қосымшалары) болса, компиляцияны оңтайландыру арқылы оның көлемін азайтуға болады. Мысалы:
RUN gcc -O3 -o myapp myapp.c
-O3
параметрі компиляциядағы оңтайландыруды іске қосады, бұл соңғы бинарлық файлдың көлемін азайтуға көмектеседі.
4. Тәуелділіктерді басқаруға арналған дұрыс құралдарды қолдану
Оңтайландырудың маңызды бөліктерінің бірі — тәуелділіктерді дұрыс басқару. Қолданылатын технологияға байланысты тәуелділіктерді орнату үшін тиісті құралдарды пайдалану қажет.
Node.js үшін
Node.js жұмысында тек өндірістік тәуелділіктерді орнату үшін --production
флагын қолдануға болады:
RUN npm install --production
Python үшін
Python-да тәуелділіктерді орнату үшін виртуалды орта қолдану жақсы:
RUN python -m venv /env
RUN /env/bin/pip install -r requirements.txt
Бұл тәсіл пакеттерді жаһандық емес, тек виртуалды ортада орнатуға мүмкіндік береді, бұл қосымшаның таза жұмыс істеуін қамтамасыз етеді.
Ruby үшін
Ruby-де қажетсіз тәуелділіктерді алып тастау үшін --without
флагын қолдануға болады:
RUN bundle install --without development test
5. Қауіпсіздік
Образдарды оңтайландыру тек олардың көлемін азайту және құрылыс уақытын жеделдету ғана емес, сонымен бірге қауіпсіздікті қамтамасыз етуге де бағытталуы тиіс.
Минималды құқықтармен образдарды пайдалану
Қауіпсіздік үшін, контейнерлерді тек root емес, арнайы жасалған пайдаланушының атынан іске қосу маңызды. Бұл контейнердегі осалдықтарды пайдалануға қарсы қауіпсіздікті арттырады.
RUN adduser --disabled-password --gecos '' myuser
USER myuser
Мұнда myuser
деген жаңа пайдаланушы жасалып, контейнер осы пайдаланушының атынан жұмыс істейді.
Образдарды үнемі жаңарту
Қандай образды қолдансаңыз да, оның жаңартуларын қадағалап отыру маңызды, себебі кейбір компоненттерде белгілі бір осалдықтар болуы мүмкін. Оларды жаңарту үшін келесі команданы қолдануға болады:
RUN apt-get update && apt-get upgrade -y
6. Кэшті тиімді пайдалану
Docker құрылыс процесінде қабаттарды кэштеуді пайдаланады, бұл құрылыс уақытын үнемдеуге көмектеседі. Dockerfile жазған кезде бұл мүмкіндікті ескеру керек. Әсіресе тәуелділіктерді орнату немесе кодты көшіру сияқты әрекеттер жиі өзгеретін болады. Сондықтан, осы қабаттардың өзгерісін азайту үшін белгілі бір тәсілдер қолдану қажет.
Мысалы, алдымен тәуелділіктер файлдарын көшіріп, тек содан кейін кодты көшірген дұрыс:
COPY package.json /app/
RUN npm install
COPY . /app
Осылайша, егер package.json
файлы өзгермеген болса, Docker кэшті қолданады және тәуелділіктерді қайта орнатпайды.
Қорытынды
Docker образдарын оңтайландыру — контейнерлеу процесінің маңызды бөлігі. Дұрыс базалық образды таңдау, қабаттарды минимизациялау, көп сатылы құрылыс, уақытша файлдарды жою және тәуелділіктерді тиімді басқару қосымшаларды жеңіл, жылдам және қауіпсіз етіп жасауға мүмкіндік береді. Осы әдістерді қолдану арқылы сіз өзіңіздің контейнерлеріңізді жоғары өнімді, аз көлемді және қауіпсіз ете аласыз.
Реклама Google |
![]() |
Назар аударыңыз! Бұл мақала ресми құжат емес.Ақпаратты сақтықпен және сынақ ортасында пайдалану керек.
Заманауи сақтық көшірме жасау, репликациялау, деректерді синхрондау және төлемдік бағдарламадан қорғау жүйелерін құру туралы сұрақтарыңыз болса, қазіргі заманғы деректердің сақтық көшірмесін жасау және қалпына келтіру технологиялары бойынша кеңес алу үшін біздің компанияға хабарласыңыз . Біздің компанияның осы салада 20 жылдан астам тәжірибесі бар. |
Қазақстандағы резервтік көшірудің ең жақсы он тәжірибесі
- Proxmox гипервизорын жаңа физикалық серверге көшіру
- OpenShift қолдану арқылы Docker контейнерлерін пайдалану — терең талдау
- Wazuh-ты Proxmox қауіпсіздігін бақылау үшін пайдалану - Терең талдау Кіріспе
- Fail2Ban-ды zVirt-те орнату, баптау және пайдалану
- Graylog Community Edition-ді Proxmox-қа орнату, баптау және пайдалану
- Elasticsearch-ті Proxmox жүйесіне орнату, баптау және пайдалану
- Kibana-ны Proxmox-қа орнату, баптау және пайдалану
- Logstash-ты Proxmox-қа орнату, баптау және пайдалану
- Proxmox логтарын талдау үшін ИИ мүмкіндіктері
- Ceph-ті OpenStack-те орнату, баптау және пайдалану