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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 \ |
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.
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.
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:
https: // linuxhint.com/instalacja i użycie-dom-docker-on-ustru/