Luźno mówiąc, Docker coraz bardziej przypomina uniwersalny menedżer pakietów, który działa na wszystkich możliwych platformach Linux. Potrzeba kontenerów i używa ich do rozwiązania zupełnie innego problemu, z którym napotykają się programiści. Problem polega na tym, że programiści używają swojego systemu operacyjnego stacjonarnego (takiego jak system Windows, MacOS lub Linux z toną pakietów związanych z pulpitem) do pisania aplikacji. Aplikacja, którą piszą, często działa na zupełnie innym systemie operacyjnym na serwerze gdzieś z pewną dystrybucją Linux zupełnie inną niż laptop programisty.
Z Docker jest pomysł, że Twoja aplikacja jest zapakowana jako obraz Docker. Zadaniem Dockera jest wykonanie tego obrazu i uruchomienie go jako kontenerowanej aplikacji dla Ciebie. Bycie kontenerowanym oznacza, że aplikacja i jej zależności będą działać w odizolowanym środowisku, które może całkowicie różnić się od laptopa programisty, a nawet serwera produkcyjnego. Tak długo, jak oboje wspierają Dockera, oboje mogą uruchomić tę samą aplikację w ten sam sposób.
Anatomia obrazu dokera
Jak wspomniano wcześniej, aplikacja Docker będzie działać na uzgodnionym środowisku. Teraz pytanie brzmi: w jaki sposób tworzymy to środowisko? Większość obrazów aplikacji zaimporkowałaby obraz bazowy Dockera i zbudowałby ich aplikację.
Aplikacje są wykonane z warstw oprogramowania. Obraz pojemnika WordPress jest zbudowany za pomocą obrazu kontenera HTTPD, który z kolei jest zbudowany na obrazie Ubuntu. Obraz, na którym budowany jest nowszy obraz, jest znany jako obraz nadrzędny w Docker Terminology. W DockerFile (nieco później przejdziemy do tego, co oznacza Dockerfile), ten obraz nadrzędny jest wspomniany na górze pliku, jak pokazano poniżej:
Z Ubuntu: 18.04Ten plik dokujący po wykonaniu przekształca aplikację w obraz Docker (binarny), który możesz następnie popchnąć do rejestru, z którego można go wyciągnąć, aby stworzyć nowe kontenery gdzie indziej. Jednak wszyscy będą mieli Ubuntu: 18.04 jako obraz podstawowy i działaj tak, jakby był to system Ubuntu, w którym działają.
Być może zauważyłeś to, próbując wyciągnąć nowy obraz Docker.
To pokazuje, ile warstw jest pobieranych przed faktyczną aplikacją (która może mieć tylko kilka megabajtów).
Z tego powodu chcielibyśmy stworzyć tak zwany obraz podstawowy. Który nie jest zbudowany na czymkolwiek innym. Słowo kluczowe „zarysowanie” służy do wskazania, że ta warstwa nie jest zbudowana na czymkolwiek innym. Tak jak:
Od zeraNajpierw utworzymy prostą aplikację Hello-World, a następnie dowiemy się, jaka będzie reszta pliku dokera. System hosta to Ubuntu: 18.04 LTS i używamy Docker wersja 17.12.1-ce do eksperymentu.
Tworzenie statycznego binarnego
Kontenery Docker to zbiór procesów działających od izolacji od reszty systemu operacyjnego. Jedyną rzeczą, z którą proces jest w kontakcie, jest jądro. Kernel jest odpowiedzialny za planowanie tych procesów na procesor, zarządzanie pamięcią i kilka innych podstawowych zadań Keeping.
Ale większość aplikacji na wysokim poziomie zależy od wielu bibliotek systemowych (takich jak GLIBC, MUSL, KLIBC itp) i wiele zależności od środowiska wykonawczego, takich jak Python lub Węzeł.JS lub Java Runtime. Binarny aplikacji nie ma w sobie wszystkich dostępnych bibliotek, ale po rozpoczęciu wykonywania wywołuje te biblioteki z systemu operacyjnego hosta.
Ponieważ staramy się stworzyć obraz od zera, nie otrzymalibyśmy tych subtelności. Więc nasza aplikacja musi być plik statyczny lub samodzielny wykonywalny.
Zacznijmy od utworzenia folderu o nazwie MyDockerImage i utworzenia pliku Hello.CC w nim.
$ mkdir mydockerimage
$ CD MyDockerImage
$ Touch Hello.CC
Otwórz Hello.CC za pomocą ulubionego edytora tekstu i dodaj następujące wiersze w środku.
#włączaćTo jest prosty program C ++, który drukuje „Hello! Ta wiadomość… "
Z omówionych wcześniej powodów skompilujemy to za pomocą flagi statycznej. Używany kompilator jest G ++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.
Aby skompilować program, w tym samym katalogu Uruchom następujące polecenie:
$ g ++ -o hello -static hello.CCTo tworzy plik wykonywalny wykonywalny „Hello” w tym samym katalogu. To nasz plik statyczny. Przetestuj, czy działa zgodnie z zamierzeniami, wspominając nazwę pliku w terminalu.
$ ./WitamTeraz jesteśmy gotowi do kontenerowania tego prostego programu.
Dockerfile
DockerFile składa się z zestawu reguł, które przyjmują pliki aplikacji (takie jak binarie, pliki źródłowe itp.) Wraz z różnymi parametrami konfiguracyjnymi, takimi jak układ systemu plików, porty narażone itp. I zamienia je w plik obrazu Docker. Następnie możesz udostępnić plik obrazu każdemu, kto chce uruchomić tę aplikację.
Nie będziemy kopać w każdą opcję dostępną dla DockerFile, zamiast tego napiszemy bardzo minimalistyczny plik dokujący. W tym samym katalogu, w którym przebywa Twój Hello Exchutable, utwórz pusty plik o nazwie Dockerfile.
$ Touch Dockerfile
Otwórz go ze swoim ulubionym edytorem tekstu i napisz do niego następujące wiersze:
Od zerazadrapanie nie jest obrazem nadrzędnym. Raczej wskazuje Dockera, że obraz nie jest zbudowany na żadnym innym obrazie. Jest zbudowany od zera. Dodaj polecenie wzięłoby statyczny binarny nazwany Witam
Z bieżącego katalogu i dodaj go do katalogu głównego pliku obrazu. Kiedy w końcu uruchomiliśmy kontener na podstawie tego obrazu, Hello Eklegalność będzie widoczna w samym katalogu głównym pod adresem /Witam.
Wreszcie linia CMD ma ciąg "/Witam" Ten ciąg zostanie wykonany jako polecenie powłoki za każdym razem, gdy pojemnik zostanie utworzony z tego obrazu, a zatem plik binarny, który dodaliśmy do naszego kontenera i wydrukuj wiadomość, którą napisaliśmy w naszej aplikacji.
Zbudujmy obraz, wywołując Docker Build polecenie, które przechodzi przez zawartość DockerFile i wygenerował obraz. Uruchom następujące polecenie w tym samym katalogu, co DockerFile i wykonywalny binarny.
$ Docker Build -Tag Hello .
-Tag Hello flaga ustawia nazwę obrazu na Witam i kropka ( ".”) Na koniec mówi Docker Build Aby spojrzeć na obecny katalog dla DockerFile i powiązanych treści.
Uruchamianie kontenera Docker
Aby sprawdzić, czy obraz, który właśnie utworzyliśmy, pojawia się na liście obrazów, uruchom:
$ Docker Images
Zwróć uwagę, jak mały jest obraz Hello w porównaniu z innymi obrazami. W każdym razie jest gotowy do uruchomienia jako pojemnik,
$ Docker Run Hello
Otóż to! Utworzyłeś od zera swojego pierwszego minimalistycznego pojemnika.
Inne opcje
Podczas tworzenia obrazów od podstaw jest zawsze opcją, ludzie często tworzą obrazy z innych lekkich dystrybucji Linuksa. Na przykład obrazy takie jak Alpine i BusyBox to naprawdę lekkie środowiska z mniejszymi bibliotekami, takimi jak MUSL zamiast GLIBC.
Używanie ich jako obrazu nadrzędnego za pomocą używania „From Alpine: najnowszy” spowodowałby również mniejsze obrazy. Ponieważ obrazy podstawowe mają rozmiar tylko 2-5 MB. Daj nam znać, czy istnieje jakikolwiek temat związany z Docker, który możesz chcieć, abyśmy opisali następne. Możesz skontaktować się z nami na Twitterze, Facebooku lub subskrybować nas za pośrednictwem poczty e -mail.