Jak wchodzić w interakcje z kontenerami Docker

Jak wchodzić w interakcje z kontenerami Docker

W tym artykule rozszerza poprzedni artykuł Docker i pokazuje, jak wchodzić w interakcje z kontenerami Docker, wykonując polecenia wewnętrzne, instalując oprogramowanie wewnątrz kontenerów, sprawdzanie statusu kontenera, dostęp do kontenerów za pomocą BASH, utrzymując się w obrazach i usuwając nieużywane pojemniki i obrazy.

W tym samouczku nauczysz się:

  • Jak wykonywać polecenia wewnątrz kontenerów
  • Jak instalować oprogramowanie w kontenerach
  • Jak sprawdzić status kontenera
  • Jak uzyskać dostęp do kontenerów za pomocą bash
  • Jak przetrwać zmiany w obrazach
  • Jak usunąć nieużywane pojemniki i obrazy
Zainstalowany PHP.

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Dowolny rozkład Linuksa
Oprogramowanie Doker
Inny Uprzywilejowany dostęp do systemu Linux jako root lub za pośrednictwem sudo Komenda.
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

Jak wchodzić w interakcje z kontenerami Docker

W pierwszym artykule z tej serii nauczyłeś się koncepcji Docker i niektórych podstawowych poleceń i zobaczyłeś, jak łatwo uruchomić oprogramowanie w przedziałowy sposób, bez dotykania konfiguracji systemu operacyjnego hosta. Zejdźmy teraz głębiej, wchodząc do bieżącego pojemnika i wykonując niektóre polecenia.



Wykonanie poleceń wewnątrz działającego pojemnika

W poprzednim artykule założyłeś kontener Apache. Podstawowy obraz nie miał zainstalowanego PHP, więc był w stanie obsługiwać statyczne strony HTML. Uzyskajmy na nim kontener z Apache i PHP. Jeśli się zastanawiasz, istnieją obrazy gotowe do użycia zarówno z zainstalowanym Apache, jak i PHP, i można je znaleźć w Docker Hub. Robimy to tylko po to, aby pokazać, w jaki sposób można dostosować obraz do twoich potrzeb.

Zacznijmy więc instancję Debian przy użyciu podobnego wiersza poleceń poprzedniego artykułu, ale z dwiema różnicami: nadajmy mu nazwę (--Nazwij debian_container), abyśmy mogli odwołać się do tego później i przydzielić terminal do uruchomienia (-To).

$ Docker Run -it --Name debian_container -d -p 8000: 80 -v "$ pwd":/var/www/html debian 

Możemy wchodzić w interakcje z działającym kontenerem Docker. Wcześniej powiedziano Ci, że kontenery mają to samo jądro, co system operacyjny hosta. Sprawdźmy.

$ Docker Exec debian_container uname -a 

Komenda Docker Exec powyżej wykonuje podane polecenie wewnątrz kontenera i pokaż jego dane wyjściowe.

Wszystkie polecenia Docker mają powiązaną pomoc, dlatego możemy zobaczyć opcje Docker Exec akceptuje:

$ Docker Exec -Help 

Teraz możesz bawić się innymi poleceniami:

$ Docker Exec debian_container ls -l $ Docker Exec debian_container pwd $ Docker Exec debian_container Whonami $ Docker Exec debian_container cat /etc /emisja 
Kopiuj

W tym ostatnim poleceniu dowiedzieliśmy się, że kontener działa Debian 9, pomimo systemu operacyjnego twojego komputera. Jak wspomniano wcześniej, system operacyjny hosta i kontener dzielą tylko jądro.

Jeśli próbowałeś, ale nie mogłeś wykonać polecenia wewnątrz pojemnika, prawdopodobnie go nie ma. Obraz (jak wszystkie inne obrazy) jest zbudowany z minimalnej konfiguracji Debiana, więc należy zainstalować każde dodatkowe narzędzie. Osiąga dwa cele: mniejszy rozmiar dysku i ulepszone bezpieczeństwo, ponieważ mniej oprogramowania oznacza mniej błędów do wykorzystania.

Teraz wejdźmy do pojemnika.

$ Docker Exec -it Debian Bash root@b5c694a02248:/usr/local/apache2# 
Kopiuj

Zauważ, że monit zmienił się, a teraz jesteś użytkownikiem źródło wewnątrz pojemnika (B5C694A02248 to nazwa hosta wewnątrz pojemnika) wewnątrz skorupy bash.



Instalowanie oprogramowania w kontenerze

Mamy teraz powłokę w pojemniku z użytkownikiem źródło. Ponieważ jest to przycięta wersja Debiana, nie ma nawet poleceń szczyt I Ps. Zamontujmy je.

# apt aktualizacja # apt instal procps 
Kopiuj

Możesz zobaczyć, co działa szczyt I Ps -ef.

root@f5b423465e03:/# ps -ef uid pid pPid c Stime Tty Time cmd root 1 0 0 19:46 pkt/0 00:00:00 korzeń bash 42 0 0 19:49 Pts/1 00:00:00 Bash Root 310 42 0 19:53 PTS/1 00:00:00 ps -ef root@f5b423465e03:/# 
Kopiuj

Tak, jest oszczędny. Kontenery Docker zwykle mają bezwzględną minimalną liczbę procesów wykonujących. Aby zostawić powłokę i powrócić do systemu operacyjnego hosta, po prostu wyjdź z bash (typ Wyjście Lub Ctrl+d).

