Optymalizacja obrazów Docker

Optymalizacja obrazów Docker

Deweloperzy lubią współpracować z Dockerem ze względu na jego elastyczność i łatwość użycia. Podczas tworzenia aplikacji warto zainwestować dodatkowy czas optymaliza. Optymalizacja pomoże zespołom dzielić się mniejszymi obrazami, poprawić wydajność i ułatwia debugowanie problemów. Poniżej znajdują się zalecenia dotyczące tworzenia lepszych zdjęć i plików dokerowych.

Optymalizacja obrazów Docker

Duże obrazy dokera mogą utrudnić udostępnienie. Również duże obrazy spowalniają wykonanie. Zatem optymalizacja obrazów może pomóc w ogólnym procesie rozwoju i produkcji.

Wybierz odpowiednie obrazy podstawowe

Obrazy dostępne w Docker Hub są już zoptymalizowane. Zamiast budować własne, warto korzystać z dostępnych zoptymalizowanych zdjęć. Na przykład, jeśli potrzebujesz obrazu Redis, masz opcję zbudowania go na obrazie Ubuntu lub bezpośrednio pobranie Redis One. Korzystanie z już zbudowanego obrazu Redis jest lepszą opcją, ponieważ programiści zajęli już wszelkie zbędne pakiety.

Użyj wieloetapowych kompilacji

Nowa wieloetapowa opcja w Docker (od wersji 17.05) może pomóc w stworzeniu sprytnych sposobów optymalizacji obrazów. Możesz zbudować aplikację, a następnie przenieść ją do nowego czystego środowiska w celu wdrożenia. Zapewni to, że tylko niezbędne biblioteki i zależności czasu wykonawczego są częścią ostatecznego obrazu.

Zmniejsz liczbę warstw

Budując obraz, zwróć uwagę na warstwy stworzone przez Dockerfiles. Każde polecenie run tworzy nową warstwę. Zatem połączenie warstw może zmniejszyć rozmiar obrazu. Prostym przykładem jest apt-get. Zasadniczo użytkownicy uruchamiają polecenie w ten sposób:

Uruchom aktualizację apt -get -y
Uruchom apt -get install -y Python

Stworzy dwie warstwy. Ale połączenie poleceń utworzy jedną warstwę na ostatecznym obrazie:

Uruchom apt -get -y aktualiza

Tak więc inteligentne kombinacje poleceń mogą prowadzić do mniejszych obrazów.

Zbuduj niestandardowe obrazy podstawowe

Docker buforuje obrazy. Jeśli potrzebujesz wielu instancji tych samych warstw, dobrze jest spojrzeć na optymalizację warstw i tworzenie niestandardowego obrazu podstawowego. Przyspieszy czas ładowania i ułatwi śledzenie.

Wbuduj obrazy produkcyjne

Obrazy testowe wymagają więcej narzędzi i bibliotek do testowania funkcji. Warto użyć obrazu produkcyjnego jako bazy i tworzenie na nim obrazów testowych. Niepotrzebne pliki testowe będą poza bazą. Tak więc obrazy produkcyjne pozostaną małe i czyste do wdrożenia.

Unikaj przechowywania danych aplikacji

Przechowywanie danych aplikacji w kontenerze rozlegnie twoje obrazy. W środowiskach produkcyjnych zawsze używaj funkcji woluminu, aby pojemnik oddzielić od danych.

Najlepsze praktyki pisania plików dokerowych

DockerFiles umożliwia programistom kodyfikację procesów. Jest to świetne narzędzie do poprawy procesu budowania obrazu Docker. Oto kilka praktyk, które pomogą Ci poprawić Twój rozwój.

Projektowe efemeryczne pojemniki

Staraj się zaprojektować pojemniki, które są łatwe do stworzenia i niszczenia. Jeśli pojemniki są zbyt zależne od środowisk peryferyjnych i konfiguracji, są one trudniejsze do utrzymania. Tak więc projektowanie bezstanowych kontenerów może pomóc w uproszczeniu systemu.

Używać .Dockerignore w celu optymalizacji obrazów

Jeśli masz skomplikowaną kompilację, która przechodzi przez wiele katalogów, wszystkie pliki i katalogi są wysyłane do Docker Daemon. Może to spowodować większe obrazy i wolniejsze czasy budowy. Możesz użyć .Dockerignore, aby wykluczyć niepotrzebne pliki i foldery, które komplikują proces kompilacji.

Użyj wieloetapowych kompilacji

Wielostopniowe kompilacje to nowa funkcja Docker od wersji 17.05. Umożliwia programistom budowanie wielu obrazów w tym samym pliku dokera i przenoszenie artefaktów z jednego pojemnika do drugiego w samym pliku dokerowym. Dzięki czemu możesz mieć mniejsze i zoptymalizowane artefakty na końcowym obrazie bez użycia skomplikowanych scenariuszy, aby osiągnąć te same wyniki.

