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

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

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
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
  1. 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 i Kompozycja 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średnictwem trafny:

    $ 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 
  2. 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 opcja Mkdir 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.

  3. 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ę:

    Wersja: „3.7 'Usługi: PHP-HTTPD: Zdjęcie: PHP: 7.3 -apache porty: - 80:80 Wolume: - "./DocumentRoot:/var/www/html " 
    Kopiuj

    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 wersja 3.7 jest najnowszym i zalecanym.

  4. 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 przypadku PHP: 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 port 80 na hosta do portu 80 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 do Kompozycja dokera Komenda. Wraz z uruchomieniem projektu, jeśli przejdziemy do Lokalny Gospodarz Dzięki naszej przeglądarce powinniśmy zobaczyć następną stronę:



    Strona phpinfo

    Aby 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:

    Wersja: „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: 
    Kopiuj

    W środku usługi Stanza, zdefiniowaliśmy inną usługę i nazywamy ją Mariadb I z obraz 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ć z wolumeny Podsekcja każdego zdefiniowanych usług. W tym przypadku nazywaliśmy nasz tom Mariadb-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:

    Wersja: „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: 
    Kopiuj

    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 przez db Nazwa, dlatego musimy utworzyć alias o tej samej nazwie dla naszej usługi MariaDB. To jest dokładnie to, co spinki 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 portu 80 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 phpMyAdmin

    Moż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:

    Wersja: „3.7 'Usługi: PHP-HTTPD: Build: Kontekst: ./PHP -HTTPD porty: - 80:80 Wolume: - "./DocumentRoot:/var/www/html "[…] 
    Kopiuj

    w zbudować Sekcja definiujemy konfiguracje stosowane w czasie budowy. W takim przypadku użyliśmy kontekst 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