4.1 Podstawy polecenia docker build
Polecenie docker build
— to główny sposób na stworzenie obrazu Docker z Dockerfile. Pobiera instrukcje z Dockerfile i krok po kroku je wykonuje, tworząc obraz ze warstw. W tym wykładzie przeanalizujemy, jak działa polecenie docker build
, jakie ma opcje i jak używać go w praktyce.
Polecenie docker build
buduje obraz z Dockerfile i tak zwanego kontekstu budowania. Kontekst budowania — to pliki, które Docker używa do stworzenia obrazu. Może to być lokalny folder na twoim komputerze albo na przykład repozytorium na GitHub.
Składnia
docker build [OPTIONS] PATH | URL | -
Gdzie:
-
PATH
: ścieżka do katalogu zawierającego Dockerfile i kontekst budowania. URL
: adres URL zdalnego repozytorium.-
: czytanie Dockerfile z wejścia standardowego (stdin).
Przykład podstawowego użycia
W tym przykładzie Docker użyje Dockerfile z bieżącego katalogu (.)
i stworzy obraz o nazwie myimage
z tagiem latest
.
docker build -t myimage:latest .
4.2 Dostosowanie komendy build
Podstawowe parametry komendy docker build
Komenda docker build
obsługuje wiele opcji, które umożliwiają dostosowanie procesu budowania.
1. Parametry -t
, --tag
Parametr -t
lub --tag
jest używany do przypisania nazwy i taga tworzonemu obrazowi.
docker build -t myimage:latest .
2. Parametry -f
, --file
Parametr -f
lub --file
pozwala wskazać alternatywny Dockerfile, jeśli różni się od standardowego Dockerfile.
docker build -f Dockerfile.dev -t myimage:dev .
3. Parametr --build-arg
Parametr --build-arg
jest używany do przekazywania argumentów budowania, określonych za pomocą instrukcji ARG w Dockerfile.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. Parametr --no-cache
Parametr --no-cache
pozwala na wykonanie budowania bez użycia cache. Jest to przydatne, jeśli chcesz upewnić się, że wszystkie komendy zostaną wykonane od nowa.
docker build --no-cache -t myimage:latest .
5. Parametr --target
Parametr --target
jest używany do wskazania etapu docelowego w wieloetapowym budowaniu.
docker build --target builder -t myimage:builder .
6. Parametr --rm
Parametr --rm
wskazuje Dockerowi, aby usunąć pośrednie kontenery po pomyślnym stworzeniu obrazu (domyślnie włączony).
docker build --rm -t myimage:latest .
4.3 Przykłady docker build
Przykład 1: Podstawowe tworzenie obrazu
Załóżmy, że masz prostą aplikację na Node.js i chcesz stworzyć obraz Docker do jej wdrożenia.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Komenda budowania:
docker build -t mynodeapp:latest .
W tym przykładzie Docker stworzy obraz mynodeapp
z tagiem latest
, używając Dockerfile z bieżącego katalogu.
Przykład 2: Budowanie z użyciem argumentów
Argumenty budowania umożliwiają przekazywanie zmiennych do Dockerfile podczas budowania.
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"]
Komenda budowania:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
W tym przykładzie argument APP_VERSION
jest przekazywany do Dockerfile, co umożliwia ustawienie wersji aplikacji podczas budowania.
Przykład 3: Budowanie wieloetapowe
Budowanie wieloetapowe jest używane do tworzenia obrazów, które zawierają tylko niezbędne komponenty. Dzięki temu można zmniejszyć rozmiar finalnego obrazu.
Dockerfile
# Etap budowania
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Budowanie finalnego obrazu z minimalnym zestawem plików
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
Komenda budowania:
docker build -t mywebapp:latest .
W tym przykładzie najpierw tworzony jest obraz pośredni builder, w którym odbywa się budowanie aplikacji. Po zakończeniu budowania aplikacja jest przenoszona do finalnego obrazu, w którym używany jest Nginx do obsługi gotowej zawartości.
4.4 Praktyczne porady
1. Optymalizacja kolejności instrukcji
Aby efektywnie korzystać z cache Docker, ważne jest właściwe uporządkowanie instrukcji. Na przykład, najpierw kopiuj pliki, które rzadko się zmieniają, takie jak package.json
, aby zminimalizować ponowne budowanie zależności. Potem kopiuj pozostałe pliki.
COPY package*.json ./
RUN npm install
COPY . .
2. Używanie .dockerignore
Dodaj plik .dockerignore
, aby wykluczyć niepotrzebne pliki i katalogi z kontekstu budowania. Zmniejszy to rozmiar kontekstu i przyspieszy tworzenie obrazu.
Przykład .dockerignore
:
node_modules
dist
*.log
3. Wieloetapowe budowanie
Stosuj wieloetapowe budowanie, aby tworzyć minimalistyczne i lekkie obrazy. Podejście to pozwala uwzględniać wyłącznie te pliki i zależności, które są naprawdę potrzebne do działania aplikacji, eliminując z finalnego obrazu zbędne dane, takie jak pliki tymczasowe czy kod źródłowy.
GO TO FULL VERSION