‫W tym wykładzie porozmawiamy o montowaniu bindów i trwałych danych w tych mountach. Wymagania są tak naprawdę, że wiesz
‫tylko o zarządzaniu pojemnikami i jak uruchamiać pojemniki.
‫Wskakujmy. Porozmawiajmy o mocowaniu bindów. W rzeczywistości są całkiem fajne.
‫Kiedy po raz pierwszy się o nich dowiedziałem, dał mi aha, jak mogę łatwo użyć Dockera do
‫lokalnego rozwoju.
‫Naprawdę, mocowanie bind jest po prostu mapowaniem plików hosta lub katalogów do pliku lub katalogu
‫kontenera. Możesz to zrobić.
‫Możesz podać katalog lub pojedynczy plik. W tle jest to
‫po prostu, że dwie lokalizacje wskazują te same fizyczne lokalizacje na dysku.
‫Ponownie, to faktycznie pomija UFS, podobnie jak inne woluminy, tak aby nie zniszczyć
‫lokalizacji hosta po usunięciu kontenera.
‫Jeśli w kontenerze znajdują się pliki, które mapujesz pliki hosta, wygrywają pliki hosta. W rzeczywistości nie usuwa plików w
‫kontenerze, które zostały nadpisane, ponieważ nie nadpisuje niczego w
‫kontenerze.
‫Jest tam, gdy istnieje moc wiązania.
‫Z chwilą, gdy nie potrzebujesz już montowania wiązania i ponownie uruchomisz kontener bez
‫niego, zobaczysz podstawowe dane, które były tam wcześniej. Ponieważ mocowanie bindów jest zwykle specyficzne dla hosta,
‫muszą one posiadać określone dane na dysku twardym hosta, aby mogło działać.
‫Nie można ich określić w pliku Dockerfile.
‫Trzeba ich używać w środowisku wykonawczym, gdy używana jest komenda uruchomienia kontenera dokowanego. Możesz zobaczyć format tutaj.
‫To jest naprawdę-v, którego używaliśmy wcześniej, tylko po lewej stronie dwukropka,
‫w rzeczywistości wprowadzamy pełną ścieżkę, a nie tylko nazwę.
‫Sposób, w jaki Docker rzeczywiście odróżnia podaną objętość, tak jak zrobiliśmy to
‫chwilę temu, i mocowanie bindów, to mocowanie bind zaczyna się od przedniego ukośnika.
‫W systemie Windows zauważysz, że są to dwa ukośniki, a następnie litera dysku, a następnie
‫ścieżka.
‫Tak długo, jak masz lewy dwukropek i prawą stronę, możesz naprawdę mapować wszystko, co chcesz od hosta
‫do kontenera, a także możesz określać takie rzeczy jak tylko do odczytu.
‫Tam, gdzie to naprawdę ożywa, jest rozwijanie i uruchamianie usług wewnątrz kontenera, które
‫uzyskują dostęp do plików używanych przez hosta lub zmieniających się.
‫Zróbmy to za pomocą Nginx.
‫Jeśli przejdziesz do katalogu głównego naszego repozytorium dla tego kursu, a następnie przejdziemy do katalogu 2
‫przykładowego Dockerfile. Teraz byliśmy tu wcześniej.
‫Jeśli pamiętasz, są dwa pliki. To jest dla Nginx, prawda?
‫Jeśli spojrzymy na plik Dockerfile naprawdę szybko, to całkiem proste. To tylko określenie katalogu roboczego, a następnie skopiowanie
‫pliku indeksu do tego katalogu.
‫Tu nie ma woluminów.
‫Mocowanie bind nie wymaga woluminu do działania, chociaż można na pewno tam być.
‫Host zawsze wygrywa, pamiętasz? Tak więc, gdy uruchamiamy kontener dokera, wykonujemy
‫a -d ... nazwijmy to nginx.
‫Dajmy mu port 8080 jak wcześniej.
‫A tym razem damy jej wolumen. I muszę powiedzieć, że mój bieżący katalog roboczy zostanie
‫faktycznie zamontowany w tym katalogu roboczym w kontenerze. Ponieważ mój plik indeksu znajduje się tutaj w
‫tym folderze, chcę
‫go umieścić w kontenerze, aby móc go edytować tutaj i jest widoczny na żywo w kontenerze.
‫Więc to ma sens w ciągu sekundy.
‫Oto krótka wskazówka. Zamiast wymyślać całą
‫moją ścieżkę i wpisywać całość, możesz użyć tutaj pwd.
‫Skrót powłoki, który mówi: "wypisz katalog roboczy i zastąp to polecenie tą ścieżką.
‫"Następnie użyjemy tego samego katalogu roboczego z pliku Docker, a następnie określimy
‫obraz Nginx.
‫Co mam zamiar zrobić naprawdę szybko, to zamierzam otworzyć kolejne okno terminala, abyśmy mogli
‫zrobić dwie rzeczy naraz.
‫Naprawdę nie musisz tego robić.
‫Zasadniczo, zamierzamy tylko edytować plik na naszym hoście, a potem znajdę się w kontenerze i zobaczę, co
‫się dzieje.
‫Aby upewnić się, że działa,
‫przejdźmy do localhost.
‫OK, więc nie jest to domyślny plik HTML Nginx.
‫I użyliśmy zwykłego obrazu Nginx.
‫Właściwie nie używaliśmy niestandardowego z tego katalogu.
‫Właśnie użyliśmy obrazu giełdowego. Aby to udowodnić, możemy wykonać dokładnie to
‫samo, dokładnie polecenie, ale wyjmij -v, a zamiast tego uruchomię go na porcie 8080. I nazam ten jeden nginx2.
‫Jeśli przejdę do przeglądarki i przejdę do localhost 8080, jest to domyślny indeks nginx. plik html.
‫Ten jest niestandardowy, że żyjemy w tym katalogu.
‫Więc już widzimy, że poprawnie to zmapowało.
‫Jeśli otworzę tutaj kolejną kartę i otrzymam wiersz poleceń w kontenerze.
‫Następnie przejdź do tego katalogu.
‫Zauważysz, że faktycznie możemy zobaczyć plik Docker, ponieważ mapujemy cały katalog.
‫Jeśli po lewej stronie, jeśli faktycznie utworzyliśmy nowy plik i mogę po prostu użyć tego polecenia dotykowego Linux tutaj,
‫aby utworzyć nowy plik. Następnie po prawej ... oops ... po prostu zapominaj, że ... ls -al, a zobaczysz to
‫w swoim pliku.
‫Mam nadzieję, że rozumiesz, co się tutaj dzieje, że obie te lokalizacje są w tej samej lokalizacji.
‫I jeśli powtórzyłem coś w tym pliku testowym, a
‫potem ...
‫proszę bardzo.
‫Nasz nginx może zobaczyć zmiany, ponieważ jest to zwykła ścieżka do pliku w kontenerze, a
‫te pliki znajdują się na hoście.
‫Jeśli mam je usunąć w kontenerze, zostaną usunięte na hoście, ponieważ jest to ten sam
‫plik.
‫Wtedy zwykle prowokuję programistę, aby zastanowił się nad wszystkimi swoimi środowiskami programistycznymi,
‫które mają tak skomplikowaną konfiguracją. Być może używają Vagrant lub innej
‫ręcznej metody ustawienia swojego doskonałego środowiska i mogą zacząć widzieć, jak to może znacznie uprościć.
‫Ponieważ nie musiałem wykonywać żadnych skomplikowanych ustawień na moim Macu, po prostu uruchomiłem kontener.
‫Użyłem polecenia -v z mountem, a teraz mój kod na moim hoście można edytować na moim hoście.
‫I naprawdę nigdy nie muszę wchodzić w skorupę kontenera.
‫Zazwyczaj można po prostu uruchomić kontener i sprawdzić jego logi, aby sprawdzić, czy podczas kodowania
‫występują błędy.
‫Oczywiście jest to prosty przykład z Nginx. Później będziemy mieli konkretne
‫przykłady różnych środowisk programistycznych dla lokalnego rozwoju i kontenerów.