4.1 docker build komandasının əsasları
docker build
komandası Dockerfile-dən Docker image-ləri yaratmaq üçün əsas alətdir. O, Dockerfile-dən təlimatları oxuyur və onları ardıcıl olaraq icra edir, image-nin lay-lay strukturasını yaradır. Bu mühazirədə, docker build
komandasının necə işlədiyini, onun əsas parametrlərini və istifadə nümunələrini ətraflı araşdıracağıq.
docker build
komandası, Dockerfile və build kontekstindən Docker image yaratmaq üçün istifadə olunur. Build konteksti - Docker-in image yaratmaq üçün istifadə edəcəyi fayllar toplusudur. Kontekst, lokal direktoriyanız və ya, məsələn, GitHub kimi, uzaq bir repozitoriya ola bilər.
Sintaksis
docker build [OPTIONS] PATH | URL | -
Burada:
-
PATH
: Dockerfile və build kontekstini saxlayan direktoriyaya yol. URL
: Uzaq repozitoriyanın URL ünvanı.-
: Dockerfile-i standart girişdən (stdin) oxumaq.
Əsas istifadə nümunəsi
Bu nümunədə Docker, cari direktoriyadan ((.)
) Dockerfile istifadə edəcək və myimage
adlı və latest
tag ilə bir image yaradacaq.
docker build -t myimage:latest .
4.2 build
komandasının özəlləşdirilməsi
docker build
komandasının əsas parametrləri
docker build
komandası çoxlu sayda opsiyalar dəstəkləyir, bu da yığım prosesini tənzimləməyə imkan verir.
1. -t
, --tag
parametrləri
-t
və ya --tag
parametri yaradılan image üçün ad və tag təyin etmək üçün istifadə olunur.
docker build -t myimage:latest .
2. -f
, --file
parametrləri
-f
və ya --file
parametri, standart Dockerfile-dan fərqli bir alternativ Dockerfile göstərmək imkanı verir.
docker build -f Dockerfile.dev -t myimage:dev .
3. --build-arg
parametri
--build-arg
parametri Dockerfile-də ARG instruktsiyasının köməyi ilə təyin olunan yığım parametrlərini ötürmək üçün istifadə olunur.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. --no-cache
parametri
--no-cache
parametri keşdən istifadə etmədən yığım aparmağa imkan verir. Bu, bütün komandaların yenidən icra olunmasını təmin etmək üçün faydalıdır.
docker build --no-cache -t myimage:latest .
5. --target
parametri
--target
parametri, çoxmərhələli yığımda hədəf mərhələni göstərmək üçün istifadə olunur.
docker build --target builder -t myimage:builder .
6. --rm
parametrləri
--rm
parametri Docker-a yığımın uğurla yekunlaşmasından sonra müvəqqəti konteynerləri silmək üçün göstəriş verir (default olaraq aktivdir).
docker build --rm -t myimage:latest .
4.3 Docker build nümunələri
Nümunə 1: Əsas yığım
Tutaq ki, sizin sadə bir Node.js tətbiqiniz var və siz bu tətbiqi yerləşdirmək üçün Docker-imaj yaratmaq istəyirsiniz.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Yığım komandası:
docker build -t mynodeapp:latest .
Bu nümunədə Docker cari direktoriyada olan Dockerfile-dan istifadə edərək mynodeapp
adlı imaj yaradacaq və ona latest
tagını əlavə edəcək.
Nümunə 2: Argümentlərlə yığım
Yığım argümentləri Dockerfile-a yığım zamanı dəyişənlər ötürməyə imkan verir.
Dockerfile
FROM node:14
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Yığım komandası:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
Bu nümunədə APP_VERSION
argümenti Dockerfile-a ötürülür, bu isə tətbiqin versiyasını yığım zamanı təyin etməyə imkan verir.
Nümunə 3: Çoxmərhələli yığım
Çoxmərhələli yığım yalnız lazımi komponentləri daxil edən imajlar yaratmaq üçün istifadə olunur, bu isə final imajın ölçüsünü azaltmağa imkan verir.
Dockerfile
# Yığım mərhələsi
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Lazımsız fayllar olmadan yalnız lazım olan fayllarla imaj yaratmaq
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
Yığım komandası:
docker build -t mywebapp:latest .
Bu nümunədə öncə tətbiqin yığılması prosesinin aparıldığı aralıq builder imajı yaradılır. Daha sonra yığımın nəticələri yalnız Nginx əsasında yaradılmış final imajına əlavə olunur.
4.4 Praktiki məsləhətlər
1. Təlimatların sırasını optimallaşdırma
Docker cache-dən effektiv istifadə üçün ilk öncə tez-tez dəyişməyən faylları copy etmək tövsiyə olunur, məsələn package.json, və asılılıqları quraşdırmaq, sonra isə layihənin qalan fayllarını copy etmək.
COPY package*.json ./
RUN npm install
COPY . .
2. .dockerignore
faylından istifadə
.dockerignore
faylı yaradın ki, lazımsız faylları və kataloqları build kontekstindən çıxarasınız. Bu, build kontekstinin ölçüsünü kiçiltməyə və build prosesini sürətləndirməyə kömək edəcək.
.dockerignore
nümunəsi:
node_modules
dist
*.log
3. Multi-stage build
Yalnız zəruri fayl və asılılıqları ehtiva edən yüngül image-lər yaratmaq üçün multi-stage build-dən istifadə edin.
GO TO FULL VERSION