Zainstaluj tylko wymagane pakiety

DockerFile powinien zainstalować tylko absolutne pakiety niezbędne do uruchomienia Usług. Każdy pakiet wymaga miejsca na obrazie. Tak więc niektóre aplikacje, takie jak ping lub edytor tekstu, mogą być niepotrzebne w kontekście usługi, która będzie działać na kontenerze. Zrozumienie wymagań konkretnej usługi może pomóc Ci napisać lepsze pliki dokerowe, które mogą tworzyć zoptymalizowane obrazy.

Pomyśl o mikrousługach

Pomocne może być projektowanie plików dokerowych z architekturą mikrousług. Wdrożenie jednego procesu na kontener nie zawsze jest możliwe. Ale programiści mogą pomyśleć, jak bardziej proaktywnie rozpowszechniać swoje procesy i podejmować decyzje, które pomogą wdrażać usługi w sposób oddzielony. Pojemniki są naturalne do modułowego projektowania. Więc twoje pliki dokerowe powinny skorzystać z możliwości, jakie daje Docker.

Rozważ wpływ instrukcji na warstwy

Uruchom, kopiuj i dodaj w DockerFiles Utwórz nowe warstwy od wersji 1.10. Inne instrukcje nie wpływają bezpośrednio na rozmiar końcowych obrazów. Powinieneś więc być czujnym, gdy używają tych poleceń. Ponadto połączenie wielu poleceń może zmniejszyć liczbę warstw. Mniej warstw oznacza mniejsze rozmiary.

Sortuj argumenty wieloletnie

Ilekroć masz argument wieloletni, sortuj argumenty alfanumerycznie, aby poprawić konserwację kodu. Pobrane argumenty mogą prowadzić do powielania. Są również trudniejsze do aktualizacji. Dobry przykład:

Uruchom aktualizację apt-get && apt-get install -y \
Apache2 \
git \
iputils-ping \
Python \

Unikaj używania: najnowszego

Jeśli używasz z [ImageName]: najnowszy, możesz napotykać problemy, gdy wizerunek się zmienia. Śledzenie może być trudnym problemem. Korzystanie z określonych tagów może zapewnić, że znasz dokładny obraz używany z rejestru Docker.

Dodaj tylko wymagane pliki z katalogu

Polecenia DockerFile są wykonywane kolejno w celu tworzenia obrazów i buduje tylko warstwy, które jeszcze nie są obecne. Załóżmy, że masz pakiet.JSON dla NPM i wymagań.TXT dla PIP. Możesz napisać następujący PAKIET DOCKERFILE.JSON i wymagania.TXT są w folderze MyCode:

KOPIUJ ./myCode//home/program/
Uruchom instalację NPM
Uruchom wymagania instalacyjne PIP -R

Jednak za każdym razem, gdy nastąpi zmiana w dowolnym pliku w MyCode, obie polecenia uruchamiane muszą zostać odbudowane. Zamiast tego, jeśli kod jest napisany w następujący sposób:

KOPIUJ ./MyCode/Pakiet.JSON/HOME/Program/Pakiet.JSON
Workdir /Home /Program
Uruchom instalację NPM
KOPIUJ ./MyCode/Wymagania.TXT/Strona główna/program/wymagania.tekst
Workdir /Home /Program
Uruchom wymagania instalacyjne PIP -R

Następnie polecenia uruchamiania będą od siebie niezależne, a zmiana w jednym pliku w folderze MyCode nie wpłynie zarówno na polecenia NPM, jak i. Patrzenie na takie zależności może pomóc Ci napisać lepsze pliki dokerowe.

Dalsze badanie

Powyższe techniki i najlepsze praktyki powinny pomóc w tworzeniu mniejszych obrazów Docker i pisania lepszych plików dokerowych. Oto linki, które pomogą Ci znaleźć więcej informacji na różne tematy:

  • Docker Development Best Practices
  • Wielostopniowe kompilacje Docker
  • Odniesienie do pliku Docker

Bibliografia:

  • https: // dokumenty.doker.com/rozwinąć/best-best-praktyki/
  • https: // dokumenty.doker.com/silnik/userguide/eng-image/dockerFile_Best-Practices/
  • https: // dokumenty.doker.com/silnik/userguide/eng-image/baseimages/
  • https: // dokumenty.doker.com/silnik/userguide/eng-image/multistage-build/
  • https: // blog.Codeship.COM/RUIND-DOCKER-IMAGE-SIZE/
  • https: // hackernoon.COM/TIPS-to-Reduce-Docker-Image-wielkości-876095da3b34
  • https: // dokumenty.doker.com/silnik/referencyjny/budowniczy/#plik Dockerignore
  • https: // runnable.com/blog/9-common-dockerfile-mistake

https: // linuxhint.com/instalacja i użycie-dom-docker-on-ustru/