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:
| Instrukcja | Opis | Przykład |
|---|---|---|
| FROM | Określa obraz bazowy kontenera. | FROM ubuntu:22.04 |
| WORKDIR | Ustawia katalog roboczy w kontenerze. | WORKDIR / |
| RUN | Wykonuje polecenia w trakcie budowania obrazu. | RUN apt-get update -y |
| COPY | Kopiuje pliki z systemu lokalnego do kontenera. | COPY ./app /var/www/html/ |
| EXPOSE | Informuje o porcie, na którym nasłuchuje kontener. | EXPOSE 80 |
| CMD | Okreś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
RUNmoż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

