Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na Ubuntu 20.04
- 1708
- 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
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ą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
-
Instalowanie pakietów i uruchomienie usługi Docker
Aby utworzyć stos lampy na bazie dokera na Ubuntu 20.04 Focal Fossa, pierwszą rzeczą, którą musimy zrobić, jest zainstalowanie potrzebnego oprogramowania:
doker
sam iKompozycja dokera
, który jest narzędziem, który pozwala nam łatwo zorganizować aplikacje wielu kontaktów za pomocąYaml
pliki 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ąć
doker
serwis i włącz go w rozruchu. Możemy wykonywać obie operacje za pomocą jednego polecenia:$ Systemctl Enable -teraz doker
-
Konfiguracja projektu
Pierwszy 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ą-P
opcjaMkdir
Komenda:$ mkdir -p Linuxconfig/DocumentRoot
W środku
Linuxconfig
katalog 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 + HTTPD
Pierwsza 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
-Apache
Sufiks, 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.7
jest 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.obraz
Instrukcja służy do określenia, na którym obrazie pojemnik powinien być oparty w tym przypadkuPHP: 7.3-Apache
.porty
Instrukcja 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 port80
na hosta do portu80
na 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
./DocumentRoot
katalog będzie hostował pliki witryny: zostanie zamontowany na/var/www/html
katalog 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 dokera
Polecenie jest uruchamiane: w takim przypadku będzie własnością root, jeśli nie zostanie określony inaczej.W środku
DocumentRoot
Katalog 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
-D
opcja, którą podaliśmy doKompozycja dokera
Komenda. Wraz z uruchomieniem projektu, jeśli przejdziemy doLokalny Gospodarz
Dzięki naszej przeglądarce powinniśmy zobaczyć następną stronę:
Strona phpinfoAby zatrzymać projekt, z katalogu hostującego
Kompozycja dokera.yml
Plik, możemy uruchomić:$ sudo doker-kompose
Definiowanie usługi MariaDB
Istotną 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ą
Mariadb
I zobraz
Instrukcja, którą określiliśmy, chcemy użyć10.5.2
Wersja 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/mysql
Wewną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
wolumeny
zwrotka pliku konfiguracyjnego i można ją odwoływać zwolumeny
Podsekcja 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
środowisko
Sekcja 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 - phpMyAdmin
Nasz 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ę
phpMyAdmin
i skonfigurował go do użycia phpmyadmin/phpMyAdmin Zdjęcie z Dockerhub. Użyliśmy równieżspinki do mankietów
Sł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 przezdb
Nazwa, dlatego musimy utworzyć alias o tej samej nazwie dla naszej usługi MariaDB. To jest dokładnie to, cospinki do mankietów
jest używany do: definiowania dodatkowych aliasów, aby dotrzeć do usługi od innego.Wewnątrz definicji usługi zmapowaliśmy również port
8081
naszego komputera hosta, do portu80
Wewną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
testdb
Baza danych została utworzona:
Strona główna PhpMyAdmin
Korzystanie z niestandardowego obrazu dla usługi
W 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.yml
plik, modyfikujemy definicjęphp-httpd
praca. 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śmykontekst
Aby 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.
Wnioski
W 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