‫W porządku. Wydaje się, że woluminy są dość proste, ale w rzeczywistości jest ich wiele.
‫Pierwszy sposób, w jaki można powiedzieć kontenerowi, że musi martwić się o wolumin, znajduje się w pliku Dockerfile.
‫Sprawdźmy niektóre z nich.
‫Po prostu zrobię to, co robię.
‫Zamierzam wyszukać MySQL.
‫W ten sposób dowiedziałem się bardzo dużo o Dockerfiles i jak poprawnie z nich korzystać, to oficjalne repozytoria mają
‫naprawdę dobre domyślne ustawienia i najlepsze praktyki wbudowane w nie.
‫Kiedy przejdę do MySQL, po prostu kliknę tutaj na najnowszy plik Docker. Założę się o ciebie, ponieważ
‫jest to baza danych, prawdopodobnie zawiera ona polecenie głośności.
‫No to jedziemy.
‫Jest to domyślna lokalizacja baz danych MySQL. Ten obraz jest zaprogramowany w taki sposób,
‫aby powiedzieć Dockerowi, że kiedy rozpoczynamy od niego nowy kontener, faktycznie utworzyć nową lokalizację woluminu
‫i przypisać ją do tego katalogu w kontenerze. Oznacza to, że wszystkie pliki, które tam umieścimy w
‫pojemniku, przeżyją kontener, dopóki ręcznie nie usuniemy woluminu.
‫I jest to coś, o czym powinniśmy tutaj wspomnieć, że woluminy wymagają ręcznego usuwania.
‫Nie możesz ich wyczyścić, usuwając pojemnik.
‫To dodatkowy krok. To tylko dla ubezpieczenia naprawdę, ponieważ cały
‫punkt polecenia objętości mówi, że te dane są szczególnie ważne, co najmniej ważniejsze niż sam pojemnik.
‫Jeśli zrobimy docking na MySQL, a
‫potem zrobię inspekcję obrazu docker na MySQL, nie zobaczymy Dockerfile, ponieważ plik Docker nie
‫jest częścią metadanych obrazu, który zauważysz w tym obszar konfiguracji, który określił
‫tamtą objętość.
‫Zawsze mogę powiedzieć, że konfiguracja, która pochodziła z pliku Dockerfile, kiedy została zbudowana, przypisała woluminowi
‫tę ścieżkę.
‫Z tego powodu uruchommy kontener.
‫Więc kontener dokera uruchom -d --name mysql.
‫Jeśli pamiętasz z wcześniejszych, MySQL jest trochę wyjątkowy.
‫Wymaga on teraz zmiennej
‫środowiskowej, zanim zadziała.
‫To MYSQL_ALLOW_EMPTY_PASSWORD.
‫DOBRZE.
‫To, co widzisz, działa w MySQL. Jeśli zrobimy kontener dokujcy do
‫kontrolki mysql, powinniśmy zobaczyć to samo, co w konfiguracji mówi nam, że jest wolumin.
‫Tutaj.
‫Możemy go również zobaczyć tutaj pod wierzchowcami. Co to jest, jest to fakt, że działający kontener uzyskuje swoją
‫własną unikalną lokalizację na hoście, do przechowywania tych danych, a następnie jest w tle, mapowany lub montowany, do tej lokalizacji w kontenerze, tak
‫aby lokalizacja w kontenerze tak naprawdę myśli, że pisze do /
‫var / lib / mysql.
‫W tym przypadku widzimy, że dane faktycznie znajdują się w tej lokalizacji na hoście. Zróbmy więc głośność dokowania ls,
‫a widzimy, że
‫mamy teraz jeden tom. Teraz zauważamy, że ma ten unikalny identyfikator, że nigdy nie
‫dowiemy się, do czego zmierza,
‫prawda?
‫Więc, zróbmy inspekcję na ten temat.
‫Nie musisz wpisywać wszystkiego.
‫Możesz po prostu wpisać kilka pierwszych znaków i nacisnąć klawisz Tab, aby je ukończyć. Dostaniesz podobne
‫informacje o samym woluminie.
‫Jeśli faktycznie robisz to na komputerze z systemem Linux, możesz przejść do tej lokalizacji na dysku
‫twardym i zobaczyć dane.
‫W rzeczywistości będą tam niektóre bazy danych.
‫Jeśli używasz komputera Mac lub systemu Windows, pamiętaj, że Docker dla systemu Windows i Docker dla
‫komputerów Mac naprawdę robią coś w tle, które jest ukryte przed nami, gdzie faktycznie tworzy maszynę wirtualną Linux.
‫Więc te dane są technicznie wewnątrz tej maszyny wirtualnej Linux. Nie będzie można przejść do tej ścieżki na komputerze z
‫systemem Windows lub Mac i wyświetlić danych. W rzeczywistości jest w tej VM.
‫Zobaczymy też, z zamontowanymi woluminami, jak możemy obejść to ograniczenie.
‫Patrząc na to, zauważasz, że nie jest to zbyt przyjazne dla użytkownika, jeśli chodzi o informowanie nas o tym, co się w
‫nim znajduje lub do którego jest przypisany ten wolumin.
‫Z perspektywy kontenera widzimy, z jakiego woluminu korzysta, ale z perspektywy wolumenu nie widzimy,
‫z czym jest połączona.
‫Dobrze?
‫Gdybym tylko uderzył w Strzałkę w górę i zobaczmy, utwórz mysql2.
‫W ten sposób powstał kolejny serwer MySQL działający w tle.
‫Jeśli zrobię kolejny wolumin dokowania ls, zobaczysz dwa z nich.
‫Zaczynasz dostrzegać problem, prawda?
‫Nie ma łatwego sposobu, aby powiedzieć jedno od drugiego.
‫Jeśli po prostu, aby udowodnić punkt, wykonaj kontenera dokera zatrzymując mysql, a docker kontenera zatrzymaj
‫mysql2.
‫Wykonujemy kontener dokera. Nie zobaczymy żadnych kontenerów. Jeśli zrobimy ls -a, zobaczymy
‫je wszystkie. I zauważ, że zostały zatrzymane. A potem robimy tomki doków, zauważcie,
‫że nadal mamy dwa tomy.
‫Jeśli wykonuję kontener dokera rm mysql, a następnie mysql2, ponieważ faktycznie mogę wykonać oba z nich w
‫jednym poleceniu, to usunie oba moje kontenery. Jeśli teraz zrobię wolumin dokowania ls, moje woluminy
‫nadal tam są. Moje dane są nadal bezpieczne.
‫Rozwiązaliśmy jeden problem.
‫Bazy danych przeżywają plik wykonywalny.
‫Jak sprawić, by było to trochę bardziej przyjazne dla użytkownika?
‫Właśnie tam pojawiły się nazwane woluminy i zdolność do określania rzeczy w poleceniu
‫uruchomienia dockera.
‫Jeśli kilka razy uderzyłem w Strzałkę w górę, dopóki nie przejdę do kontenera dokera, nie ma to znaczenia, który
‫z nich zamierzasz ponownie uruchomić.
‫W tym przypadku zamierzamy wprowadzić polecenie -v. A -v pozwala nam określić nowy wolumin, który
‫chcemy utworzyć dla tego kontenera, który ma zostać uruchomiony, lub pozwala nam na dwie inne
‫opcje.
‫Jedną z nich jest utworzenie nazwanego tomu.
‫Gdybym po prostu zrobił -v, a następnie var lib mysql, zrobiłoby to to samo, co zrobiła
‫komenda volume w pliku Dockerfile.
‫Tak naprawdę nie musimy tego robić tutaj. Ale co możemy zrobić, to umieścić nazwę przed
‫nim dwukropkiem. To jest znane jako "nazwany tom. "Kiedy
‫to zrobię, a następnie zrobię wolumin dokowania, zobaczysz, że mój nowy kontener używa nowego woluminu i
‫używa przyjaznej nazwy.
‫Jeśli zrobimy inspekcję woluminu dokowania na tym mysql, zobaczycie, że jest to łatwiejsze w użyciu.
‫Jeśli ponownie usunę mój kontener i będziemy musieli wstawić
‫-f, ponieważ nadal działa, a następnie uruchamiam inny. Tym razem nadaję mu
‫inne imię. A potem zrobimy kolejny plik dokowania ls, zobaczysz, że
‫wygląda na to, że nie utworzyliśmy nowego woluminu. Wciąż używa tej samej objętości.
‫Zróbmy kontener dokera, który sprawdzimy na mysql3. To, co zobaczymy tutaj, to: tak, to jest
‫to, co zostało skonfigurowane, ale co robimy?
‫Tu są nasze wierzchowce.
‫Zobaczymy, że nie tylko nazwa jest bardziej przyjazna, ale również zmieniła lokalizację źródła, aby
‫była trochę bardziej przyjazna.
‫Dla mnie małą wskazówką jest to, że gdy uruchamiam na kilka dni lub tygodni, konkretną bazę danych, w konkretnym
‫kontenerze, którego muszę używać w kółko i nie chcę pustego serwera bazy danych,
‫W ten sposób utworzą moje pojemniki i nadają im nazwę dla projektu, dzięki czemu będę wiedział, do czego służy ten
‫tom i
‫który musi się trzymać.
‫Ostatnia rzecz tutaj.
‫Dlaczego chcesz utworzyć tworzenie woluminu docker?
‫Jeśli możemy je utworzyć z kontenera dokera, uruchom komendę w środowisku wykonawczym, a my możemy je utworzyć, podając je w pliku Dockerfiles, jest tylko kilka
‫przypadków, w których chcielibyśmy je utworzyć z wyprzedzeniem. I można to całkiem
‫szybko zrozumieć za pomocą polecenia help.
‫Ponieważ jest to jedyny sposób, w jaki możemy określić inny sterownik.
‫Pamiętasz tę wtyczkę, o której będę mówić później?
‫Następnie wszelkie opcje sterowników, które chcemy użyć -o na.
‫Następnie, jeśli chcemy umieścić na nim etykiety, o czym również porozmawiamy później w dziale produkcji.
‫Czasami, w szczególnych przypadkach, konieczne jest wcześniejsze utworzenie woluminu Docker, ale zwykle w celu lokalnego rozwoju
‫wystarczy, że zostanie określone w pliku Dockerfile lub w poleceniu run.