CodeGym /Kurslar /Docker SELF /Dockerfile-in əsas təlimatları

Dockerfile-in əsas təlimatları

Docker SELF
Səviyyə , Dərs
Mövcuddur

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, COPYCMD, 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 olaraq latest 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:

dockerfile


FROM ubuntu:20.04

Rəsmi Node.js imagindən istifadə:

dockerfile


FROM node:14

Optimizasiya üçün çoxmərhələli build-dən istifadə:

dockerfile


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ı:

dockerfile


RUN apt-get update && apt-get install -y curl git

Kodun kompilyasiyası:

dockerfile


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.

dockerfile


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ı:

dockerfile


COPY . /app

Təklik faylların kopiyalanması:

dockerfile


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.

Text


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:

dockerfile


CMD ["node", "app.js"]

shell skriptini işə salmaq üçün:

dockerfile


CMD /usr/bin/myscript.sh

CMDENTRYPOINT 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:

dockerfile


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

dockerfile

        
# 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"]
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION