3.1 FROM Təlimatı
Dockerfile — bu, Docker image yaratmaq üçün təlimatları saxlayan mətn faylıdır. Dockerfile-dəki hər bir təlimat müəyyən bir işi yerinə yetirir və imagə yeni bir qat əlavə edir. Bu mühazirədə biz Dockerfile-in əsas təlimatlarını müzakirə edəcəyik: FROM, RUN, COPY və CMD, bunlar funksional və effektiv Docker image yaratmaq üçün əsasdır.
FROM Təlimatı yeni image yaradılacaq baza imagini müəyyən edir. Bu, hər hansı bir Dockerfile-də olan ilk təlimatdır və imagin yığılması üçün başlanğıc nöqtəsini təyin edir.
Sintaksis
FROM
[:
] [AS
]
Burada:
<image>: baza imagenin adı.<tag>: (istəyə bağlı) baza imagenin versiyası. Varsayılan olaraqlatestistifadə olunur.AS <name>: (istəyə bağlı) bu build mərhələsi üçün ad təyin etmək (çoxmərhələli build zamanı istifadə olunur).
Nümunələr
Baza image kimi Ubuntu istifadə etmək:
FROM ubuntu:20.04
Rəsmi Node.js imagindən istifadə:
FROM node:14
Optimizasiya üçün çoxmərhələli build-dən istifadə:
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
Bu nümunədə iki baza imagindən istifadə olunur. Birinci (node:14) tətbiqin yığılması üçün istifadə olunur, ikinci (nginx:alpine) — statik faylları xidmət edəcək yüngül bir server yaratmaq üçün istifadə edilir.
Çoxmərhələli build-dən istifadə sayəsində, son image yalnız minimum fayl və proqramlar dəstini saxlayır (bu halda Nginx və yığılmış statik fayllar), bu da onu yüngül və yerləşdirmə baxımından daha sürətli edir.
3.2 RUN təlimatı
RUN təlimatı konteyner daxilində komandaları icra edir və image-də yeni bir qat yaradır. Bu təlimat paketlərin quraşdırılması, mühitin sazlanması və image-in hazırlanması üçün lazım olan digər komandaların yerinə yetirilməsi üçün istifadə olunur.
Sintaksis:
RUN <command>
Burada:
<command>: konteyner daxilində icra olunacaq komanda.
Nümunələr:
Ubuntu image-də paketlərin quraşdırılması:
RUN apt-get update && apt-get install -y curl git
Kodun kompilyasiyası:
RUN gcc -o myapp myapp.c
Birkaç komandanın birləşdirilməsi
Layların sayını azaltmaq, image ölçüsünü kiçiltmək və build prosesini sürətləndirmək üçün bir neçə komandayı bir RUN təlimatında birləşdirmək tövsiyə olunur.
RUN apt-get update \
&& apt-get install -y curl git \
&& rm -rf /var/lib/apt/lists/*
3.3 Təlimat COPY
COPY təlimatı build kontekstindən faylları və qovluqları konteynerin fayl sisteminə kopiyalayır. Bu, mənbə kodu, konfiqurasiya faylları və digər resursları konteynerə ötürmək üçün faydalıdır.
Syntax:
COPY <src> <dest>
Burada:
-
<src>: Build kontekstində olan fayl və ya qovluqların yolu. <dest>: Konteynerdə olan təyinat yolu.
Nümunələr:
Cari qovluğun bütün məzmununun konteynerin işçi qovluğuna kopiyalanması:
COPY . /app
Təklik faylların kopiyalanması:
COPY package.json /app/package.json
COPY server.js /app/server.js
.dockerignore faylının istifadəsi
Gərəksiz faylları kopiyalama prosesindən çıxarmaq üçün .dockerignore faylından istifadə edə bilərsiniz. Bu, .gitignore ilə eyni cür işləyir.
node_modules
dist
*.log
3.4 Təlimat CMD
CMD təlimatı konteyner işə düşəndə yerinə yetiriləcək komandaları müəyyən edir. RUN-dan fərqli olaraq, hansı ki, qurulma mərhələsində icra olunur, CMD artıq yaradılmış image-dən konteyner işə salındıqda icra olunur.
Sintaksis:
CMD ["executable","param1","param2"]
Və ya
CMD command param1 param2
Burada:
- ["executable","param1","param2"]: exec forması, hansı ki, siqnalların düzgün şəkildə emalı üçün daha üstünlük təşkil edir.
- command param1 param2:
shellforması, hansı ki, komandanı shell-də icra edir.
Nümunələr:
Node.js tətbiqini işə salmaq üçün:
CMD ["node", "app.js"]
shell skriptini işə salmaq üçün:
CMD /usr/bin/myscript.sh
CMD və ENTRYPOINT arasındakı fərq
CMD default bir komanda təyin edir, hansı ki, konteyner işə düşəndə dəyişdirilə bilər. ENTRYPOINT isə dəyişdirilə bilməyən və həmişə konteyner işə salındıqda icra olunan komandanı təyin edir.
ENTRYPOINT-dən istifadə nümunəsi:
ENTRYPOINT ["python", "script.py"]
CMD ["arg1"]
Bu nümunədə ENTRYPOINT Python skriptini işə salır, CMD isə dəyişə biləcəyiniz arqumentləri ötürür.
Əsas təlimatlarla bir Dockerfile nümunəsi
# Node.js bazalı image istifadə olunur
FROM node:14
# İşçi direktoriyasını təyin edirik
WORKDIR /app
# package.json və package-lock.json fayllarını kopyalayırıq
COPY package*.json ./
# Asılılıqları (dependencies) quraşdırırıq
RUN npm install
# Tətbiqin kodlarını kopyalayırıq
COPY . .
# Tətbiqin istifadə edəcəyi portu təyin edirik
EXPOSE 3000
# Tətbiqi işə salmaq üçün komandaları müəyyən edirik
CMD ["node", "app.js"]
GO TO FULL VERSION