Przewodnik po Dockerfile – tworzenie i optymalizacja kontenerów Docker

Pliki Dockerfile odgrywają kluczową rolę w zarządzaniu kontenerami Docker. To sformatowane pliki tekstowe, które określają instrukcje dotyczące budowy obrazu Docker. Poprawna ich konstrukcja pozwala na szybkie i efektywne uruchamianie aplikacji w kontenerach. W tym artykule przedstawione zostaną podstawowe instrukcje Dockerfile, proces budowy obrazu oraz sposoby optymalizacji pliku w celu poprawy wydajności i zmniejszenia rozmiaru obrazu kontenera.


1. Podstawowe instrukcje Dockerfile

Pliki Dockerfile zawierają instrukcje wykonywane podczas tworzenia obrazu kontenera. Każda linia rozpoczyna się określonym poleceniem, po którym następują argumenty. Oto kilka kluczowych instrukcji:

InstrukcjaOpisPrzykład
FROMOkreśla obraz bazowy kontenera.FROM ubuntu:22.04
WORKDIRUstawia katalog roboczy w kontenerze.WORKDIR /
RUNWykonuje polecenia w trakcie budowania obrazu.RUN apt-get update -y
COPYKopiuje pliki z systemu lokalnego do kontenera.COPY ./app /var/www/html/
EXPOSEInformuje o porcie, na którym nasłuchuje kontener.EXPOSE 80
CMDOkreśla polecenie wykonywane po uruchomieniu kontenera.CMD ["apache2ctl", "-D", "FOREGROUND"]

2. Przykład prostego pliku Dockerfile

Załóżmy, że chcemy stworzyć kontener bazujący na Ubuntu 22.04, ustawić katalog roboczy na root, a także utworzyć plik helloworld.txt.

# Użycie Ubuntu 22.04 jako obrazu bazowego
FROM ubuntu:22.04

# Ustawienie katalogu roboczego na root
WORKDIR /

# Utworzenie pliku helloworld.txt
RUN touch helloworld.txt

3. Budowanie i uruchamianie obrazu Docker

Po przygotowaniu Dockerfile, należy utworzyć obraz za pomocą poniższego polecenia:

docker build -t helloworld .

Jeśli proces przebiegnie pomyślnie, możemy sprawdzić, czy obraz został utworzony:

docker image ls

Następnie możemy uruchomić kontener:

docker run -it helloworld

4. Tworzenie kontenera z serwerem Apache

W kolejnej wersji Dockerfile zostanie dodana instalacja Apache2 oraz konfiguracja portów:

# Użycie Ubuntu 22.04 jako obrazu bazowego
FROM ubuntu:22.04

# Aktualizacja repozytoriów i instalacja Apache2
RUN apt-get update -y && apt-get install apache2 -y

# Udostępnienie portu 80
EXPOSE 80

# Uruchomienie usługi Apache
CMD ["apache2ctl", "-D", "FOREGROUND"]

Budujemy nowy obraz:

docker build -t webserver .

Następnie uruchamiamy kontener i publikujemy port 80:

docker run -d --name webserver -p 80:80 webserver

Teraz możemy otworzyć przeglądarkę i przejść do localhost, aby sprawdzić działanie serwera Apache.


5. Optymalizacja pliku Dockerfile

Aby zmniejszyć rozmiar obrazu i poprawić szybkość budowania, warto stosować następujące techniki:

  • Minimalizacja liczby warstw – polecenia RUN można łączyć w jednej linii:FROM ubuntu:22.04 RUN apt-get update -y && apt-get upgrade -y && apt-get install -y apache2 net-tools
  • Usuwanie niepotrzebnych plików – np. czyszczenie pamięci podręcznej APT po instalacji:RUN apt-get update -y && apt-get install -y apache2 && rm -rf /var/lib/apt/lists/*
  • Użycie minimalnych obrazów bazowych – zamiast Ubuntu, można rozważyć Alpine Linux, który ma tylko ~5 MB:FROM alpine:latest RUN apk add --no-cache apache2

Podsumowanie


Plik Dockerfile jest podstawowym elementem umożliwiającym budowę obrazów i automatyzację wdrożeń w kontenerach Docker. W artykule przedstawiono podstawowe instrukcje, sposób budowania obrazów oraz optymalizację pliku. Optymalizacja Dockerfile pozwala na zmniejszenie rozmiaru obrazów i przyspieszenie procesu ich tworzenia. Stosowanie dobrych praktyk, takich jak minimalizacja liczby warstw czy usuwanie zbędnych plików, znaczną poprawia efektywność i wydajność kontenerów Docker.**

źródło: https://tryhackme.com/room/introtodockerk8pdqk dostęp 15.03.2025