Zauważ, że wiele plików zostało pobranych przez aktualizacja apt I apt Instal. Wszystkie istnieją na dysku działającego pojemnika. Nadal istnieją, jeśli pojemnik zostanie zatrzymany i zaczął ponownie (Docker Stop Debian_Container; Docker Start Debian_Container). Ale nie istnieją na obrazie. Oznacza to, że jeśli usuniesz ten pojemnik (Docker RM debian_container) i uruchom nowy kontener, musisz zainstalować pakiet Procps Ponownie. Ponadto, jeśli zaczniesz obraz Debiana w innym hoście, będziesz musiał również zainstalować Procps Ponownie. Zobaczymy później, jak przetrwać obraz z modyfikacjami dysku, więc następnym razem, gdy uruchomisz kontener, całe oprogramowanie zostanie zainstalowane.

Teraz poprośmy Apache i PHP. Poniższe polecenie zajmie dużo czasu i pobranie i zainstaluje wszystkie pakiety zależności, w tym Apache i PHP - zajmie to kilka minut. Ostatecznie rozpocznij apache i uzyskaj dostęp do LocalHost w porcie 8000 w przeglądarce internetowej (http: // localhost: 8000). Zobaczysz domyślną stronę Debiana dla Apache.

# apt Zainstaluj libapache2-mod-php # serwis apache2 start 
Kopiuj

Domyślna strona Apache Debian.

Teraz potwierdźmy, że PHP tam jest. Możesz albo pójść /var/ww/html Wewnątrz pojemnika lub wyjdź z powłoki kontenera i wpisz z bieżącego katalogu w systemie operacyjnym hosta (pamiętaj, że zmapowaliśmy bieżący katalog na /var/www/html wewnątrz pojemnika?)

$ echo "> phpinfo.php 

I voilà (http: // localhost: 8000/phpinfo.php).

Informacje PHP.

Zobowiązanie się do obrazu

Jak wspomniano wcześniej, zmiany wprowadzone w pojemniku utrzymują się, dopóki kontener będzie się utrzymywał, a pojemniki powinny być efemeryczne - są one zniszczone. Trwałe modyfikacje należy wprowadzać w obrazy.

Następny artykuł pokaże, jak utworzyć niestandardowy obraz w elegancki (i zdecydowanie zalecany) sposób, używając pliku dokera. Na razie nauczysz się hacka, który może być pomocny w określonych sytuacjach, w których nie jest możliwe lub pożądane napisanie pliku dokera. Rozszerzanie obrazów o plik Docker, jeśli jest preferowany, ponieważ można go łatwo edytować podczas popełnienia stanu kontenera do nowego obrazu, nie pozostawia śladu wprowadzonych zmian.

Komenda Docker zatem ma dwa parametry: Nazwa kontenera I Nowa nazwa obrazu i utworzy nowy obraz na pamięci podręcznej obrazów lokalnych na podstawie kontenera. W poleceniu poniżej, debian_container to nazwa kontenera i Debian-apache-php to nowa nazwa obrazu.

$ Docker Commit Debian_Container Debian-Apache-Php SHA256: 3F01C0C71539C4DC6DFD7483FF68C41143B7E9AB52DE4A9892C8CC136EDA236 
Kopiuj

Wymień obrazy w pamięci podręcznej hosta.

$ Docker Id Id Identyfikator znacznika obrazu utworzony rozmiar debian-apache-php najnowsze 3F01C0C71539 10 minut temu 235 MB Ostatnie BE2868BABA 11 dni temu 101 MB 
Kopiuj

Zauważ, że w twoim hoście jest nowy obraz. Jedną interesującą cechą zarządzania obrazem i kontenerów jest to, że Docker będzie przechowywać tylko różnicę stanu dysku między bieżącym obrazem a obrazem, na którym opiera się, więc nie tracono zbędnego miejsca na dysku. W tym celu Docker używa warstwowego systemu plików, który wykorzystuje podejście kopiowania na zapisie: po tworzeniu nowego kontenera dziedziczy ten sam dysk obrazu i, ponieważ modyfikacje są wprowadzane do plików, są zapisane w nowej warstwie.



Sprawdzanie pojemników

Docker utrzymuje wiele informacji o obiektach Docker. Komenda Docker Inspect służy do ich oglądania.

$ Docker Inspect Debian_Container 

Polecenie odzyska obiekt JSON z dziesiątkami wierszy opisujący status kontenera: identyfikator kontenera, data utworzona, stan, obraz, ścieżka dziennika, porty, objętości, sieci itp.

Przycinanie pojemników i obrazów

Po zabawy z pojemnikami i obrazami, dysk gospodarza ostatecznie wypełni opuszczone byty, które należy wyczyścić, abyś mógł odzyskać miejsce na dysku.

Komenda Puna kontenera dockera usunie wszystkie zatrzymane pojemniki. Uważaj: po usunięciu pojemnika każdy powiązany stan zostanie utracony. Wcześniej dokonaj kopii zapasowej lub zmian na obraz.

Komenda Docker Image Pune usunie wszystkie nieużywane obrazy. Nie zbudowaliśmy jeszcze obrazów, ale to polecenie będzie przydatne w następnym artykule.

Wniosek

W tym artykule nauczyłeś się, jak wchodzić w interakcje z kontenerami i jak popełniać zmiany w obrazach, chociaż takie podejście nie jest zalecane.

W następnym artykule utworzysz własne obrazy z DockerFile, zalecanym sposobem dostosowania obrazów Docker.

Więcej w tej serii artykułów Docker

  • Praktyczne wprowadzenie do kontenerów Docker
  • Jak dostosowywać obrazy Docker za pomocą DockerFiles

Powiązane samouczki Linux:

  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Mastering Bash Script Loops
  • Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na…
  • Linux Apache Nie wykonywanie plików PHP: Rozwiązanie
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Instalacja OpenLitespeed WordPress
  • Jak zainstalować PHP na Ubuntu Linux
  • Instalacja Ampache Raspberry Pi