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 olaraqlatest
istifadə 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:
shell
forması, 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