2.1 Dockerfile əsas konseptlər
Dockerfile — bu, mətn faylı
-dır, hansı ki, Docker-in image yaratmaq üçün istifadə etdiyi əmrlərin ardıcıllığını əhatə edir. Bu, əsasdan final vəziyyətinə qədər bir image-in necə qurulacağını təsvir edən bir "resept" kimi xidmət edir. Dockerfile-ın strukturu və yaradılmasının başa düşülməsi Docker-dən effektiv istifadə etmək üçün vacibdir.
Dockerfile əsas konseptlər
- İdempotentlik: Dockerfile, image-in yaradılması üçün yerinə yetirilməli olan əmrləri təsvir edir. Bu əmrlər idempotent olmalıdır, yəni onların bir neçə dəfə yerinə yetirilməsi eyni nəticəni verməlidir.
- Ardıcıllıq: Dockerfile-də əmrlər yuxarıdan aşağıya sıra ilə həyata keçirilir. Əmrlərin sırası vacibdir, çünki hər bir əmr yeni bir qat yaradır.
- Qatlı struktur: Dockerfile-dəki demək olar ki, hər bir addım image-ə yeni bir qat əlavə edir. Bu qatlar keşlənir və yığılma prosesini optimallaşdırmaq üçün təkrar istifadə edilə bilər.
Dockerfile strukturu
Dockerfile, hər biri müəyyən bir funksiyanı yerinə yetirən bir çox direktivlərdən ibarətdir. Aşağıda Dockerfile-də istifadə olunan əsas direktivlər verilmişdir:
- FROM: Hansi baza image-dən yeni image-in yaradılacağını göstərir.
- MAINTAINER: Dockerfile müəllifini müəyyən edir (məcburi deyil, amma məlumat üçün faydalıdır).
- RUN: Konteynerdə əmrləri icra edir və yeni bir qat yaradır.
- COPY: Faylları və qovluqları yığılma kontekstindən konteyner fayl sisteminə kopyalayır.
- ADD: Faylları və qovluqları kopyalayır, həmçinin arxivlərin çıxarılmasını və URL-dən fayl yüklənməsini dəstəkləyir.
- WORKDIR: Sonrakı əmrlər üçün işçi qovluğunu təyin edir.
- ENV: Ətraf dəyişənlərini təyin edir.
- CMD: Konteyner işə salındıqda yerinə yetiriləcək standart əmri müəyyən edir.
- ENTRYPOINT: Konteyner işə salındıqda yerinə yetiriləcək əmri müəyyən edir və arqumentlərin ötürülməsinə imkan verir.
- EXPOSE: Konteyner tərəfindən hansı portların istifadə olunacağını Docker-ə bildirir.
- VOLUME: Xarici həcm üçün montaj nöqtəsi yaradır.
2.2 Dockerfile-in yaradılması
Dockerfile-in yaradılması nümunəsi
Node.js-də veb tətbiqi üçün sadə Dockerfile yaradılmasını nəzərdən keçirək.
1-ci addım: Əsas Dockerfile-in yaradılması
Layihənizin kök qovluğunda Dockerfile adlı bir fayl yaradın və aşağıdakı sətirləri əlavə edin:
# Node.js üçün əsas image istifadə olunur
FROM node:14
# İşçi qovluğu təyin edilir
WORKDIR /app
# package.json və package-lock.json faylları kopyalanır
COPY package*.json ./
# Asılılıqlar qurulur
RUN npm install
# Layihənin bütün faylları kopyalanır
COPY . .
# Tətbiqin istifadə edəcəyi port təyin edilir
EXPOSE 3000
# Tətbiqi işə salmaq üçün komanda təyin olunur
CMD ["node", "app.js"]
Bu Dockerfile aşağıdakıları edir:
- FROM node:14: 14-cü versiyalı rəsmi
Node.js
image istifadə edilir. - WORKDIR /app: Konteynerin işçi qovluğunu təyin edir.
- COPY package.json ./:
package.json
vəpackage-lock.json
fayllarını işçi qovluğa kopyalayır. - RUN npm install:
package.json
-da göstərilmiş asılılıqları qurur. - COPY . .: Layihənin bütün fayllarını konteynerin işçi qovluğuna kopyalayır.
- EXPOSE 3000: Tətbiqə giriş üçün 3000 portunu təyin edir.
- CMD ["node", "app.js"]: Tətbiqi işə salmaq üçün standart komanda təyin edir.
2-ci addım: Image-in tikilməsi
Dockerfile yaradıldıqdan sonra docker build
komandasından istifadə edərək image tikə bilərsiniz.
Bu komanda cari qovluqdakı Dockerfile əsasında my-node-app adlı bir image yaradır.
docker build -t my-node-app .
3-cü addım: Konteynerin işə salınması
Yaradılan image əsasında docker run
komandasından istifadə edərək konteyneri işə salın.
Bu nümunə konteyneri fon rejimində işə salır və host maşının 3000 portundan konteynerin 3000 portuna yönləndirir.
docker run -d -p 3000:3000 my-node-app
2.3 Dockerfile üçün Əlavə Təlimatlar
1. Ətraf mühit dəyişənlərinin qurulması
Konteynerdə əlçatan olacaq ətraf mühit dəyişənlərini ENV
təlimatından istifadə edərək qura bilərsiniz.
ENV NODE_ENV=production
2. Bir neçə RUN
komandası istifadə etmək
Bəzən bir neçə komandanı bir RUN
təlimatında birləşdirmək mənalı olur ki, bu da layların sayını azaltmağa, Image ölçüsünü kiçiltməyə və yığma prosesini sürətləndirməyə kömək edir.
RUN apt-get update && apt-get install -y \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
Faydalıdır!
Linux-da, əgər komandalarınız bir sətirə sığmırsa, \
işarəsini qoyub onu növbəti sətirdə yazmağa davam edə bilərsiniz. Beləliklə iki (və ya daha çox) sətir əməliyyat sistemi tərəfindən bir kimi qəbul ediləcək.
Faydalıdır!
Əgər bir neçə OS komandasını bir sətirdə yazmaq istəyirsinizsə, &&
işarəsini istifadə etməlisiniz: command1 && command2 && command3
– bu sadəcə 3 fərqli komandadır ki, bir sətirdə yazılıb.
Komandaların sırasını optimallaşdırmaq
Docker-in keşindən effektiv istifadə etmək üçün nadir hallarda dəyişən, məsələn, package.json
kimi faylları əvvəlcə köçürmək və layihənin digər fayllarını köçürmədən öncə asılılıqları qurmaq tövsiyə edilir.
İnkişaf etmiş Dockerfile nümunəsi
Çətin layihələrdə əlavə parametrlərlə daha inkişaf etmiş Dockerfile tələb oluna bilər.
# Minimum Node.js əsas imicindən istifadə edilir
FROM node:14-alpine
# İşçi direktori qurulur
WORKDIR /usr/src/app
# package.json köçürülür və asılılıqlar quraşdırılır
COPY package*.json ./
RUN npm install --only=production
# Mənbə kodu köçürülür
COPY . .
# İş üçün port göstərilir
EXPOSE 8080
# Ətraf mühit dəyişənləri qurulur
ENV NODE_ENV=production
# Tətbiq işə salınır
CMD ["node", "server.js"]
GO TO FULL VERSION