Ten film wideo zawiera informacje na temat kontenerów, sposobu ich uruchomienia na serwerze z systemem Windows Server oraz celu, w jakim można je wykorzystać. Kontener to izolowane środowisko, w którym można uruchomić aplikację.
Kontener, aplikacja i wszystkie związane z nią zależności są zbudowane z elementów zasobów hosta, takich jak system operacyjny jądra, procesor i pamięć. Są one logicznie oddzielone od innych kontenerów i samego hosta.
Ten schemat ilustruje współistnienie czerwonego i żółtego kontenera w obrębie tego samego hosta przy użyciu tych samych zasobów sprzętowych i systemu operacyjnego jądra, ale w obrębie ich przestrzeni, dzięki czemu mogą uruchamiać swoje aplikacje bez zewnętrznych zakłóceń.
Ten sam sprzęt i system operacyjny zainstalowany na tym sprzęcie mogą uruchamiać własne aplikacje i usługi, niezależnie od tego, co dzieje się w każdym kontenerze.
Domyślnie jest to kontener usuwalny. Po zatrzymaniu wszystkie znajdujące się na nim programy i pliki zostają usunięte. To samo dzieje się przy ponownym uruchomieniu hosta.
Kontenery korzystają również z zapory internetowej komputera hosta. Porównajmy to wszystko z maszyną wirtualną. Po pierwsze, można uruchomić kontener na maszynie wirtualnej, ale nie odwrotnie.
Maszyna wirtualna symuluje cały komputer. Dlatego też musi on korzystać z własnego systemu operacyjnego, który zapewnia większe bezpieczeństwo, ale jednocześnie wymaga większej konfiguracji i konserwacji, co często prowadzi do braku zasobów.
Istnieje wiele sposobów pracy z kontenerami, w tym Visual Studio, Azure, Kubernetes i Windows, ale w tym filmie porozmawiamy o kontenerze Docker.
Docker to produkt typu platforma-jako-usługa, który przejmuje zadanie łączenia aplikacji, wszystkich jej zależności i informacji konfiguracyjnych w jeden pakiet zwany kontenerem.
Platforma Docker może następnie zostać użyta do wysyłki, uruchomienia lub usunięcia tego kontenera. Do tego schematu wrócimy za chwilę. Zobaczmy, jak to działa i poznajmy więcej szczegółów. Tutaj mamy nową instalację systemu Windows Server 2022.
Uruchomię kreatora „Server Manager”, aby dodać opcje „Roles” i „Features”. Zauważmy, że korzystając z tego kreatora, mogę dodać funkcję „Containers”. Nie powoduje to jednak zainstalowania platformy Docker.
Musimy to zrobić oddzielnie. W tym celu anuluję tego kreatora i otworzę program „PowerShell”, aby uruchomić następujący wiersz w celu zainstalowania w pierwszej kolejności wymaganego dostawcy.
Install-Module, "DockerMsftProvider" i korzystamy z "PSGallery" jako źródła. Więc naciskam klawisz Enter. Po wyświetleniu tego monitu odpowiedz „Yes”, aby zainstalować aplikację NuGet, i poczekaj do momentu zakończenia instalacji.
Teraz uruchomię drugi wiersz, aby zainstalować samą platformę Docker. Install-Package, "docker", a następnie określ zainstalowanego wcześniej dostawcę "DockerMsftProvider". Naciśnij klawisz Enter. Po wyświetleniu monitu, który pojawi się za chwilę, odpowiedz „Yes”, aby kontynuować.
Zwróć uwagę na monit o ponowne uruchomienie komputera. Zróbmy to więc, wpisując „Restart-Computer”. Po utworzeniu kopii zapasowej komputera ponownie otworzę kreatora dodawania ról i funkcji w oknie "Server Manager".
Zauważ, że funkcja „Containers” została zainstalowana wcześniej. Zrobiliśmy to za pomocą dwóch wierszy PowerShell, które zostały uruchomione wcześniej. W programie „PowerShell” uruchomienie polecenia, takiego jak „docker”, pozwoli nam zorientować się, co możemy zrobić.
Na przykład wersja dockera poinformuje nas, że korzystamy z silnika w wersji 20.10.9. Kolejne polecenie, „docker info” informuje, że jeszcze nie tworzymy naszego pierwszego kontenera.
W tym polu znajdują się również szczegółowe informacje, takie jak liczba procesorów i ilość pamięci RAM dostępnej dla kontenerów, utworzone typy "Default Isolation Method" i "Network", których w tej chwili nie będziemy omawiać.
Wykonajmy teraz kroki, aby zbudować i uruchomić nasz pierwszy kontener na systemie Windows, w którym właśnie zainstalowaliśmy platformę Docker. Wracając do tego schematu, pamiętajmy, że platforma Docker to narzędzie do pakowania wielu elementów do kontenera. Jeśli więc na przykład mamy umieścić w kontenerze aplikację internetową, musimy umieścić w nim kilka elementów.
Po pierwsze potrzebujemy „Dockerfile”. Ten plik zawiera informacje o konfiguracji i instrukcje potrzebne do utworzenia nowego kontenera. Dockerfile wygląda tak. Może być bardzo złożony lub bardzo prosty.
Za chwilę go utworzymy. Potrzebujemy również obrazu kontenera. Obraz jest jak szablon tylko do odczytu. Kontener można zbudować przy użyciu, na przykład, szablonu "Windows Server Core" lub "Nano Server".
Ten obraz lub szablon zawiera również niektóre zależności, których aplikacja internetowa będzie potrzebować, takie jak usługa „IIS” i struktura programowania. Wreszcie, potrzebujemy samej aplikacji internetowej.
Platforma Docker umożliwia połączenie wszystkich tych elementów w celu utworzenia kontenera. Zobaczmy go w akcji. Wracając do komputera, na którym właśnie zainstalowano środowisko Docker w PowerShell, przełączę się na katalog główny dysku C i utworzę nowy katalog o nazwie "containers".
Przełączę się do nowego katalogu „containers” i aby utworzyć nasz pierwszy kontener, potrzebujemy wcześniej omówionego pliku Dockerfile. Należy pamiętać, że jest to plik tekstowy z zestawem instrukcji dla kontenera.
Zrobię to, wpisując „New-Item” i nazwę „dockerfile”. Zauważ, że ten plik Dockerfile nie ma rozszerzenia. Ten utworzony plik możemy zobaczyć w Eksploratorze Windows. Otworzymy go za pomocą Notatnika.
Aby zachować prostotę pierwszego kontenera, do tego pliku Dockerfile zostaną dodane trzy wiersze. Wyjaśnię je po kolei. Po pierwsze instrukcja „From” informuje platformę Docker, który obraz kontenera zostanie użyty do utworzenia kontenera.
Pamiętaj, że obraz jest jak szablon. W takim przypadku platforma Docker zaleca korzystanie z obrazu z rejestru kontenera firmy Microsoft, który jest oparty na systemie Windows Server Core, a także ma zainstalowaną rolę „IIS”.
Drugi wiersz określa, które polecenia mają być uruchamiane na nowym obrazie kontenera, gdy jest wykonywany. Możemy uwzględnić polecenia instalacji oprogramowania lub tworzenia plików i katalogów.
Jednak w takim przypadku instruujemy platformę Docker, aby uruchomiła PowerShell na uruchomionym kontenerze. Na koniec instrukcja „Copy” kopiuje pliki lub katalogi z komputera hosta do systemu plików kontenera.
W takim przypadku instruujemy platformę Docker, aby skopiowała plik o nazwie "index.html", który zostanie utworzony za chwilę i który służy jako przykładowa aplikacja sieci Web z komputera hosta do tego folderu w kontenerze, który jest domyślną ścieżką katalogu wirtualnego dla IIS.
I to wszystko. Zapiszmy ten plik Dockerfile. Teraz wróćmy do programu PowerShell, aby utworzyć stronę sieci Web, która będzie działać w tym kontenerze. Zrobię to, ponownie używając polecenia „New-Item”, a następnie jako nazwę pliku ustawię „index.html”.
Otworzymy ten plik w Eksploratorze Windows za pomocą Notatnika. Aby zachować prostotę, do przykładowej aplikacji HTML ponownie dodajemy trzy wiersze, po prostu podstawową stronę internetową "Hello World".
Zapiszę to. Teraz mamy wszystkie elementy potrzebne do utworzenia kontenera. Platforma Docker została zainstalowana w tym systemie Windows Server.
Mamy plik Dockerfile, który został utworzony wcześniej z instrukcjami użycia obrazu Server Core z rejestru Microsoft z IIS.
W instrukcjach tego pliku Dockerfile zawarto także instrukcje kopiowania strony HTML do nowego kontenera po jego zbudowaniu. Ale wszystko co mamy to zestaw instrukcji. Nic jeszcze nie działa.
Dlatego wracając do programu PowerShell, w celu utworzenia obrazu w oparciu o te instrukcje, uruchomimy polecenia „docker”, „build”, a następnie zostanie przypisana nazwa lub tag „webserver”.
Końcowa kropka na końcu wskazuje, że będziemy pracować nad katalogiem containers, w którym znajduje się plik Dockerfile i strona internetowa "index.html". Naciskam klawisz Enter.
Ten wiersz tworzy obraz bazowy, z którego zostaną utworzone nasze kontenery, korzystając z instrukcji określonych w tym pliku Dockerfile. Ponieważ ten obraz jest wywoływany po raz pierwszy na tym serwerze, musi zostać pobrany z rejestru kontenera firmy Microsoft.
Po zakończeniu tego wszystkiego uruchomienie polecenia, takiego jak docker images, spowoduje wyświetlenie ostatnio pobranego obrazu wraz z nazwą lub tagiem, który do niego przypisaliśmy. Mamy więc teraz obraz kontenera, który jest jak szablon, pamiętaj. Ale nie ma jeszcze uruchomionych kontenerów.
Aby pokazać, że nie można jeszcze uzyskać dostępu do naszej przykładowej aplikacji internetowej, otworzę przeglądarkę internetową i wpiszę "localhost". Zgodnie z oczekiwaniami nie udaje się to, ponieważ host nie dysponuje IIS i nie może udostępniać strony sieci Web.
Aby ostatecznie uruchomić kontener przy użyciu pobranego szablonu obrazu, w PowerShell wpisz „docker run”, a następnie określ nazwę tego kontenera.
Będziemy używać nazwy „container1”. Ten przełącznik będzie używany do wskazania, czy kontener będzie działać w tle. A ten drugi do wskazania, że "port 80" w kontenerze będzie zmapowany do "portu 80" na hoście. Ponadto ustalamy, że ten kontener powinien być wykonywany przy użyciu obrazu serwera sieci Web, który został pobrany i utworzony wcześniej.
A więc po prostu naciskam Enter. To wszystko. Spowoduje to utworzenie i uruchomienie kontenera o nazwie „container1” na podstawie obrazu serwera sieci Web, który właśnie przygotowaliśmy.
Zauważcie, że nie musieliśmy przypisywać żadnej pamięci do tego kontenera. Ani procesorów lub wirtualnych dysków twardych do tego kontenera, jak ma to miejsce w przypadku maszyn wirtualnych.
Wynika to z faktu, że przydzielenie tych zasobów do kontenera nie jest konieczne. Po prostu używają tego, czego potrzebują. Wróćmy do przeglądarki i ponownie wprowadźmy „localhost”.
Widzimy, że nasza przykładowa aplikacja internetowa jest już dostępna. Nie na hoście. Zamiast tego host przekazuje port 80 do kontenera, który został utworzony przy użyciu ustawień określonych na obrazie serwera sieci Web; do tej strony skopiowano naszą stronę HTML zgodnie z instrukcjami w pliku Dockerfile.
Możemy wejść w interakcję z tym nowo utworzonym kontenerem za pośrednictwem wiersza polecenia. Na przykład: otworzę nowe okno PowerShell i wprowadzimy polecenie „docker exec -ti”, aby określić, że będziemy łączyć się interaktywnie z tym kontenerem.
Nazwa kontenera, „container1”, a następnie „powershell”. To polecenie Docker otwiera PowerShell we właśnie utworzonym kontenerze container1 i wyświetla monit.
W takim przypadku, jeśli na przykład wpiszemy nazwę hosta „hostname”, możemy zobaczyć, że ten kontener ma przypisaną nazwę komputera. Wpisanie polecenia, takiego jak "ipconfig" spowoduje wyświetlenie, że do tego kontenera został przypisany adres IP, który używa translacji adresów sieciowych do komunikacji z hostem i poza nim.
Dokonam niewielkiej zmiany we wcześniej utworzonej stronie HTML. Edytuj ją w Notatniku i zmień ten nagłówek, aby odczytać „container #2” zamiast „container #1”. Zapisz plik. Powróćmy do PowerShell; użyję tych samych dwóch wierszy, których wcześniej użyliśmy do utworzenia i uruchomienia naszego pierwszego kontenera.
Po pierwsze wiersz „docker build” pozostaje bez zmian. Zauważmy, że po naciśnięciu klawisza Enter program wykonuje to natychmiast. Wynika to z faktu, że pobraliśmy już obraz server core z rolą IIS zainstalowaną z poziomu rejestru kontenera Microsoft.
Drugi wiersz, czyli wiersz „docker run”; edytujemy go w celu utworzenia nowego kontenera o nazwie „container2”, a kontener będzie nasłuchiwać „portu 8080” zamiast „portu 80”, który jest przypisany do kontenera „container1”.
Naciśniemy „Enter”, a po zakończeniu, z powrotem w przeglądarce, wrócę do „localhost”, ale tym razem ustawię „port 8080”. Widać, że strona internetowa nasłuchująca na porcie 8080 jest obsługiwana przez kontener "container #2", który właśnie utworzyliśmy. Podczas gdy ta nasłuchująca na porcie 80, domyślny protokół HTTP jest obsługiwany przez kontener "container #1".
To samo widać w PowerShell, uruchamiając „docker ps”. Kontener #1 nasłuchuje na porcie 80, a "container #2" nasłuchuje na porcie 8080. Kontenery #1 i "container #2" mają własną nazwę hosta, adresy IP i hostują własne witryny internetowe.
Wszelkie zmiany wprowadzone w kontenerze „container #1” nie mają wpływu na kontener „container #2”. Zauważmy, że mogliśmy to wszystko zrobić bez instalowania roli "IIS" lub roli "hyper v" na serwerze hosta.
Nie musieliśmy również przydzielać zasobów, takich jak pamięć RAM, procesor, wirtualne dyski twarde ani konfigurować sieci. Gdy obraz szablonu bazowego jest lokalny, utworzenie kontenera zajmuje nie więcej niż dwie trzy sekundy.
Na koniec pokrótce porozmawiamy o tym, co można uruchomić w kontenerze. Po pierwsze kontenery w systemach Windows były po raz pierwszy obsługiwane w systemach Windows Server 2016 i Windows 10. Dlatego najlepiej jest, aby obsługiwana aplikacja była zgodna z tymi systemami operacyjnymi i nowszymi.
Jeśli aplikacja wymaga graficznego interfejsu użytkownika lub sterowników, nie można jej wdrożyć w kontenerze. Można jednak używać kontenera do hostowania struktur aplikacji, takich jak "Asp.net" lub "Apache", języków programowania, takich jak "Python", nawet baz danych w postaci usług takich jak sqlserver-express, "mongodb" lub "mysql".
Obecnie nie jest obsługiwane hostowanie ról infrastruktury systemu Windows, takich jak "domain controller", "DNS" lub "DHCP" na kontenerach, ale kto wie, co może się stać w przyszłości.
W ten sposób szybko wyczerpaliśmy temat: czym są kontenery, w jaki sposób uruchamiać je w systemie Windows Server i do czego można je wykorzystać? Mam nadzieję, że te informacje okażą się przydatne i bardzo dziękuję za obejrzenie.