CodeGym /Kursy /Docker SELF /Podstawowe instrukcje Dockerfile

Podstawowe instrukcje Dockerfile

Docker SELF
Poziom 13 , Lekcja 2
Dostępny

3.1 Instrukcja FROM

Tak więc, przypomnę, że Dockerfile to plik tekstowy, który zawiera instrukcje do tworzenia obrazu Docker. Każda instrukcja w Dockerfile wykonuje określone zadanie i tworzy nową warstwę w obrazie. W tym wykładzie bardziej szczegółowo omówimy podstawowe instrukcje Dockerfile: FROM, RUN, COPY oraz CMD, które są kluczowe dla tworzenia funkcjonalnych i efektywnych obrazów Docker.

Instrukcja FROM określa podstawowy obraz, z którego zostanie utworzony nowy obraz. To pierwsza instrukcja w każdym Dockerfile i definiuje punkt początkowy dla budowy obrazu.

Składnia


FROM <image>[:<tag>] [AS <name>]

Gdzie:

  • <image>: nazwa podstawowego obrazu.
  • <tag>: (opcjonalnie) wersja podstawowego obrazu. Domyślnie używany jest latest.
  • AS <name>: (opcjonalnie) przypisanie nazwy dla tego etapu budowy (używane w wieloetapowej budowie).

Przykłady

Użycie podstawowego obrazu Ubuntu:

dockerfile


FROM ubuntu:20.04

Użycie oficjalnego obrazu Node.js:

dockerfile


FROM node:14

Użycie wieloetapowej budowy do optymalizacji:

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

W tym przykładzie używane są dwa podstawowe obrazy. Pierwszy (node:14) jest używany do budowy aplikacji, a drugi (nginx:alpine) — do stworzenia lekkiego serwera, który będzie obsługiwał pliki statyczne.

Dzięki wykorzystaniu wieloetapowej budowy, końcowy obraz zawiera tylko minimalny zestaw plików i programów (w tym przypadku Nginx i zbudowane pliki statyczne), co czyni go bardziej lekkim i szybszym do wdrożenia.

3.2 Instrukcja RUN

Instrukcja RUN wykonuje polecenia wewnątrz kontenera i tworzy nową warstwę w obrazie. Ta instrukcja jest używana do instalacji pakietów, konfiguracji środowiska i wykonywania innych poleceń, niezbędnych do przygotowania obrazu.

Składnia:


RUN <command>

Gdzie:

  • <command>: polecenie, które będzie wykonane wewnątrz kontenera.

Przykłady:

Instalacja pakietów w obrazie Ubuntu:

dockerfile


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

Kompilacja kodu:

dockerfile


RUN gcc -o myapp myapp.c

Łączenie kilku poleceń

Aby zmniejszyć ilość warstw, rozmiar image i przyspieszyć proces budowy, zaleca się łączyć kilka poleceń w jednej instrukcji RUN.

dockerfile


RUN apt-get update \
    && apt-get install -y curl git \
    && rm -rf /var/lib/apt/lists/*

3.3 Instrukcja COPY

Instrukcja COPY kopiuje pliki i katalogi z kontekstu budowy do systemu plików kontenera. To jest przydatne do przenoszenia kodu źródłowego, plików konfiguracyjnych i innych zasobów do kontenera.

Składnia:


COPY <src> <dest>

Gdzie:

  • <src>: ścieżka do plików lub katalogów w kontekście budowy.
  • <dest>: ścieżka docelowa w kontenerze.

Przykłady:

Kopiowanie całej zawartości bieżącego katalogu do katalogu roboczego kontenera:

dockerfile


COPY . /app

Kopiowanie pojedynczych plików:

dockerfile


COPY package.json /app/package.json
COPY server.js /app/server.js

Użycie .dockerignore

Aby wykluczyć niepotrzebne pliki z procesu kopiowania, można użyć pliku .dockerignore, który działa analogicznie do .gitignore.

Text


node_modules
dist
*.log

3.4 Instrukcja CMD

Instrukcja CMD określa polecenie, które będzie wykonane przy uruchomieniu kontenera. W przeciwieństwie do RUN, która wykonuje się na etapie budowania, CMD uruchamia się przy starcie kontenera z gotowego obrazu.

Składnia:


CMD ["executable","param1","param2"]

Lub


CMD command param1 param2

Gdzie:

  • ["executable","param1","param2"]: forma exec, która jest lepsza dla zapewnienia poprawnej obsługi sygnałów.
  • command param1 param2: forma shell, która wykonuje polecenie w powłoce.

Przykłady:

Uruchomienie aplikacji Node.js:

dockerfile


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

Uruchomienie skryptu shell:

dockerfile


CMD /usr/bin/myscript.sh

Różnice między CMD a ENTRYPOINT

CMD określa domyślne polecenie, które można nadpisać podczas uruchamiania kontenera. ENTRYPOINT określa niezmienialne polecenie, które zawsze będzie wykonane przy starcie kontenera.

Przykład użycia ENTRYPOINT:

dockerfile


ENTRYPOINT ["python", "script.py"]
CMD ["arg1"]

W tym przykładzie ENTRYPOINT uruchamia skrypt Python, a CMD przekazuje argumenty, które można zmienić przy starcie kontenera.

Przykładowy Dockerfile z podstawowymi instrukcjami

dockerfile

        
# Używamy bazowego obrazu Node.js
FROM node:14
        
# Ustawiamy katalog roboczy
WORKDIR /app
        
# Kopiujemy pliki package.json i package-lock.json
COPY package*.json ./
        
# Instalujemy zależności
RUN npm install
        
# Kopiujemy kod źródłowy aplikacji
COPY . .
        
# Określamy port, który będzie używany przez aplikację
EXPOSE 3000
        
# Definiujemy polecenie uruchamiające aplikację
CMD ["node", "app.js"]
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION