‫Zanurzmy się w pliku Docker, który jest właściwie receptą na tworzenie obrazu.
‫Do tej pory wszystkie obrazy Dockerów, z których korzystaliśmy, zostały utworzone z Dockerfiles, gdzie można je przejrzeć
‫w Docker Hub.
‫Jeśli sklonowałeś moje repozytorium z zasobów wymienionych w pierwszej sekcji, powinieneś zobaczyć katalog przykładowego pliku dokowanego 1,
‫a tam powinien być tylko jeden plik. Plik Docker.
‫Pójdziemy do linii po linii i porozmawiamy o tych różnych zwrotkach. Plik Dockerfile wygląda jak skrypt powłoki, ale
‫tak nie jest.
‫To nie jest plik wsadowy, to nie jest skrypt powłoki. Jest to zupełnie inny język pliku, który
‫jest unikalny dla Docker, a domyślna nazwa to Dockerfile ze znaczną D.
‫Ale z poziomu wiersza poleceń, za każdym razem, gdy musisz zająć się plikiem Docker za
‫pomocą polecenia docker, możesz w rzeczywistości użyć myślnika f. Co jest często używane w wielu narzędziach w
‫Dockerze, możesz użyć myślnika f, aby określić inny plik niż domyślny.
‫Tak więc najpierw jest polecenie from. Polecenie from znajduje się w każdym pliku Dockerfile. Musi tam być.
‫Zwykle jest to minimalna dystrybucja.
‫W tym przypadku jest to Debian.
‫Ale wiele razy w dzisiejszych czasach będzie to Alpine.
‫I naprawdę, powód, dla którego używałbyś tych słów, oszczędza ci czasu i bólu. Ponieważ te minimalne dystrybucje są w
‫rzeczywistości dużo mniejsze niż dyski CD, których użyjesz do zainstalowania maszyny wirtualnej.
‫Na przykład, Ubuntu nie ma w nim nawet cURL, podczas gdy oczywiście, jeśli zainstalowałeś
‫pełną instalację Ubuntu na VM, miałby już zainstalowany cURL i wiele innych poleceń.
‫Ponieważ wszystkie te dystrybucje są oficjalnymi obrazami, oznacza to, że będą zawsze aktualne z
‫najnowszymi łatami bezpieczeństwa i możesz polegać na nich i na nich ufać.
‫Jedną z głównych zalet korzystania z nich w kontenerach jest używanie ich systemów dystrybucji pakietów
‫do instalowania dowolnego oprogramowania w pakiecie.
‫W tym przypadku używamy wersji Jessie, która jest po dwukropku.
‫I, jak pamiętasz z naszej rozmowy w Docker Hub, istnieje wiele różnych opcji, które możesz
‫określić tutaj dla repozytorium Debiana.
‫Następnie mamy sekcję ENV, a ENV dla zmiennych środowiskowych.
‫Jest to sposób na ustawienie zmiennych środowiskowych, które są bardzo ważne
‫w kontenerach, ponieważ są głównym sposobem ustawiania kluczy i wartości dla budowania kontenerów i uruchamiania kontenerów.
‫W tym przypadku tak naprawdę ustawiamy wersję Nginx, którą chcielibyśmy zainstalować, i ta zmienna środowiskowa zostanie
‫ustawiona tak, aby każda kolejna linia mogła z niej korzystać.
‫Teraz, jako przypomnienie z poprzednich wykładów, każda z tych zwrotek jest rzeczywistą warstwą w naszym obrazie
‫Docker.
‫Tak więc ich kolejność ma znaczenie, ponieważ działa od góry do dołu.
‫Jak zobaczysz w tym stosunkowo długim poleceniu tutaj dla następnego. Zobaczysz, że wygląda na jedno
‫długie polecenie.
‫To, co robi, to po prostu wykonywanie komend powłoki wewnątrz tego kontenera podczas jego budowania.
‫Zazwyczaj polecenia uruchamiane są, gdy trzeba zainstalować oprogramowanie z repozytorium pakietów lub
‫trzeba dokonać rozpakowania lub edycji plików wewnątrz samego kontenera.
‫Polecenia uruchamiania mogą również uruchamiać skrypty powłoki skopiowane wcześniej w pliku lub dowolne komendy, do których można
‫uzyskać dostęp z poziomu
‫kontenera w tym momencie w pliku.
‫Ponieważ pochodzimy z Debiana, ta komenda run ma dostęp do wszystkich poleceń i plików binarnych, które
‫zostałyby zainstalowane w tym wydaniu.
‫A w tym dla Nginx ta lista poleceń jest mniej więcej dodawaniem klucza do repozytorium, w
‫którym można pobrać pakiet do zainstalowania najnowszego Nginx z oficjalnego repozytorium Nginx.
‫Jest kilka rzeczy, które naprawdę są kluczowe w tworzeniu dobrych plików Docker, a my porozmawiamy o
‫tym więcej w późniejszej części, gdzie mówimy o najlepszych praktykach.
‫Ale dwie rzeczy do zapamiętania.
‫Powodem, dla którego dodajemy wszystkie te polecenia z podwójnymi znakami ampersand tutaj, tak że są one
‫powiązane jeden po drugim, jest to, że jeśli pamiętasz, każda zwrotka jest własną warstwą.
‫To, co robi, zapewnia, że wszystkie te polecenia są dopasowane do jednej warstwy.
‫Oszczędza nam to trochę czasu.
‫Oszczędza nam to miejsca. Jest tak powszechny, że prawdopodobnie zobaczysz go w każdym pliku Dockerfirmy w Docker Hub.
‫Okay, w linii 27 mamy kolejną komendę.
‫To wszystko polega na wskazaniu naszych plików dziennika na standardowe wyjście
‫i na stderr.
‫Zobaczymy później, że właściwym sposobem rejestrowania w kontenerze jest nielogowanie się do pliku dziennika. I nie ma syslogd ani
‫żadnej innej usługi syslog
‫wewnątrz kontenera. Docker faktycznie obsługuje wszystkie nasze rejestracje. Wszystko, co musimy zrobić
‫w kontenerze, to upewnić się, że wszystko, co chcemy przechwycić w dziennikach, to pluć na stdout
‫i stderr, a docker zajmie się resztą.
‫Właściwie rejestrujemy sterowniki, których możemy użyć w samym silniku Docker do kontrolowania wszystkich dzienników dla
‫wszystkich kontenerów na naszym hoście.
‫I tak naprawdę chcesz z nimi zrobić.
‫Dodaje to więcej komplikacji do twojej aplikacji, jeśli twoja aplikacja robi to samo.
‫A potem, jeśli masz do czynienia z plikami w każdym kontenerze, teraz masz problem, w jaki sposób
‫możesz uzyskać te pliki i można je wyszukiwać i są dostępne. Tutaj bierzemy domyślne dzienniki Nginx i faktycznie
‫łączymy je ze stdout.
‫Aby Docker mógł je przechwycić.
‫Mamy również polecenie expose.
‫Domyślnie w porcie nie są otwarte żadne
‫porty TCP ani UDP. Nie ujawnia niczego z kontenera do sieci wirtualnej, chyba że ją
‫tutaj podamy.
‫I, oczywiście, ponieważ jest to serwer sieciowy i proxy, ujawni 80 i 443.
‫Teraz to polecenie expose nie oznacza, że te porty zostaną automatycznie otwarte na naszym hoście.
‫To jest polecenie Dash P, gdy używamy programu dokowania.
‫Wreszcie mamy tu CMD. CMD jest wymaganym parametrem, który jest ostatnim poleceniem,
‫które będzie uruchamiane za każdym razem, gdy uruchamiasz nowy kontener z obrazu lub za każdym razem, gdy restartujesz zatrzymany kontener.
‫Jest naprawdę świetna dokumentacja dotycząca wszystkich tych zwrotek, a także o wiele więcej, które omówimy później, na stronie
‫dokumentacji Docker na dokumentach. doker. com,
‫które można znaleźć w zasobach tego wykładu.
‫Okej, więc to są podstawy, prawda? Te pięć różnych zwrotek jest całkiem normalnych w każdym pliku Dockerfile.
‫Niektóre z nich są wymagane.
‫Niektóre z nich, takie jak bieg, ENV i expose, są opcjonalne, ale są dość typowe dla większości kontenerów,
‫do których masz zamiar tworzyć obrazy.