Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na Ubuntu 20.04
 
                - 1743
- 127
- Tomasz Szatkowski
Stos lampy
Lampa to stos oprogramowania, na którym prawdopodobnie działa większość stron internetowych. Linux reprezentuje podstawę stosu, a tradycyjna implementacja obejmuje Apache jako serwer WWW, bazę danych MySQL i PHP jako język programowania po stronie serwera. Istnieje jednak wiele możliwych odmian: na przykład Mariadb jest często używany zamiast MySQL, z których jest widelcem i innymi językami programowania, ponieważ można używać Python lub Perl zamiast PHP. W tym artykule zobaczymy, jak zaimplementować podstawowy stos lamp za pomocą Docker i narzędzia kompozycji Docker.
W tym samouczku nauczysz się:
- Jak zainstalować Docker i Docker-Compose na Ubuntu 20.04
- Jak zdefiniować usługi i objętości za pomocą kompozycji Docker
- Jak mapować porty hosta na porty kontenerowe w pliku konfiguracyjnym Docker-Compose
- Jak używać mocowania wiązania i nazywanych objętości
- Jak zbudować projekt z kompozycją dokera
 Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na Ubuntu 20.04
 Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na Ubuntu 20.04    Zastosowane wymagania i konwencje oprogramowania
| Kategoria | Wymagania, konwencje lub wersja oprogramowania | 
|---|---|
| System | Zainstalowany Ubuntu 20.04 lub zaktualizowane Ubuntu do 20.04 Focal Fossa | 
| Oprogramowanie | Docker, kompozycja Docker | 
| Inny | Korzenie uprawnienia do budowy kontenerów Docker i uruchomienia usługi Docker | 
| Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudoKomenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny | 
-  Instalowanie pakietów i uruchomienie usługi DockerAby utworzyć stos lampy na bazie dokera na Ubuntu 20.04 Focal Fossa, pierwszą rzeczą, którą musimy zrobić, jest zainstalowanie potrzebnego oprogramowania: dokersam iKompozycja dokera, który jest narzędziem, który pozwala nam łatwo zorganizować aplikacje wielu kontaktów za pomocąYamlpliki konfiguracyjne. Oba pakiety są dostępne w oficjalnych repozytoriach Ubuntu. Możemy je zainstalować za pośrednictwemtrafny:$ sudo apt instal instaluj Docker-Compose Po wykonaniu instalacji musimy rozpocząć dokerserwis i włącz go w rozruchu. Możemy wykonywać obie operacje za pomocą jednego polecenia:$ Systemctl Enable -teraz doker 
-  Konfiguracja projektuPierwszy krok w naszej podróży polega na stworzeniu katalogu, którego wykorzystamy jako źródło naszego projektu. Ze względu na ten artykuł nazwiemy to Linuxconfig. W tym katalogu stworzymy inny,DocumentRoot, które będą hostować nasze pliki witryny. Możemy stworzyć oba katalogi jednocześnie za pomocą-PopcjaMkdirKomenda:$ mkdir -p Linuxconfig/DocumentRoot 
 
 W środku Linuxconfigkatalog definiujemy konfigurację Docker-Compose dla naszego projektu w pliku YAML, który domyślnie należy wywołaćKompozycja dokera.yml. Istnieją trzy główne zwrotki, których możemy użyć w pliku konfiguracyjnym: usługi, wolumeny I Sieci.Każda sekcja służy do skonfigurowania odpowiedniego aspektu projektu. W tym samouczku użyjemy tylko dwóch pierwszych. Wdrożymy komponenty stosu lampy jako usługi we własnych oddzielnych kontenerach. Kontenery utworzone za pomocą Docker-Compose będą członkami tej samej sieci i dlatego będą mogli domyślnie rozmawiać ze sobą. W sieci każdy kontener będzie mógł odwoływać się do innych według nazwy hosta identycznej z ich nazwą lub nazwa używana do zdefiniowania usługi zaimplementowanej przez kontener. Domyślnie kontenery zostaną nazwane przy użyciu nazwy katalogu zawierającego plik konfiguracyjny jako prefiks. W takim przypadku na przykład kontener używany do usługi nazywanej php-httpd, zostanie nazwany Linuxconfig_php-httpd_1. 
