Zrozumienie pliku dokera

Zrozumienie pliku dokera
Zgodzisz się ze mną, że wpływ Docker na świat technologii jest ogromny. Oszczędza programistów oprogramowania, jak i administratorów systemów dużo bólu głowy.

W tym artykule dowiesz się o bardzo kluczowej części całej konfiguracji Docker, DockerFile. Dockerfile używa prostej struktury. Chociaż ta prostota jest dobrą rzeczą, daje miejsce dla osób, aby po prostu zhakować polecenia, bez pełnego zrozumienia wpływu.

Na końcu tego artykułu lepiej zrozumiesz Plik dokujący. Więc będziesz mógł napisać Dockerfiles, które rozumiesz.

Wewnątrz pliku dokera

Dockerfile to w zasadzie plik tekstowy. Ale w przeciwieństwie do zwykłych plików tekstowych zobaczysz, że nie ma .tekst rozszerzenie pliku. Dockerfile to plik, który zapiszesz jako Dockerfile, bez rozszerzeń plików.

W tym pliku dokerowym istnieje wszystkie polecenia używane do montażu obrazu Dockera. Podczas gdy możesz przekazać te polecenia do Docker CLI podczas budowania obrazu, zgodzisz się, że lepiej ćwiczyć plik, więc rzeczy można lepiej zorganizować.

Polecenia w Dockerfile są niezbędne do zbudowania obrazu Dockera.

Dlatego:

Każda wiersz polecenia w Dockerfile tworzy warstwy, które tworzą obraz Docker. Pod warunkiem, że Plik docker pozostaje taki sam, za każdym razem, gdy budujesz z niego obraz, jest pewne, że otrzymasz te same wyniki. Jednak gdy dodasz nowy wiersz polecenia, Docker po prostu buduje tę warstwę i dodaje ją do istniejących warstw.

Podobnie jak kompilator lub interpreter dla języków programowania, Docker czyta Plik dokerowy od góry do dołu. Stąd umieszczenie poleceń ma duże znaczenie.

W przeciwieństwie do większości języków programowania, polecenia w DockerFile nie są wrażliwe. Ale z przykładowych plików dokerowych zobaczysz, że polecenia są zapisane w dużej. To nic innego jak konwencja, którą również powinieneś śledzić.

Podobnie jak języki programowania, możesz pisać komentarze w swoich plikach Docker. Komentarze w DockerFiles są oznaczone za pomocą symbolu skrótu lub funta # Na początku linii. Należy zauważyć, że obsługuje to tylko jednokierunkowe komentarze, dlatego do pisania komentarzy wieloletnich użyjesz symbolu skrótu na każdym wierszu.

Ostrożnie, nie wszystkie symbole skrótów, które widzisz w pliku dokera. Symbole hash mogą również wskazywać Dyrektywy parsera. Dyrektywy parsera są poleceniami w pliku dokera, które wskazują, jak należy odczytać.

W momencie pisania tego artykułu dostępne są tylko dwie dyrektywy parserów. Oni są ucieczka I składnia Dyrektywy parsera. składnia Dyrektywa jest dostępna tylko w Docker, gdy działa na zapleczu Buildkit.

ucieczka Dyrektywa działa wszędzie. ucieczka Dyrektywa pozwala zdecydować, jakiego symboli Docker używa jako postaci ucieczki.

Możesz mieć w swoim DockerFile, linii podobnej do tej poniżej:

Indeks kopii.html c: \\ dokumenty

Nie powinieneś jeszcze zawracać sobie głowy tym, co robi polecenie, skupić się na lokalizacji pliku. Korzystanie z powyższego polecenia w obrazie Docker opartym na systemie Windows jest prawidłowe. Ale pamiętasz, że Docker jest oparty na Linux, więc używa backslash \ jako charakter ucieczki z powodu konwencji Linuksa. Dlatego, gdy Docker przeczyta przez Plik Docker, uniknie go, zamiast go odczytać jako ścieżkę pliku.

Aby zmienić to zachowanie, użyjesz ucieczka Dyrektywa parsera, jak pokazano poniżej:

# Escape = '

Ta dyrektywa powoduje, że Docker używa backtick jako postaci ucieczki, zamiast backslash. Aby skorzystać z dyrektywy parsera, będziesz musiał umieścić ją na górze pliku dokera, a nawet będzie to liczyć się tylko jako komentarz-musisz umieścić ją nawet powyżej komentarzy, jeśli masz komentarze na górze pliku.

Instrukcje Dockerfile

Docker polega na każdym wierszu polecenia w pliku dokera i wykonuje je, budując warstwę dla każdego wiersza w tym procesie.

Będziesz potrzebować zrozumienia poleceń do pisania Dockerfiles. Punkt ostrożności: wiele poleceń Dockerfile robi podobne rzeczy. Nie musisz się martwić, możesz też zrozumieć te polecenia.

Oto lista poleceń, o których dowiesz się:

  • Z
  • ETYKIETA
  • Env
  • UJAWNIĆ
  • URUCHOMIĆ
  • KOPIUJ
  • Workdir
  • CMD

Z

Pamiętaj, że głównym celem Docker jest wirtualizowanie rzeczy na poziomie systemu operacyjnego (OS) poprzez tworzenie kontenerów. Dlatego niezależnie od tego, jaką dokument Docker opiera się na pliku dokera, musi opierać.

Polecenie From służy do określania tego, jakiego system operacyjny zamierzasz użyć jako obrazu podstawowego. Jeśli zamierzasz budować na obrazie podstawowym, polecenie musieć być pierwszym poleceniem w DokerFile-Asides Parser Dyrektywy i komentarze.

ETYKIETA

Dockerfile potrzebuje metadanych, a polecenie etykiety jest tym, czego użyłbyś do ich tworzenia. Po zbudowaniu obrazu i uruchomieniu pojemnika z niego, możesz użyć Docker Inspect Polecenie do znalezienia informacji o kontenerze.

Env

Zmienne środowiska. Znane słowa? Cóż, polecenie ENV służy do ustawiania zmiennych środowiskowych podczas budowania obrazu Dockera. Zobaczysz również, że te ustawione zmienne środowiskowe są również dostępne po uruchomieniu kontenera.

DockerFile ma polecenie podobne do ENV, znane jako arg. Jednak niezależnie od zmiennej środowiska za pomocą arg, jest dostępne tylko podczas budowania obrazu, ale nie po uruchomieniu kontenera.

UJAWNIĆ

W ten sam sposób lokalny host Docker-your jest hostem Docker w niniejszej sprawie-w celu komunikacji, takich jak 8080, 5000 itp. to w ten sam sposób, w jaki kontenery Docker mają porty.

Użyjesz polecenia Expose, aby wybrać, jakie porty powinny być dostępne do komunikacji z kontenerem.

Podczas uruchamiania kontenerów Docker możesz przejść w -P argument znany jako publikacja, która jest podobna do polecenia Expose.

Oto subtelna różnica: używasz polecenia Expose, aby otwierać porty na inne kontenery Docker, podczas gdy -P Argument służy do otwierania portów do środowiska zewnętrznego I.mi. poza kontenerem Docker.

Jeśli nie korzystasz z Expose lub -P W ogóle wówczas kontener Docker nie będzie dostępny przez żadne porty spoza kontenera lub innych kontenerów Docker.

URUCHOMIĆ

Budując obraz Dockera, może być konieczne uruchomienie poleceń z powodów, takich jak instalowanie aplikacji i pakietów, aby być częścią obrazu.

Korzystając z polecenia run, możesz to wszystko zrobić. Ale pamiętaj: polecenia są uruchamiane tylko po budowaniu obrazu Dockera.

KOPIUJ

Istnieją różne powody, aby kopiować pliki z hosta Dockera do obrazu Docker. Niektóre pliki, które możesz skopiować, mogą to być pliki konfiguracyjne lub kod źródłowy-jeśli będziesz je uruchomić w kontenerze Docker.

Aby skopiować pliki z hosta Dockera na obraz Docker, możesz użyć polecenia kopiowania.

Istnieje polecenie Add, które jest podobne do kopii i jest nieco inne. Podczas gdy kopia może kopiować tylko pliki z hosta Dockera na obraz Docker, dodaj może kopiować pliki z adresu URL, a także wyodrębnić kompresowane pliki do obrazu Docker.

