Jak zbudować obraz dokera za pomocą pliku dokera
- 575
- 61
- Maurycy Napierała
Umiejętności Docker są bardzo wymagane, głównie dlatego, że dzięki Doker
Możemy zautomatyzować wdrażanie aplikacji w tak zwanych pojemniki
, tworzenie dopasowanych środowisk, które można łatwo odtworzyć w dowolnym miejscu Doker
Technologia jest obsługiwana. W tym samouczku zobaczymy, jak stworzyć Obraz dokera
od zera, używając Dockerfile
. Nauczymy się najważniejsze instrukcje, których możemy użyć do dostosowania naszego obrazu, sposobu budowania obrazu i jak uruchamiać na nim kontenery.
W tym samouczku nauczysz się:
- Jak utworzyć obraz dokera za pomocą pliku dokera
- Niektóre z najczęściej używanych instrukcji Dockerfile
- Jak osiągnąć trwałość danych w pojemnikach
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od OS |
Oprogramowanie | Doker |
Inny |
|
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
Obrazy i pojemniki
Zanim zaczniemy, przydatne może być jasne zdefiniowanie, co mamy na myśli, kiedy rozmawiamy obrazy
I pojemniki
W kontekście Doker
. Obrazy można uznać za elementy konstrukcyjne świata Docker. Reprezentują „plany” używane do tworzenia pojemników. Rzeczywiście, po utworzeniu pojemnika reprezentuje konkretną instancję obrazów, na których jest oparty.
Wiele kontenerów można utworzyć z tego samego obrazu. W pozostałej części tego artykułu dowiemy się, jak podać instrukcje potrzebne do utworzenia obrazu dostosowanego do naszych potrzeb w Dockerfile
, Jak faktycznie zbudować obraz i jak uruchomić na nim kontener.
Zbuduj własny obraz za pomocą pliku dokera
Aby zbudować własny obraz, użyjemy Dockerfile.
Dockerfile zawiera wszystkie instrukcje potrzebne do utworzenia i skonfigurowania obrazu. Po przygotowaniu naszego pliku dokera użyjemy Docker Build
polecenie, aby faktycznie zbudować obraz.
Pierwszą rzeczą, którą powinniśmy zrobić, jest stworzenie nowego katalogu do hostowania naszego projektu. Ze względu na ten samouczek zbudujemy obraz zawierający Apache
Serwer WWW, więc nazwiemy główny katalog projektu „Dockerized-Apache”:
$ mkdir dokera-apache
Ten katalog jest tym, co nazywamy buduj kontekst
. Podczas procesu kompilacji wszystkie zawarte w nim pliki i katalogi, w tym Dockerfile
Utworzymy, zostaną wysyłane do demona Docker, aby można je było łatwo uzyskać, chyba że zostaną wymienione w .Dockerignore
plik.
Stwórzmy nasze Dockerfile
. Plik należy wywołać Dockerfile
i będzie zawierać, jak powiedzieliśmy powyżej, wszystkie instrukcje potrzebne do utworzenia obrazu z pożądanymi funkcjami. Zgrzewamy naszego ulubionego edytora tekstu i zaczynamy od napisania następujących instrukcji:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "
Kopiuj Pierwsza instrukcja, którą musimy udzielić, jest Z
: Dzięki nim możemy określić istniejący obraz, którego użyjemy jako podstawa (nazywa się to obraz podstawowy
), aby stworzyć własne. W takim przypadku nasz obraz podstawowy będzie Ubuntu
. Oprócz nazwy obrazu użyliśmy również znacznika, aby określić wersję obrazu, którego chcemy użyć, w tym przypadku 18.10
. Jeśli nie zostanie określony znacznik, najnowszy
Tag jest używany domyślnie: spowoduje to użycie najnowszej dostępnej wersji obrazu podstawowego. Jeśli obraz nie jest jeszcze obecny w naszym systemie, zostanie pobrany z DockerHub.
Po Z
Instrukcja, użyliśmy ETYKIETA
. Ta instrukcja jest opcjonalna, można powtarzać wiele razy i służy do dodawania metadanych do naszego obrazu. W takim przypadku użyliśmy go do określenia opiekuna obrazu.
Instrukcja uruchomienia
W tym momencie, jeśli biegniemy Docker Build
, Po prostu wyprodukujemy obraz identyczny z podstawą, z wyjątkiem dodanych metadanych. To nie przydałoby się dla nas. Powiedzieliśmy, że chcemy „dokować” Apache
serwer internetowy, więc następna rzecz do zrobienia w naszym Dockerfile
, jest podanie instrukcji instalacji serwera WWW w ramach obrazu. Instrukcja, która pozwala nam wykonać to zadanie, jest URUCHOMIĆ
:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualizację apt-get && apt-get -y instaluj apache2
Kopiuj URUCHOMIĆ
Instrukcja służy do wykonywania poleceń na wierzchu obrazu. Jedną bardzo ważną rzeczą do zapamiętania jest to, że dla każdego URUCHOMIĆ
Instrukcja, której używamy, a Nowa warstwa jest tworzony i dodawany do stosu. Na ten temat Docker jest bardzo inteligentny: już zbudowane warstwy będą „buforowane”: oznacza to, że jeśli zbudujemy obraz oparty na naszym Dockerfile
, a następnie decydujemy na przykład dodanie kolejnego URUCHOMIĆ
Instrukcja (a tym samym nowa warstwa) na końcu kompilacja nie rozpocznie się od zera, ale uruchomi tylko nowe instrukcje.
Aby tak się stało, oczywiście instrukcje zbudowane już na Dockerfile
nie można modyfikować. Jest nawet możliwe, aby całkowicie uniknąć tego zachowania podczas budowania obrazu, tylko za pomocą --Bez pamięci podręcznej
opcja Docker Build
Komenda.
W naszym przypadku użyliśmy URUCHOMIĆ
instrukcja do wykonania aktualizacja apt-get && apt-get -y instaluj apache2
polecenia. Zwróć uwagę, jak minęliśmy -y
opcja do apt-get instalacja
Polecenie: Ta opcja tworzy, aby odpowiedź afirmatywna została automatycznie udzielana wszystkich potwierdzeń wymaganych przez polecenie. Jest to konieczne, ponieważ instalujemy pakiet nieinteracyjnie.
Odsłanianie portu 80
Jak wiemy, serwer WWW Apache słucha ON Port 80
dla standardowych połączeń. Musimy poinstruować Dockera, aby udostępnił ten port na kontenerze. Aby wykonać zadanie, którego używamy UJAWNIĆ
funkcjonuj i podaj numer portu. Ze względów bezpieczeństwa określony port jest otwierany tylko po uruchomieniu kontenera. Dodajmy tę instrukcję do naszego Dockerfile
:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualiza
Kopiuj Budowanie obrazu
W tym momencie możemy już spróbować zbudować nasz obraz. Z wnętrza katalogu głównego naszego projektu „Dockerized-Apache” uruchamiamy następujące polecenie:
$ sudo Docker Build -t Linuxconfig/Dockkerized -Apache .
Sprawdźmy polecenie. Przede wszystkim zaplanowaliśmy polecenie z Sudo, aby uruchomić je z uprawnieniami administracyjnymi. Można tego uniknąć, dodając użytkownika do doker
grupa, ale stanowi to ryzyko bezpieczeństwa. -T
Opcja, którą zapewniliśmy, skrót --etykietka
, Zastosujmy nazwę repozytorium i opcjonalnie znacznik do naszego obrazu, jeśli kompilacja się powiodnie.
Wreszcie .
instruuje Dockera, aby szukał Dockerfile
W obecnym katalogu. Jak tylko uruchomimy polecenie, proces kompilacji rozpocznie się. Komunikaty o postępach i kompilacji będą wyświetlane na ekranie:
Wysyłanie kontekstu kompilacji do Docker Daemon 2.048 KB Krok 1/4: Z Ubuntu: 18.10 Próba wyciągnięcia dokera repozytorium.IO/Library/Ubuntu… . [… .]
Kopiuj Za kilka minut nasz obraz powinien zostać pomyślnie utworzony. Aby to zweryfikować, możemy uruchomić Obrazy dokera
Polecenie, które zwraca listę wszystkich obrazów istniejących w naszym lokalnym repozytorium Docker:
$ Sudo Docker Image Repozytorium Identyfikator obrazu Utworzono rozmiar LinuxConfig/Dockkerized-APache Najnowsze 7AB7B6873614 2 minuty temu 191 MB
Kopiuj Zgodnie z oczekiwaniami obraz pojawia się na liście. Jak możemy zauważyć, ponieważ nie podaliśmy znacznika (tylko nazwa repozytorium, LinuxConfig/Dockerized-Apache
) najnowszy
Tag został automatycznie zastosowany do naszego obrazu. Jakiś ID
został również przypisany do IT, 7AB7B6873614
: Możemy go użyć do odwołania się do obrazu w przyszłych poleceń.
Uruchamianie kontenera na podstawie obrazu
Teraz, gdy nasz obraz jest gotowy, możemy tworzyć i uruchomić pojemnik
na podstawie tego. Aby wykonać zadanie, którego używamy Docker Run
Komenda:
$ sudo Docker Run --Name = LinuxConfig -Apache -d -p 8080: 80 LinuxConfig/Dockkerized -Apache Apachectl -d Foreground
Sprawdźmy powyższe polecenie. Pierwszą opcją, którą podaliśmy, była --nazwa
: Wraz z nim określamy nazwę kontenera, w tym przypadku „LinuxConfig-Apache”. Jeśli pominęliśmy tę opcję, losowo wygenerowana nazwa zostałaby przypisana do naszego kontenera.
-D
opcja (skrót --odłączyć
) powoduje, że pojemnik działa w tle.
-P
opcja, krótka dla --publikować
, jest potrzebny do opublikowania portu kontenerowego (lub zakresu portów) w systemie hosta. Składnia opcji jest następująca:
-P LocalHost_port: Container_port
W tym przypadku opublikowaliśmy Port 80
Wcześniej wystawiliśmy w kontenerze na gospodarza Port 8080
. Ze względu na kompletność musimy powiedzieć, że możliwe jest również użycie -P
opcja (skrót --Publikuj-all
) Zamiast tego powoduje odwzorowanie wszystkich portów ujawnionych w pojemniku losowy
porty na hosta.
Ostatnie dwie rzeczy, które określliśmy w powyższym poleceniu, to: obraz
pojemnik powinien być oparty na i Komenda
uruchomić po uruchomieniu kontenera, co jest opcjonalne. Obraz jest oczywiście LinuxConfig/Dockerized-Apache
, ten, który zbudowaliśmy wcześniej.
Określone przez nas polecenie jest APACHECTL -D PIERONA
. Z tym poleceniem Apache
serwer WWW jest uruchamiany w pierwszoplanowy
Tryb: Jest to obowiązkowe, aby działało w pojemniku. Docker Run
Polecenie uruchamia określone polecenie na nowy
pojemnik:
$ sudo Docker Run --Name = LinuxConfig -Apache -d -p 8080: 80 Linuxconfig/Dockerized -APache APACHECTL -D Foreground A51FC9A6DD66B02117F00235A341003A9BF0FFD53F90A040BC1122CBBC453423
Kopiuj Jaki jest numer wydrukowany na ekranie? To jest ID
pojemnika! Po uruchomieniu kontenera powinniśmy mieć dostęp do strony obsługiwanej przez domyślnie Apache
Virtualhost w Localhost: 8080
Adres (port 8080
Na hosta jest mapowane na porcie 80
na pojemniku):
Domyślny indeks Apache.Strona HTML
Nasza konfiguracja działa poprawnie. Jeśli uruchomimy Docker Ps
polecenie, które wymienia wszystkie aktywne kontenery w systemie, możemy pobrać informacje o naszym kontenerze: id (krótka wersja, łatwiejsza do odniesienia wiersz poleceń dla człowieka), obraz, z którego został uruchomiony, używane polecenie, jego tworzenie czas i aktualny status, mapowanie portów i nazwa.
$ sudo Docker PS Container ID Polecenie obrazu Utworzone porty statusu nazwy A51FC9A6DD66 LINUXCONFIG/DOCKERIZED -APACHE „APACHECTL -D FOR…” 28 sekund temu w górę 28 sekund 0.0.0.0: 8080-> 80/TCP LinuxConfig-Apache
Kopiuj Aby zatrzymać to pojemnik, wszystko, co musimy zrobić, to odnieść się do niego według jego identyfikatora lub nazwy i uruchomić Docker Stop
Komenda. Na przykład:
$ sudo docker stop Linuxconfig-Apache
Aby rozpocząć ponownie:
$ sudo docker start linuxconfig-apache
Wykonaj polecenie bezpośrednio za pośrednictwem DockerFile
Ponieważ tutaj zbudowaliśmy podstawowy obraz, a w czasie wykonywania za pomocą Docker Run
polecenie, określiliśmy polecenie, które ma zostać uruchomione po uruchomieniu kontenera. Czasami chcemy określić ten ostatni bezpośrednio w pliku dokera. Możemy to zrobić na dwa sposoby: używanie CMD
Lub PUNKT WEJŚCIA
.
Oba instrukcje mogą być używane w tym samym celu, ale zachowują się inaczej, gdy polecenie jest również określone z wiersza poleceń. Zobaczmy, jak.
Instrukcja CMD
CMD
Instrukcje można zasadniczo stosować w dwóch formach. Pierwszy to Exec
formularz:
Cmd ["/usr/sbin/apachectl", „-d”, „plan”]]
Drugi to powłoka
formularz:
CMD/usr/sbin/apachectl -d na pierwszym planie
Exec
z zwykle preferowany. Warto zauważyć, że podczas korzystania z formularza EXEC nie jest wywoływane, dlatego zmienne rozszerzenia nie nastąpi. Jeśli potrzebne jest zmienne rozszerzenie, możemy użyć powłoka
formularz lub możemy wywołać skorupę bezpośrednio w Exec
tryb, jako:
Cmd [„sh”, „-c”, „echo”, „$ home”]
CMD
Instrukcja można określić tylko raz w Dockerfile
. Jeśli wiele CMD
Opcje są dostarczane, tylko ostatnia wejdzie w życie. Celem instrukcji jest zapewnienie domyślny
Polecenie do uruchomienia po uruchomieniu kontenera:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualizację apt-get && apt-get -y instaluj Apache2 Expose 80 cmd ["/usr/sbin/apachectl "," -d "," plan na pierwszym planie "]
Kopiuj Polecenie określone za pomocą CMD
w środku Dockerfile
, Działa jako domyślna i zostanie zastąpiona, jeśli inne polecenie zostanie określone z wiersza polecenia podczas wykonywania Docker Run
.
Instrukcja punktu wejścia
PUNKT WEJŚCIA
Instrukcję można również użyć do skonfigurowania polecenia do użycia po uruchomieniu kontenera i jak i jak CMD
, oboje Exec
I powłoka
Można z nim użyć formularza. Duża różnica między nimi polega na tym, że polecenie przekazane z wiersza poleceń nie zastąpi tego PUNKT WEJŚCIA
: Zamiast tego będzie dołączone do tego.
Korzystając z tej instrukcji, możemy określić podstawowe polecenie i zmodyfikować je za pomocą opcji, które podajemy podczas uruchamiania Run Docker
polecenie, czyniąc nasz pojemnik zachowywał się jak wykonywalny. Zobaczmy przykład z naszym Dockerfile
:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualizację apt-get && apt-get -y instaluj Apache2 Expose 80 EnterPoint ["/usr/sbin/apachectl "]
Kopiuj W tym przypadku zastąpiliśmy CMD
instrukcja z PUNKT WEJŚCIA
a także usunął -D pierwszy plan
opcja z formatu EXET. Załóżmy, że teraz odbudujemy obraz i odtwarzamy kontener za pomocą następującego polecenia:
$ sudo Docker Run --Name = LinuxConfig -Apache -d -p 8080: 80 LinuxConfig/Dockkerized -Apache -D na pierwszym planie
Kiedy pojemnik się uruchomi, -D pierwszy plan
Argumenty są dołączane do polecenia dostarczonego w Dockerfile
z PUNKT WEJŚCIA
instrukcja, ale tylko wtedy, gdy korzystasz z Exec
formularz. Można to zweryfikować, uruchamiając Docker Ps
Polecenie (tutaj dodaliśmy niektóre opcje do polecenia, aby lepiej wyświetlić i sformatować jego dane wyjściowe, wybierając tylko potrzebne informacje):
$ sudo docker ps-no-trunc--format ".Nazwy \ t .Command "LinuxConfig -Apache"/usr/sbin/apachectl -d na pierwszym planie "
Kopiuj Tak jak CMD
, PUNKT WEJŚCIA
Instrukcje można zapewnić tylko raz. Jeśli pojawi się wiele czasu w pliku dokera, zostanie rozważone tylko ostatnie zdarzenie. Możliwość jest zastąpieniem domyślnego PUNKT WEJŚCIA
obrazu z wiersza poleceń, używając --Punkt wejścia
opcja Docker Run
Komenda.
Połączenie CMD i punkt EntryPoint
Teraz, gdy znamy osobliwość CMD
I PUNKT WEJŚCIA
Instrukcje, które możemy również połączyć. Co możemy uzyskać, robiąc to? Możemy użyć PUNKT WEJŚCIA
Aby określić prawidłowe polecenie podstawowe i CMD
instrukcja, aby określić domyślne parametry.
Polecenie będzie działać domyślnie z tymi domyślnymi parametrami, chyba że zastąpimy je z wiersza poleceń podczas uruchamiania Docker Run
. Trzymanie się naszych Dockerfile
, Moglibyśmy napisać:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualizację apt-get && apt-get -y instaluj Apache2 Expose 80 EnterPoint ["/usr/sbin/apachectl "] cmd [" -d ",„ Foreground "]
Kopiuj Jeśli odbudujemy obraz z tego Dockerfile
, Usuń utworzony poprzedni pojemnik i ponownie uruchom Docker Run
polecenie bez określania dodatkowego argumentu, /usr/bin/apachectl -d na pierwszym planie
Polecenie zostanie wykonane. Jeśli zamiast tego podamy niektóre argumenty, zastąpi one osoby określone w Dockerfile
z CMD
instrukcja. Na przykład, jeśli uruchomimy:
$ sudo Docker Run --Name = LinuxConfig -Apache -d -p 8080: 80 LinuxConfig/Dockkerized -Apache -x
Polecenie, które zostanie wykonane podczas uruchamiania kontenera, będzie to /usr/bin/apachectl -x
. Sprawdźmy to:
$ sudo docker ps-no-trunc--format ".Nazwy \ t .Command "LinuxConfig -Apache"/usr/sbin/apachectl -x "
Kopiuj Uruchomiono polecenie, było zgodne z oczekiwaniami: -X
Nawiasem mówiąc, opcja tworzy, aby demon HTTPD został uruchomiony Tryb debugowania
.
Kopiowanie plików do kontenera
Nasz serwer Apache „Dockerized” działa. Jak widzieliśmy, jeśli przejdziemy do Localhost: 8080
, Wizualizujemy domyślną stronę Apache Welcome. Teraz powiedzmy, że mamy stronę internetową gotową do wysłania z kontenerem, jak możemy ją „załadować”, aby Apache go obsłużył?
Cóż, ze względu na ten samouczek po prostu zastąpimy domyślny indeks.plik HTML. Aby wykonać zadanie, możemy użyć KOPIUJ
instrukcja. Załóżmy, że mamy alternatywny wskaźnik.Plik HTML wewnątrz korzenia naszego projektu (nasz kontekst kompilacji) z tą treścią:
Cześć!
Ten plik został skopiowany do kontenera z instrukcją kopii!
Kopiuj Chcemy go załadować i skopiować do /var/www/html
katalog wewnątrz pojemnika, a zatem wewnątrz naszego Dockerfile
Dodajemy KOPIUJ
instrukcja:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualizację apt-get && apt-get -y instaluj Apache2 Expose 80 EnterPoint ["/usr/sbin/apachectl "] cmd [" -d ",„ Foreground ”.html/var/www/html/indeks.html
Kopiuj Odbudowujemy obraz i pojemnik. Jeśli teraz przejdź do Localhost: 8080
, Zobaczymy nową wiadomość:
# Nowa wiadomość
KOPIUJ
Instrukcje można użyć do kopiowania zarówno plików, jak i katalogów. Gdy ścieżka docelowa nie istnieje, jest tworzona wewnątrz pojemnika. Wszystkie nowe pliki i katalogi są tworzone za pomocą UID
I KOŁOWACIZNA
z 0
.
Kolejnym rozwiązaniem do kopiowania plików wewnątrz kontenera jest użycie DODAĆ
instrukcja, która jest silniejsza niż KOPIUJ
. Dzięki tej instrukcji możemy kopiować pliki, katalogi, ale także URL
. Dodatkowo, jeśli skopiujemy lokalny Archiwum smoły
Z rozpoznanym formatem skompresowanym, zostanie on automatycznie nieskompresowany i skopiowany jako katalog wewnątrz pojemnika.
Idealną strategią byłoby użycie KOPIUJ
chyba że dodatkowe funkcje dostarczone przez DODAĆ
są naprawdę potrzebne.
Tworzenie tomu
W poprzednim przykładzie, aby pokazać, jak KOPIUJ
Instrukcja działa, zastąpiliśmy domyślny indeks.plik HTML domyślnego VirtualHost Apache wewnątrz kontenera.
Jeśli zatrzymamy się i uruchomimy kontener, nadal znajdziemy modyfikację, którą dokonaliśmy, ale jeśli kontener z jakiegoś powodu zostanie usunięty, wszystkie dane zawarte na jego zapisanej warstwie zostaną z nim utracone. Jak rozwiązać ten problem? Jednym podejściem jest użycie TOM
instrukcja:
Z Ubuntu: 18.10 etykieta konsekwencji = "[email protected] "Uruchom aktualizację apt-get && apt-get -y instaluj Apache2 Expose 80 EnterPoint ["/usr/sbin/apachectl "] cmd [" -d ",„ Foreground ”.html/var/www/html/indeks.HTML Volume/var/www/html
Kopiuj TOM
Instrukcja wymaga jednego lub więcej katalogów (w tym przypadku /var/www/html
) i powoduje, że są one używane jako punkty montacyjne dla zewnętrznych, losowo nazwanych objętości wygenerowanych po utworzeniu pojemnika.
W ten sposób dane, które umieściliśmy w katalogach używanych jako punkty montażowe, będą utrzymywane w zamontowanych woluminach i nadal będą istnieć, nawet jeśli pojemnik zostanie zniszczony. Jeśli ustawienie katalogu, które ma być używane jako punkt montażowy, zawiera już dane w czasie inicjalizacji, dane te są kopiowane w objętości zamontowanym na nim.
Odbudujmy obraz i pojemnik. Możemy teraz sprawdzić, czy głośność została utworzona i jest w użyciu, sprawdzając pojemnik:
$ sudo Docker Inspect Linuxconfig-Apache [… .] "Mounts": [ "Type": "volume", "Name": "8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61", "Source": "/var/lib/docker/volumes/8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61/_data", "Destination": "/var/ www/html ”,„ sterownik ”:„ lokalny ”,„ tryb ”:„ ”,„ rw ”: true,„ propagacja ”:„ ”], [… .]
Kopiuj Jak już powiedziano, objętość przetrwa nawet po zniszczeniu kontenera, aby nasze dane nie zostaną utracone.
TOM
instrukcja wewnątrz Plik dokerzy
, Jak widać na podstawie wyjścia powyższego komendy Docker, tworzy, aby tworzyć losowo nazwany wolumin. Zdefiniować Nazwany tom
, lub aby zamontować już istniejącą głośność wewnątrz pojemnika, musimy go określić w czasie wykonywania, podczas uruchamiania Docker Run
polecenie za pomocą -v
opcja (skrót --tom
). Zobaczmy przykład:
$ sudo Docker Run --Name = LinuxConfig -Apache -d -p 8080: 80 -V myvolume:/var/www/html LinuxConfig/Dockerized -Apache
W powyższym poleceniu użyliśmy -v
opcja określająca Nazwa woluminu
(Bardzo ważne: zauważ, że nie jest to ścieżka, ale prosta nazwa) i punkt Mountpoint
Wewnątrz pojemnika za pomocą następującej składni:
:
Kiedy wykonamy takie polecenie, wolumin o nazwie „Myvolume” zostanie zamontowany na określonej ścieżce wewnątrz pojemnika (wolumin zostanie utworzony, jeśli jeszcze nie istnieje). Jak powiedzieliśmy wcześniej, jeśli głośność jest pusta, dane już istniejące na punkcie Mounpoint wewnątrz pojemnika zostaną skopiowane w nim. Używając Docker Volume LS
Polecenie, możemy potwierdzić, że wolumin o określonej nazwie został utworzony:
$ sudo Docker Volume LS Driver Volume Nazwa lokalnego myvolume
Kopiuj Aby usunąć głośność, używamy Docker Volume RM
polecenie i podaj nazwę woluminu do usunięcia. Docker nie pozwoli nam usunąć głośności używanej przez aktywny kontener:
$ sudo Docker Volume RM Myvolume Błąd Odpowiedź z demona: niezdolna do usunięcia woluminu nadal używana: Usuń myvolume: Wolumen jest używany - [95381B7B6003F6165DFE2E1912D2F827F7167AC26E22CF26C1BCAB704A2D7E02]
Kopiuj Innym podejściem do trwałości danych, szczególnie przydatnych podczas rozwoju, jest to montaż wiązania
katalog hosta wewnątrz pojemnika. Takie podejście ma tę zaletę, że pozwala nam pracować na naszym kodzie lokalnie za pomocą naszych ulubionych narzędzi i widzieć efekt zmian natychmiast odzwierciedlonych w pojemniku, ale ma dużą wadę: kontener staje się zależny od struktury katalogu gospodarza.
Z tego powodu, ponieważ przenośność jest jednym z głównych celów Dockera, nie jest możliwe zdefiniowanie montaż wiązania
wewnątrz pliku dokera, ale tylko w czasie wykonywania. Aby wykonać to zadanie, używamy -v
opcja Docker Run
polecić ponownie, ale tym razem zapewniamy ścieżka
katalogu wewnątrz systemu plików hosta zamiast nazwy woluminu:
$ sudo Docker Run --Name = LinuxConfig -Apache -d -p 8080: 80 -v/ścieżka/on/host:/var/www/html LinuxConfig/Dockerized -Apache
Podczas uruchamiania powyższego polecenia katalog hosta/ścieżka/on/host zostanie zamontowany na/var/www/html wewnątrz kontenera. Jeśli katalog na hosta nie istnieje, jest tworzony automatycznie. W takim przypadku dane w katalogu MountPoint wewnątrz pojemnika (/var/www/html w naszym przykładzie) są nie skopiowane do zamontowanego na nim katalogu hosta.
Wniosek
W tym samouczku nauczyliśmy się podstawowych pojęć potrzebnych do stworzenia i zbudowania obrazu Docker za pomocą Dockerfile
i jak uruchomić na nim kontener. Zbudowaliśmy bardzo prosty obraz, który pozwala nam uruchomić „dokeryzowaną” wersję serwera WWW Apache. W tym procesie widzieliśmy, jak korzystać z Z
instrukcja, która jest obowiązkowa do określenia obrazu podstawowego do pracy, ETYKIETA
instruktaż do dodania metadanych do naszego obrazu, UJAWNIĆ
instrukcja zadeklarowania portów, które mają być odsłonięte w pojemniku. Nauczyliśmy się również, jak mapować wspomniane porty do portów systemu hosta.
Nauczyliśmy się używaćURUCHOMIĆ
instrukcja do uruchamiania poleceń na obrazie i nauczyliśmy się, jak określić polecenie, które należy wykonać, gdy kontener zostanie uruchomiony zarówno z wiersza poleceń, jak i wewnątrz Dockerfile
. Widzieliśmy, jak to osiągnąć, używając CMD
I PUNKT WEJŚCIA
instrukcje i jakie są różnice między nimi. Wreszcie widzieliśmy, jak to zrobić KOPIUJ
dane wewnątrz kontenera i jak osiągnąć trwałość danych za pomocą objętości. W naszych przykładach omówiliśmy tylko niewielki podzbiór instrukcji, które można użyć w Dockerfile
.
Aby uzyskać pełną i szczegółową listę, zapoznaj się z oficjalną dokumentacją Dockera. W międzyczasie, jeśli chcesz wiedzieć, jak zbudować cały LAMPA
Ustaw za pomocą Dockera i narzędzia Docker-Compose, możesz rzucić okiem na nasz artykuł na temat utworzenia stosu lampy na bazie Docker za pomocą Docker-Compose na Ubuntu 18.04 Bionic Beaver Linux.
Powiązane samouczki Linux:
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Rzeczy do zainstalowania na Ubuntu 20.04
- Jak montować obraz ISO na Linux
- Jak tworzyć przyrostowe kopie zapasowe systemu za pomocą Timeshift na…
- Kubernetes vs Docker, jaka jest różnica?
- Jak zmienić rozmiar obrazu dysku QCOW2 w systemie Linux
- Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na…
- Mastering Bash Script Loops
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…
- « Wprowadzenie do grepów i wyrażeń regularnych
- Jak odzyskać usunięte pliki z najważniejszym w systemie Linux »