-  Definiowanie usługi PHP + HTTPDPierwsza usługa, którą zdefiniujemy w pliku konfiguracyjnym, będzie zawierać Php Jako moduł serwera WWW Apache. Użyjemy jednego z oficjalnych obrazów PHP dostępnych Dockerhub jako podstawa naszego pojemnika, w szczególności ta z -ApacheSufiks, który zapewnia konfigurację, o której wspomnialiśmy powyżej. Zacznijmy pisać naszą konfigurację:
 KopiujWersja: „3.7 'Usługi: PHP-HTTPD: Zdjęcie: PHP: 7.3 -apache porty: - 80:80 Wolume: - "./DocumentRoot:/var/www/html "Pierwszą rzeczą, którą określliśmy w pliku konfiguracyjnym, jest to wersja. Z tą instrukcją oświadczamy, jakiej konkretnej wersji pliku kompozycji będziemy używać. W momencie pisania wersja3.7jest najnowszym i zalecanym.
- Po ogłoszeniu wersji pliku komponowania zaczęliśmy pisać praca zwrotka; W środku definiujemy usługi, które będą komponować nasz stos lampy. Zadzwoniliśmy do pierwszej usługi php-httpd. Nazwa usługi jest całkowicie arbitralna, ale zawsze jest dobrym nawykiem używania tego, który ma znaczenie w kontekście projektu.obrazInstrukcja służy do określenia, na którym obrazie pojemnik powinien być oparty w tym przypadkuPHP: 7.3-Apache.portyInstrukcja służy do ujawnienia portów na kontenerze i do utworzenia mapy między portami hosta a portami kontenerowymi. Taka mapa jest zdefiniowana przez oddzielenie portów:. Po lewej stronie określamy port hosta, a po prawej stronie port wewnątrz pojemnika powinien być odwzorowany. W tym przypadku zmapowaliśmy port80na hosta do portu80na kontenerze, ponieważ jest to domyślny port używany przez serwer WWW Apache.Ostatnią instrukcją, której użyliśmy wolumeny: Dzięki nim możemy określić mapowanie między Nazwany tom lub ścieżka (względny lub bezwzględny) w systemie hosta do ścieżki na pojemniku, na którym zostanie zamontowany.W naszej konfiguracji ./DocumentRootkatalog będzie hostował pliki witryny: zostanie zamontowany na/var/www/htmlkatalog wewnątrz kontenera, ponieważ ten ostatni jest głównym dokumentem używanym przez domyślny APACHE VirtualHost. Taka konfiguracja nazywa się Mocować i jest szczególnie przydatne podczas rozwoju, ponieważ zmiany wprowadzane w plikach projektu są natychmiast odzwierciedlone w kontenerze. Minusem tej konfiguracji jest to, że ustanawia zależność między kontenerem a strukturą pliku maszyny hosta, zmniejszając jedną z głównych zalet korzystania z Docker: Portability.Katalog, który ma być zamontowany wewnątrz pojemnika, zostanie utworzony automatycznie, jeśli nie istnieje, gdy Komposowanie dokeraPolecenie jest uruchamiane: w takim przypadku będzie własnością root, jeśli nie zostanie określony inaczej.W środku DocumentRootKatalog możemy teraz utworzyć plik indeksu i spróbować zbudować nasz projekt, aby sprawdzić, czy konfiguracja działa:$ echo "DocumentRoot/index.php $ sudo -compose -compose -d Po wykonaniu polecenia potrzebne obrazy Docker zostaną pobrane z DockerHub, a kontenery zostaną utworzone z ustawieniami, które dostarczone i uruchomione w tle (nie będą blokować terminala), z powodu zysku z powodu -Dopcja, którą podaliśmy doKompozycja dokeraKomenda. Wraz z uruchomieniem projektu, jeśli przejdziemy doLokalny GospodarzDzięki naszej przeglądarce powinniśmy zobaczyć następną stronę: 
 Strona phpinfoAby zatrzymać projekt, z katalogu hostującego Kompozycja dokera.ymlPlik, możemy uruchomić:$ sudo doker-kompose Definiowanie usługi MariaDBIstotną częścią stosu lampy jest warstwa bazy danych. W naszej konfiguracji będziemy używać Mariadb oraz jego oficjalny obraz Docker dostępny w Dockerhub: 
 KopiujWersja: „3.7 'Usługi: PHP-HTTPD: Zdjęcie: PHP: 7.3 -apache porty: - 80:80 Wolume: - "./DocumentRoot:/var/www/html "mariadb: obraz: mariadb: 10.5.2 tomy: - mariadb -volume:/var/lib/mysql środowisko: tz: „Europe/rome” mysql_allow_Empty_Password: „Nie” MySQL_ROOT_PASSWORD: „rootpwd” Mysql_user: „TestUser” MySQl_Password: „TestPassword” MySQL_DABase: „TestdB” mariadb-volume:
 
 W środku usługi Stanza, zdefiniowaliśmy inną usługę i nazywamy ją MariadbI zobrazInstrukcja, którą określiliśmy, chcemy użyć10.5.2Wersja oficjalnego obrazu.W poprzedniej definicji usługi użyliśmy montażu wiązania. Tym razem użyliśmy odpowiedniego dokera Nazwany tom, do zamontowania /var/lib/mysqlWewnątrz kontenera (jest to domyślny katalog danych używany przez MariaDB). W przeciwieństwie do montażu wiązania, nazywane objętości nie tworzą zależności kontenera od struktury systemu plików hosta. Całkowicie zarządzane przez Dockera, są to zalecana metoda utrzymywania danych, które w innym przypadku zostałyby utracone po zniszczeniu kontenerów.Nazwane tomy można zdefiniować w głównej wolumenyzwrotka pliku konfiguracyjnego i można ją odwoływać zwolumenyPodsekcja każdego zdefiniowanych usług. W tym przypadku nazywaliśmy nasz tomMariadb-Volume.Jako następny krok zdefiniowaliśmy wartość niektórych Zmienne środowiska używane do wpływu na zachowanie pojemnika. Zmienne środowiskowe są zdefiniowane w środowiskoSekcja definicji usługi. Zmienne, które zdefiniowaliśmy w tym przypadku, mają następujący efekt:Zmienny Efekt Tz Ustaw stref czasu używany przez serwer MariaDB Mysql_allow_Empty_Password Włącz lub wyłącz użycie pustego hasła dla użytkownika DB Root Mysql_root_password Jest to zmienna obowiązkowa i służy do ustawienia hasła użytkownika DB root Mysql_Database Opcjonalnie używane do określenia nazwy bazy danych, która ma zostać utworzona na uruchomieniu obrazu Mysql_user Opcjonalnie używany do określenia nazwy użytkownika, który zostanie utworzony za pomocą uprawnień SuperUser dla bazy danych określonej w MySQL_DATABase Mysql_password Używane do określenia hasła dla użytkownika utworzonego z nazwą podaną przez MySQL_User W tym momencie powinniśmy mieć działający serwer WWW w stanie pracować z PHP i bazę danych do przechowywania naszych danych. Bonus - phpMyAdminNasz podstawowy stos lamp powinien być teraz kompletny. Jako bonus, możemy chcieć dodać phpMyAdmin Do tego, aby łatwo kontrolować naszą bazę danych MariaDB z przyjaznego dla użytkownika interfejsu internetowego. Dodajmy powiązaną definicję usługi do naszej konfiguracji kompozycji Docker: 
 KopiujWersja: „3.7 'Usługi: PHP-HTTPD: Zdjęcie: PHP: 7.3 -apache porty: - 80:80 Wolume: - "./DocumentRoot:/var/www/html "mariadb: obraz: mariadb: 10.5.2 tomy: - mariadb -volume:/var/lib/mysql środowisko: tz: „Europe/rome” mysql_allow_Empty_Password: „nie” mysql_root_password: "rootpwd" mysql_user: 'testuser' mysql_password: "TestPassword" mysql_databe: "TestdB" phpm. Zdjęcie: PhpMyAdmin/PhpMyAdmin Links: - „MARIADB: DB” Porty: - 8081: 80 tomów: MariaDB -Volume:Nazwaliśmy naszą usługę phpMyAdmini skonfigurował go do użycia phpmyadmin/phpMyAdmin Zdjęcie z Dockerhub. Użyliśmy równieżspinki do mankietówSłowo kluczowe po raz pierwszy; po co to? Jak już wiemy, domyślnie i bez potrzebnych specjalnych konfiguracji, wszystkie kontenery utworzone w tej samej konfiguracji kompozycji dokera są w stanie ze sobą rozmawiać. Obraz phpMyAdmin jest skonfigurowany do odwołania się do działającego kontenera bazy danych przezdbNazwa, dlatego musimy utworzyć alias o tej samej nazwie dla naszej usługi MariaDB. To jest dokładnie to, cospinki do mankietówjest używany do: definiowania dodatkowych aliasów, aby dotrzeć do usługi od innego.Wewnątrz definicji usługi zmapowaliśmy również port 8081naszego komputera hosta, do portu80Wewnątrz pojemnika (port 80 jest już odwzorowany na ten sam port wewnątrz pojemnika PHP-HTTPD). Interfejs phpMyAdmin będzie zatem osiągalny w Localhost: 8081 adres. Odbudujmy nasz projekt i zweryfijmy go:$ sudo Docker -Compose up -d -build  
 Strona logowania phpMyAdminMożemy zalogować się z poświadczeniami, które zdefiniowaliśmy dla naszej usługi bazy danych i sprawdzić, czy testdbBaza danych została utworzona: 
 Strona główna PhpMyAdmin
 
 Korzystanie z niestandardowego obrazu dla usługiW powyższych przykładach zawsze używaliśmy obrazów waniliowych w definicji naszych usług. Są przypadki, w których możemy chcieć użyć niestandardowych obrazów Docker na podstawie nich. Na przykład, powiedzmy, że chcemy zbudować usługę PHP-HTTPD, ale dołączyć dodatkowe rozszerzenie PHP: jak możemy to zrobić? Na podstawie projektu definiujemy nowy katalog i dla wygody nazwij go po usłudze: $ mkdir php-httpd W tym katalogu tworzymy plik Docker, używany do rozszerzenia obrazu podstawowego z następującą zawartością: Od PHP: 7.3-APache etykieta heeninger = "[email protected] "Uruchom aktualiza.0.2 \ && Docker-Php-ext-ext-Enable-Enable McRypt Z powrotem w naszym Kompozycja dokera.ymlplik, modyfikujemy definicjęphp-httpdpraca. Nie możemy bezpośrednio odwoływać się do obrazu, tak jak wcześniej. Zamiast tego określamy katalog zawierający nasz niestandardowy plik Docker jako kontekst kompilacji:
 KopiujWersja: „3.7 'Usługi: PHP-HTTPD: Build: Kontekst: ./PHP -HTTPD porty: - 80:80 Wolume: - "./DocumentRoot:/var/www/html "[…]w zbudowaćSekcja definiujemy konfiguracje stosowane w czasie budowy. W takim przypadku użyliśmykontekstAby odwoływać się do katalogu zawierającego DockerFile: Wspomniany katalog jest używany jako kontekst kompilacji, a jego treść jest wysyłana do demona Docker po budowie kontenera. Aby zastosować modyfikację, musimy ponownie zbudować projekt.Nawiasem mówiąc, aby dowiedzieć się więcej o dodatkowych rozszerzeniach na obrazie Docker PHP, możesz rzucić okiem na oficjalną dokumentację, a konkretnie Rozszerzenia PECL Sekcja. WnioskiW tym samouczku widzieliśmy, jak zbudować podstawowy stos lampy za pomocą technologii kontenera z Dockerem i kompozycją. Widzieliśmy, jak zdefiniować różne usługi w kompozycie dokera.Plik konfiguracyjny YML i sposób konfigurowania mocowań powiązanych, o nazwie głośności i mapowania portów hosta-container. Widzieliśmy również, jak korzystać z niestandardowych obrazów. Możesz spojrzeć na referencję Docker-Compose, aby uzyskać szczegółową listę instrukcji, które można użyć w pliku konfiguracyjnym Docker-Compose. 
Powiązane samouczki Linux:
- Ubuntu 20.04 WordPress z instalacją Apache
- Rzeczy do zainstalowania na Ubuntu 20.04
- Instalacja Ampache Raspberry Pi
- Instalacja OpenLitespeed WordPress
- Jak pracować z WooCommerce Rest API z Pythonem
- Jak zainstalować stos lampy na Almalinux
- Jak skonfigurować Linux Apache MySQL Python Server
- Ubuntu 20.04: WordPress z instalacją Nginx
- Jak zmienić hasło użytkownika mariadb
- Zainstaluj MySQL na Ubuntu 20.04 LTS Linux
 
                    