‫Ten wykład będzie polegał na dodawaniu do twoich kompozycji plików budujących obraz, tak
‫aby automatycznie zapewniał ci gotowy obraz,
‫gdy uruchamiasz polecenia tworzenia. Podobnie jak inni wykładowcy w
‫tej sekcji, naprawdę musisz mieć dobre wyczucie kontenera Docker i funkcjonalności wiersza poleceń Docker.
‫Inną rzeczą, którą Compose może dla ciebie zrobić, jest budowanie obrazów w czasie wykonywania. W rzeczywistości będzie wyglądać w pamięci podręcznej
‫obrazów, a jeśli ma w nim opcje kompilacji, zbuduje ten obraz, gdy użyjesz polecenia up.
‫Nie będzie budować obrazu za każdym razem.
‫Zbuduje to tylko, jeśli go nie znajdzie.
‫Będziesz musiał użyć kompilacji budowania docker, aby odbudować obrazy, jeśli je
‫zmienisz, lub możesz użyć docker compose up --build.
‫Za chwilę to zobaczymy.
‫To jest naprawdę świetne, gdy używasz Kompiluj lokalnie i masz obrazy, które chcesz zbudować. Być może nie chcesz użyć
‫mocowania głośności. W rzeczywistości chcesz skopiować pliki lub coś w obrazie.
‫Twoje polecenie kompilacji może być dość złożone. Może zawierać niestandardowe zmienne środowiskowe lub
‫argumenty kompilacji.
‫Przy okazji, budujcie argumenty, o których nie rozmawialiśmy. To są naprawdę tylko zmienne środowiskowe, które
‫są dostępne tylko podczas kompilacji. Możesz spojrzeć na dokumenty. doker. com dokumentacji na
‫Dockerfiles i będzie mówić o szczegółach budowy argumentów.
‫Tutaj przyjrzymy się przykładowi, w jaki sposób możesz użyć tego lokalnie.
‫Jestem w katalogu próbnym 3. Możesz zobaczyć tutaj Mam gotowy plik Docker Compose
‫tutaj.
‫Mam faktycznie plik Dockerfile o nazwie nginx. Dockerfile. Następnie podobna konfiguracja nginx do
‫tego, co mieliśmy wcześniej, gdzie faktycznie używamy Nginx jako odwrotnego proxy dla naszej strony.
‫Jeśli przejdziemy do kompozycji Docker, zobaczymy, jak zaprojektowałem to rozwiązanie.
‫Mam dwie usługi.
‫Jednym z nich jest serwer proxy Nginx, jak poprzednio, a drugi to serwer WWW Apache, jak wcześniej.
‫Ale kilka rzeczy jest różnych.
‫Zamiast mnie określając domyślny obraz dla Nginx, faktycznie buduję niestandardowy.
‫Widać tutaj, że podałem kilka argumentów, w których mówię, że plik Docker,
‫którego potrzebuje, to specjalnie nazwany plik Docker.
‫Chcę, aby skompilował ten plik Dockerfile w bieżącym katalogu, w którym się znajduje. Chcę, aby nazwa tego obrazu,
‫gdy go buduje,
‫nginx -custom. Przechowywuje to w mojej lokalnej pamięci podręcznej. Na dole mamy serwer WWW
‫z uruchomionym Apache.
‫To, co tutaj zrobiłem, to zamontowałem niektóre pliki źródłowe HTML, które mam na serwerze Apache.
‫Więc scenariusz tutaj jest być może jestem programistą
‫stron internetowych, mam tu statyczną stronę,
‫pod tym katalogiem HTML, której naprawdę nie muszę się martwić.
‫Używa tylko małego szablonu bootstrap.
‫Będę redagował to lokalnie, w moim edytorze tutaj, ale wiem, że kiedy pójdę do produkcji z
‫tym, to faktycznie będzie siedział za proxy Nginx.
‫Tak więc chcę emulować to środowisko produkcyjne tak bardzo, jak to tylko możliwe, lokalnie, aby upewnić się, że usunąłem
‫jakiekolwiek błędy lub jakiekolwiek problemy. W tym przypadku chcę
‫tego Nginxa i wiem, że ta konfiguracja Nginx jest tą, której zamierzają
‫użyć na serwerze produkcyjnym, więc zamierzam go tutaj użyć.
‫Jest to właściwie ta sama konfiguracja Nginx, jak poprzednio.
‫Kiedy uruchomię polecenie tworzenia doków w oknie dokowania, najpierw sprawdzimy nazwę tego
‫obrazu w mojej pamięci podręcznej. Jeśli go nie znajdzie, użyje tutaj tych poleceń budowania, aby wyszukać
‫plik Docker, a następnie skompilować mój obraz. Możesz zobaczyć z tego Dockerfile, to całkiem proste.
‫Po prostu użyje konkretnej wersji Nginx, a potem po prostu skopiuje plik.
‫Otrzyma resztę informacji z tej konfiguracji Nginx z Docker Hub, a następnie
‫skopiuje w mojej konfiguracji Nginx.
‫Jeśli pamiętasz w poprzednim przykładzie, faktycznie zrobiliśmy bind mount, aby uzyskać tę konfigurację Nginx poprzez
‫nasz plik compose.
‫W tym przypadku chcemy tylko, aby zbudował cały obraz.
‫Tak naprawdę nie musimy zmieniać tej konfiguracji proxy, więc tak naprawdę nie muszę jej montować, aby móc ją
‫zmieniać przez cały czas.
‫Po prostu chcę, żeby biec. Dobrze? Więc zamierzam to zbudować. Pozwól mu siedzieć w pamięci podręcznej obrazów. Po zbudowaniu go
‫po raz pierwszy nie będzie trzeba go bardzo często przebudowywać.
‫Więc po prostu tam wyjdę.
‫Kiedy będę edytować i tworzyć na mojej stronie, będę mieć tę konfigurację, dzięki
‫czemu będę mógł edytować na żywo. Jeśli wrócimy tutaj i zrobię komponowanie dockera,
‫przejrzyjmy co się stało.
‫Najpierw stworzył sieć.
‫To normalne. To robi.
‫Wtedy faktycznie widać, że usługa proxy nie ma obrazu, którego szuka. Więc to zbuduje.
‫Więc wyciąga Dockerfile i buduje go tak, jakby zrobił normalne polecenie budowania dockera.
‫Potem daje mi tę pomocną wskazówkę, aby dać mi znać, że tym razem zbudował ten obraz, ponieważ nie mógł
‫go znaleźć.
‫Ale w przyszłości, jeśli będę musiał zmienić ten obraz, będę musiał użyć kompilacji budowania dockera
‫lub skompilować polecenia do budowania dockera. Teraz, gdy ma
‫obraz, może faktycznie tworzyć pojemniki. Następnie uruchamia mój serwer internetowy i mój serwer proxy.
‫Jeśli wszystko działałoby poprawnie, powinienem móc uzyskać localhost. Podciągnął tutaj mój domyślny szablon, który faktycznie
‫jest szablonem ładowania początkowego.
‫Wygląda na to, że wszystko działa.
‫Właściwie to chodzę tutaj i widzę, że wszystkie moje dzienniki idą w górę i oczywiście jest dużo aktywów. Dla każdego jest wpis w
‫dzienniku, który przejdzie przez serwer proxy i serwer internetowy.
‫Ponieważ oprawiłem ten katalog do edycji, mogę wrócić do edytora. Jako web developer mogłem wejść i być
‫może, wiesz, edytować coś na stronie. Może przejdę do tytułu
‫początkowego bootstrapu, który powinien być tym małym tytułem na górze tutaj.
‫Po prostu zapiszę ten plik. Następnie, jeśli odświeżam, moja witryna jest aktualizowana z powodu tego, że ponownie zamontowałem bind.
‫Jest to świetny przykład bardzo typowej konfiguracji programisty, w której musisz zbudować niestandardowe
‫obrazy lokalnie.
‫Musisz również zamontować kilka plików w swojej aplikacji, aby móc je edytować w środowisku wykonawczym.
‫I, oczywiście, gdyby to musiało być aplikacją opartą na bazach danych, dodałbym tutaj
‫trzecią usługę dla serwera bazy danych. Potem wrócę i zrobię porządek.
‫Zauważysz, że domyślnie nie usunie tego obrazu.
‫Na górze zauważysz, że mamy wbudowany niestandardowy nginx. Ale istnieje polecenie dokowania, które składa się
‫w dół.
‫Jeśli spojrzysz na pomoc, zobaczysz, że istnieje opcja rmi, która faktycznie usuwa obrazy, które
‫mogła zbudować lub używa.
‫Tutaj jest ta rzeczywista opcja, "usuń tylko obrazy, które nie mają niestandardowego znacznika ustawionego przez pole
‫obrazu. "Jedną
‫rzecz, którą mógłbym zrobić, gdybym chciał uczynić to nieco bardziej zautomatyzowanym, to mógłbym po prostu
‫wziąć to polecenie obrazu. Po prostu to usuńmy. Potem chcę posprzątać naprawdę szybko. Po
‫prostu usunę mój obraz. Obraz okna dokowanego rm niestandardowy. Jak widać, już tam nie ma.
‫W porządku. Chcę, aby docker ponownie skomponował.
‫I tym razem zrobimy a -d.
‫Zauważa się w tych przykładach tworzenia, że faktycznie nazwy kontenerów, wolumenów i sieci
‫z nazwą katalogu jako nazwa projektu.
‫To jest właściwie coś w Compose, gdzie, aby zapobiec
‫konfliktom nazw, zawsze doda nazwę katalogu na początku wszystkich zasobów, aby nie kolidowały one
‫z innymi.
‫Możesz zmienić nazwę proxy za pomocą wiersza poleceń.
‫Jeśli przejdziesz do dokumentacji Compose.
‫Ale chciałem tutaj zrobić, jeśli zrobię tutaj obraz dokera, zobaczysz, że faktycznie nazwał mój obraz
‫dla mnie.
‫Więc technicznie nie muszę używać tej opcji obrazu.
‫Ale gdybym chciała nadać mu konkretną nazwę, abym mógł go później zidentyfikować, mógłbym.
‫Powodem, dla którego to przedstawiłem, jest to, że jest to trochę czystsze, ponieważ
‫mogę wtedy włączyć dokowanie i pamiętać o pomocy, powiedział, że mogę użyć typu rmi. Więc kiedy to posprzątam, a ja lubię
‫dbać o czystość środowiska Docker, mogę to zrobić lokalnie.
‫To, co zrobi, to także usunięcie tych obrazów.
‫Zobaczysz tu na dole, że usunął obraz.
‫Nie coś, co robię przez cały czas, ale może jeśli mam duży projekt z dużą ilością niestandardowych
‫obrazów i nie chcę, żeby wysadził mój system, gdy nie rozwijam się w tym projekcie,
‫użyję rmi lokalnego , i zawsze będzie śledzić niestandardowe obrazy, które musiał utworzyć.
‫Oczywiście, jeśli użyję tego wszystkiego, to faktycznie usunie każdy obraz użyty w tym projekcie, którego
‫możesz nie chcieć, ponieważ w tym przypadku może on usunąć serwer httpd Apache i możesz chcieć tego
‫obrazu do zostać na chwilę. DOBRZE.
‫W tej sekcji dowiedziałeś się dużo o Compose.
‫Będziemy używać Compose przez resztę tego kursu.
‫Będziemy nadal rozwijać te umiejętności.