Jak zbudować obraz dokera za pomocą pliku dokera

Jak zbudować obraz dokera za pomocą pliku dokera

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

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od OS
Oprogramowanie Doker
Inny
  • Daemon Docker
  • Narzędzie wiersza poleceń Docker
  • Znajomość interfejsu wiersza poleceń Linux
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…