Dlaczego warto używać kopii zamiast dodawania? Cóż, wymyślisz kopiowanie plików z adresu URL to zadanie, które możesz uruchomić z curl za pomocą polecenia run. Możesz także wyodrębnić pliki na obrazie Docker za pomocą polecenia uruchom.

Jednak nie ma nic złego w użyciu AdD do bezpośredniego wyodrębnienia skompresowanych plików do obrazu Docker.

Workdir

Pamiętaj o komendzie Run? Możesz użyć polecenia uruchom, aby wykonywać polecenia w swoim obrazie Docker. Czasami jednak będziesz mieć powód, aby uruchomić polecenie w niektórych katalogach. Jako przykład, aby rozpakować plik, musisz znajdować się w katalogu pliku zip lub wskazać.

Tam przydaje się Workdir. WorkDir umożliwia zmianę katalogu, podczas gdy Docker buduje obraz, a nowy katalog pozostaje aktualnym katalogiem dla reszty instrukcji kompilacji.

CMD

Twój kontener Docker jest zwykle skonfigurowany do uruchomienia jednego procesu. Ale skąd to wie, jaki proces uruchomić? To jest za pośrednictwem polecenia CMD. Polecenie CMD służy do wykonywania poleceń, gdy Docker uruchamia kontener Docker z obrazu.

Podczas gdy możesz określić polecenie, które ma być uruchomione podczas uruchamiania z linii poleceń, polecenia podane w instrukcji CMD pozostają domyślnie.

Docker może uruchomić tylko jedno polecenie CMD. Dlatego jeśli wstawiasz dwie lub więcej instrukcji CMD, Docker uruchomiłby tylko ostatni.mi. najnowszy.

Punkt EntryP jest podobny do CMD, jednak możesz uruchamiać polecenia podczas uruchamiania i nie zastąpiłby instrukcji zdefiniowanych w punkcie EntryPoint.

Przykład

W tym przykładzie zobaczysz implementację prawie wszystkich poleceń omówionych powyżej. Zobaczysz, jak aplikacja kolba zostałaby uruchomiona w pojemniku Docker. Jeśli nie wiesz, czym jest kolba, Folask to ramy internetowe napisane w Pythonie do budowania aplikacji internetowych.

To dość proste, więc nie musisz mieć żadnej wiedzy na temat języka, aby uruchomić przykład.

Na początek musisz zainstalować git na swoim komputerze. Po zainstalowaniu GIT sklonujesz kod źródłowy z repozytorium GitHub tutaj.

Najpierw utwórz nowy katalog. W tym katalogu będziesz mieć kod źródłowy i plik. Możesz utworzyć katalog-możesz to nazwać Docker-próbka-i plik dokujący za pomocą poniższych poleceń:

Mkdir Docker-Sample && CD Docker-Sample
Dotknij Plik Docker

Pamiętaj, że Plik docker to zwykły plik tekstowy? Pamiętasz również, że nie powinno mieć .tekst rozszerzenie? Znajdziesz tę dyskusję na początku sekcji „Inside the Dockerfile”, jeśli go przegapiłeś.

Następnie pobierasz kod źródłowy z GitHub za pomocą Git Clone polecenie, jak pokazano poniżej:

Git Clone https: // github.com/craigkerstiens/folask-helloworld.git

Możesz sprawdzić zawartość Flask-Helloworld informator:

LS Flask-Helloworld

Zobaczysz następujące pliki:

  • Obniżka cen.RST: Zawiera szczegóły projektu, ale nie ważne dla tego przykładu. Nie powinieneś się tym martwić.
  • Procfile: Zawiera polecenia uruchamiające projekty na serwerze. Nie powinieneś się o to martwić.
  • App.py: Zawiera kod, który uruchomisz w kontenerze Docker.
  • Wymagania.tekst: Zawiera zależności App.py Plik musi działać pomyślnie.

Pisanie pliku dokera

Ten plik dokujący ma wszystkie instrukcje Docker omówione powyżej. Ma również komentarze, aby pomóc ci zrozumieć, co robi każda linia.

# Z instrukcji wybiera obraz nadrzędny dla Dockera.
# Ten przykład używa alpejskiego.
# Alpine to minimalny obraz dokera bardzo mały
Od alpejskiego: 3.3
# Instrukcja etykiety tworzy etykiety.
# Pierwsza etykieta to opiekun z wskazówką Linux.
# Druga etykieta to nazwa AppName z kolbą wartości Hello. Świat
# Możesz mieć tyle par kluczy do wartości, ile chcesz.
# Możesz także wybrać dowolną nazwę kluczy.
# Wybór opieki i nazwy AppName W tym przykładzie
# to osobisty wybór.
Etykieta „utrzymywana” = „wskazówka Linux” „AppName” = „Flask Hello World”
# Instrukcja envess przypisuje zmienne środowiskowe.
# Katalog /usr /src zawiera pobrane programy,
# Czy to źródło, czy binarne przed ich zainstalowaniem.
Env Applocation /USR /SRC
# Kopiuj instrukcje kopie plików lub katalogów,
# od hosta Dockera do obrazu Dockera.
# Skopiujesz kod źródłowy do obrazu Docker.
# Poniższe polecenie używa Zmiennej Zmiennej Środowiska.
Kopiuj Flask-Helloworld $ Applocation/Flask-Helloworld
# Ponownie używa instrukcji ENV.
Env Flaspapp $ Applocation/Flask-Helloworld
# Instrukcja WorkDir zmienia bieżący katalog w obrazie Docker.
# Polecenie poniżej zmienia katalog na/usr/src/flask-helloworld.
# Katalog docelowy wykorzystuje zmienną środowiskową.
Workdir $ flaspapp/
# Uruchom instrukcje uruchamia polecenia,
# tak jak na terminalu,
# Ale na obrazie dokera.
# Poniższe polecenie instaluje zależności Pythona, PIP i aplikacji.
# Zależności są w wymaganiach.plik txt.
Run apk Dodaj-upodate python py-pi-pi
Uruchom instalację PIP -Upgrade PIP
Uruchom wymagania instalacyjne PIP -R.Instrukcja TXT # Expose Otwiera port do komunikowania się z kontenerem Docker.
# Aplikacja Flask korzysta z portu 5000, więc ujawnisz port 5000.
Expose 5000 # instrukcja CMD uruchamia polecenia takie jak bieganie,
# Ale polecenia działają po uruchomieniu kontenera Dockera.
# Można użyć tylko jednej instrukcji CMD.
CMD [„Python”, „App.py "]

Budowanie obrazu Dockera

Po napisaniu DockerFile możesz zbudować obraz Docker z poniższym poleceniem:

Sudo Docker Build -t Sample_image .

Tutaj, próbka_image to nazwa obrazu dokera. Możesz nadać mu inną nazwę. Kropka (.) Na końcu polecenia wskazuje, że pliki, z którymi pracujesz, znajdują się w bieżącym katalogu.

Uruchamianie kontenera Docker

Aby uruchomić kontener Docker, możesz użyć Docker Run Polecenie poniżej:

Sudo Docker Run -IP 5000: 5000 próbka_image: najnowszy

Parametr -i zapewnia, że ​​kontener Docker działa w trybie interaktywnym, a parametr -p wiąże port hosta Docker z portem Docker Container. Pomyśl o tym jak: Docker-Host: Docker-Container.

Po uruchomieniu kontenera Docker możesz odwiedzić LocalHost: 5000 w przeglądarce, aby zobaczyć wyniki aplikacji Flask.

Wniosek

Dockerfile to plan obrazu Dockera. Zrozumienie, jak działają DockerFiles, a możliwość ich wygodnego pisania sprawiłoby, że Twój Docker doświadczył przyjemnego.

Pracując nad tym za pośrednictwem tego artykułu, widziałeś, jak działają DockerFiles. Mamy nadzieję, że rozumiesz także, co oznaczają główne instrukcje Docker i możesz użyć ich do budowania własnych obrazów Docker.

Wszelkie pytanie dotyczące Dockerfiles byłoby mile widziane. Dziękuje za przeczytanie.