CodeGym /Kurslar /Docker SELF /Dockerfile: faylın yaradılması və strukturu

Dockerfile: faylın yaradılması və strukturu

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

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

  1. İ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.
  2. 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.
  3. 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:

  1. FROM: Hansi baza image-dən yeni image-in yaradılacağını göstərir.
  2. MAINTAINER: Dockerfile müəllifini müəyyən edir (məcburi deyil, amma məlumat üçün faydalıdır).
  3. RUN: Konteynerdə əmrləri icra edir və yeni bir qat yaradır.
  4. COPY: Faylları və qovluqları yığılma kontekstindən konteyner fayl sisteminə kopyalayır.
  5. 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.
  6. WORKDIR: Sonrakı əmrlər üçün işçi qovluğunu təyin edir.
  7. ENV: Ətraf dəyişənlərini təyin edir.
  8. CMD: Konteyner işə salındıqda yerinə yetiriləcək standart əmri müəyyən edir.
  9. ENTRYPOINT: Konteyner işə salındıqda yerinə yetiriləcək əmri müəyyən edir və arqumentlərin ötürülməsinə imkan verir.
  10. EXPOSE: Konteyner tərəfindən hansı portların istifadə olunacağını Docker-ə bildirir.
  11. 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:

dockerfile

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

  1. FROM node:14: 14-cü versiyalı rəsmi Node.js image istifadə edilir.
  2. WORKDIR /app: Konteynerin işçi qovluğunu təyin edir.
  3. COPY package.json ./: package.jsonpackage-lock.json fayllarını işçi qovluğa kopyalayır.
  4. RUN npm install: package.json-da göstərilmiş asılılıqları qurur.
  5. COPY . .: Layihənin bütün fayllarını konteynerin işçi qovluğuna kopyalayır.
  6. EXPOSE 3000: Tətbiqə giriş üçün 3000 portunu təyin edir.
  7. 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.

Terminal


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.

Terminal


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.

dockerfile


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.

dockerfile


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.

dockerfile

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