CodeGym /Kursy /Docker SELF /Budowanie obrazu

Budowanie obrazu

Docker SELF
Poziom 13 , Lekcja 3
Dostępny

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

docker build --no-cache -t myimage:latest .

5. Parametr --target

Parametr --target jest używany do wskazania etapu docelowego w wieloetapowym budowaniu.

Terminal

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).

Terminal

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:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Komenda budowania:

Terminal

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

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:

Terminal

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

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:

Terminal


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.

dockerfile

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:

Text

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.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION