Optymalizacja obrazów Docker

Docker średnio zaawansowany

Mike Metzger

Data Engineering Consultant

Czym jest obraz Docker

  • Obrazy Docker stanowią podstawę kontenera
  • Zawierają całą zawartość dostępną początkowo dla instancji kontenera
Docker średnio zaawansowany

Problemy z obrazami Docker

  • Pokusa dodawania wszystkich potrzebnych komponentów do obrazu
  • Rozmiar staje się duży i trudny w zarządzaniu
  • Trudne zarządzanie bezpieczeństwem i aktualizacjami przez zależności
  • Trudniejsze łączenie kontenerów bez marnowania przestrzeni i przepustowości
Docker średnio zaawansowany

Zalecenia dotyczące obrazów Docker

  • Dzielenie kontenerów do możliwie najmniejszych jednostek
  • Łatwiejsze łączenie wielu kontenerów niż budowa jednego dużego obrazu
  • Podobnie jak
    • budowanie z komponentów wielokrotnego użytku
    • vs. budowanie od zera za każdym razem
  • Aktualizacje oprogramowania wpływają tylko na kontenery używające danego obrazu
  • Możliwość optymalizacji rozmiaru, ułatwiająca użytkowanie i dystrybucję
Docker średnio zaawansowany

Przykład podziału obrazu Docker

  • Rozważmy projekt data engineering używający następującego oprogramowania:

    • Baza danych PostgreSQL
    • Oprogramowanie ETL w Pythonie
    • Oprogramowanie serwera WWW
  • Możliwe użycie jednego obrazu, ale wymagałoby aktualizacji przy każdej zmianie ETL lub serwera.

  • Co by się stało, gdybyśmy potrzebowali dodać kolejny serwer WWW?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker średnio zaawansowany

Przykład z minimalnymi kontenerami

  • Lepsze rozwiązania z Docker
  • Podział na osobne kontenery
    • Kontener bazy danych PostgreSQL
    • Komponenty ETL w Pythonie
    • Serwer WWW
  • Możliwość budowy zoptymalizowanej konfiguracji i dodawania / usuwania komponentów
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker średnio zaawansowany

Określanie rozmiaru obrazu

  • Użycie docker images
  • Wyświetla szczegóły obrazów, w tym rozmiar
  • Zaawansowane opcje omówione później

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Docker średnio zaawansowany

Czas na ćwiczenia!

Docker średnio zaawansowany

Preparing Video For Download...