GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak nainstalovat a nastavit Laravel pomocí Docker Compose na Ubuntu 20.04

Úvod

Chcete-li kontejnerovat aplikace označuje proces přizpůsobení aplikace a jejích komponent, aby bylo možné ji spouštět v odlehčených prostředích známých jako kontejnery. Taková prostředí jsou izolovaná a na jedno použití a lze je využít pro vývoj, testování a nasazování aplikací do produkce.

V této příručce použijeme Docker Compose ke kontejnerizaci aplikace Laravel pro vývoj. Až budete hotovi, budete mít ukázkovou aplikaci Laravel spuštěnou na třech samostatných kontejnerech služeb:

  • app služba běžící na PHP7.4-FPM;
  • A db služba běžící na MySQL 5.7;
  • nginx službu, která používá app služba pro analýzu kódu PHP před doručením aplikace Laravel konečnému uživateli.

Abychom umožnili efektivnější vývojový proces a usnadnili ladění aplikací, budeme udržovat soubory aplikací synchronizované pomocí sdílených svazků. Také uvidíme, jak používat docker-compose exec příkazy ke spuštění Composer a Artisan v app kontejner.

Předpoklady

  • Přístup k místnímu počítači nebo vývojovému serveru Ubuntu 20.04 jako uživatel bez oprávnění root s právy sudo. Pokud používáte vzdálený server, je vhodné mít nainstalovaný aktivní firewall. Chcete-li je nastavit, nahlédněte do našeho Průvodce počátečním nastavením serveru pro Ubuntu 20.04.
  • Docker nainstalovaný na vašem serveru podle kroků 1 a 2 postupu Jak nainstalovat a používat Docker na Ubuntu 20.04.
  • Docker Compose nainstalovaný na vašem serveru podle kroku 1 Jak nainstalovat a používat Docker Compose na Ubuntu 20.04.

Krok 1 – Získání ukázkové aplikace

Pro začátek stáhneme demo aplikaci Laravel z jejího úložiště Github. Zajímá nás tutorial-01 větev, která obsahuje základní aplikaci Laravel, kterou jsme vytvořili v prvním průvodci této série.

Chcete-li získat kód aplikace, který je kompatibilní s tímto výukovým programem, stáhněte si verzi tutorial-1.0.1 do vašeho domovského adresáře pomocí:

  1. cd ~
  2. curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip

Budeme potřebovat unzip příkaz k rozbalení kódu aplikace. V případě, že jste tento balíček ještě nenainstalovali, učiňte tak nyní pomocí:

  1. sudo apt update
  2. sudo apt install unzip

Nyní rozbalte obsah aplikace a přejmenujte rozbalený adresář pro snazší přístup:

  1. unzip travellist.zip
  2. mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo

Přejděte na travellist-demo adresář:

  1. cd travellist-demo

V dalším kroku vytvoříme .env konfigurační soubor pro nastavení aplikace.

Krok 2 – Nastavení .env aplikace Soubor

Konfigurační soubory Laravel jsou umístěny v adresáři s názvem config , v kořenovém adresáři aplikace. Navíc .env se používá k nastavení konfigurace závislé na prostředí, jako jsou přihlašovací údaje a jakékoli informace, které se mohou mezi nasazeními lišit. Tento soubor není součástí kontroly revizí.

Upozornění :Konfigurační soubor prostředí obsahuje citlivé informace o vašem serveru, včetně přihlašovacích údajů k databázi a bezpečnostních klíčů. Z tohoto důvodu byste tento soubor nikdy neměli sdílet veřejně.

Hodnoty obsažené v .env bude mít přednost před hodnotami nastavenými v běžných konfiguračních souborech umístěných v config adresář. Každá instalace v novém prostředí vyžaduje přizpůsobený soubor prostředí, který definuje věci, jako je nastavení připojení k databázi, možnosti ladění, adresa URL aplikace a další položky, které se mohou lišit v závislosti na prostředí, ve kterém aplikace běží.

Nyní vytvoříme nový .env k přizpůsobení možností konfigurace pro vývojové prostředí, které nastavujeme. Laravel přichází s příkladem .env soubor, který můžeme zkopírovat a vytvořit si vlastní:

  1. cp .env.example .env

Otevřete tento soubor pomocí nano nebo vámi zvolený textový editor:

  1. nano .env

Aktuální .env soubor z travellist demo aplikace obsahuje nastavení pro použití místní databáze MySQL s 127.0.0.1 jako hostitel databáze. Potřebujeme aktualizovat DB_HOST proměnnou tak, aby ukazovala na databázovou službu, kterou vytvoříme v našem prostředí Docker. V této příručce budeme naši databázovou službu nazývat db . Pokračujte a nahraďte uvedenou hodnotu DB_HOST s názvem databázové služby:

.env
APP_NAME=Travellist
APP_ENV=dev
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
...

Pokud si přejete, můžete také změnit název databáze, uživatelské jméno a heslo. Tyto proměnné využijeme v dalším kroku, kde nastavíme docker-compose.yml soubor pro konfiguraci našich služeb.

Po dokončení úprav soubor uložte. Pokud jste použili nano , můžete to provést stisknutím Ctrl+x a poté Y a Enter pro potvrzení.

Krok 3 – Nastavení Dockerfile aplikace

Přestože naše služby MySQL i Nginx budou založeny na výchozích obrázcích získaných z Docker Hub, stále musíme vytvořit vlastní bitovou kopii pro aplikační kontejner. Vytvoříme pro to nový Dockerfile.

Náš cestovatel obrázek bude založen na php:7.4-fpm oficiální obrázek PHP z Docker Hub. Kromě tohoto základního prostředí PHP-FPM nainstalujeme několik dalších modulů PHP a nástroj pro správu závislostí Composer.

Vytvoříme také nového uživatele systému; to je nutné ke spuštění artisan a composer příkazy při vývoji aplikace. uid nastavení zajišťuje, že uživatel v kontejneru má stejné uid jako váš systémový uživatel na vašem hostitelském počítači, kde používáte Docker. Tímto způsobem jsou všechny soubory vytvořené těmito příkazy replikovány v hostiteli se správnými oprávněními. To také znamená, že budete moci použít svůj vybraný editor kódu v hostitelském počítači k vývoji aplikace, která běží uvnitř kontejnerů.

Vytvořte nový Dockerfile pomocí:

  1. nano Dockerfile

Zkopírujte následující obsah do vašeho Dockerfile:

Dockerfile
FROM php:7.4-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www

USER $user

Až budete hotovi, nezapomeňte soubor uložit.

Náš Dockerfile začíná definováním základního obrázku, který používáme:php:7.4-fpm .

Po instalaci systémových balíčků a rozšíření PHP nainstalujeme Composer zkopírováním composer spustitelný z jeho nejnovějšího oficiálního obrazu do našeho vlastního obrazu aplikace.

Poté je vytvořen a nastaven nový systémový uživatel pomocí user a uid argumenty, které byly deklarovány na začátku souboru Dockerfile. Tyto hodnoty vloží Docker Compose při sestavení.

Nakonec nastavíme výchozí pracovní adresář jako /var/www a změnit na nově vytvořeného uživatele. Tím zajistíte, že se při spuštění composer připojujete jako běžný uživatel a že jste ve správném adresáři a artisan příkazy na kontejneru aplikace.

Krok 4 – Nastavení konfigurace Nginx a souborů výpisu databáze

Při vytváření vývojových prostředí pomocí Docker Compose je často nutné sdílet konfigurační nebo inicializační soubory s kontejnery služeb, aby bylo možné tyto služby nastavit nebo zavést. Tento postup usnadňuje provádění změn v konfiguračních souborech za účelem doladění vašeho prostředí během vývoje aplikace.

Nyní nastavíme složku se soubory, které budou použity ke konfiguraci a inicializaci našich servisních kontejnerů.

Pro nastavení Nginx budeme sdílet travellist.conf soubor, který nakonfiguruje způsob obsluhy aplikace. Vytvořte docker-compose/nginx složka s:

  1. mkdir -p docker-compose/nginx

Otevřete nový soubor s názvem travellist.conf v tomto adresáři:

  1. nano docker-compose/nginx/travellist.conf

Do tohoto souboru zkopírujte následující konfiguraci Nginx:

docker-compose/nginx/travellist.conf

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

Tento soubor nakonfiguruje Nginx tak, aby naslouchal na portu 80 a použijte index.php jako výchozí indexovou stránku. Kořen dokumentu nastaví na /var/www/public a poté nakonfigurujte Nginx tak, aby používal app službu na portu 9000 zpracovat *.php soubory.

Po dokončení úprav soubor uložte a zavřete.

Abychom mohli nastavit databázi MySQL, budeme sdílet výpis databáze, který bude importován při inicializaci kontejneru. Toto je funkce poskytovaná obrazem MySQL 5.7, který budeme v tomto kontejneru používat.

Vytvořte novou složku pro své inicializační soubory MySQL v docker-compose složka:

  1. mkdir docker-compose/mysql

Otevřete nový .sql soubor:

  1. nano docker-compose/mysql/init_db.sql

Následující výpis MySQL je založen na databázi, kterou jsme vytvořili v našem průvodci Laravel on LEMP. Vytvoří novou tabulku s názvem places . Poté vyplní tabulku sadou vzorových míst.

Přidejte do souboru následující kód:

docker-compose/mysql/db_init.sql
DROP TABLE IF EXISTS `places`;

CREATE TABLE `places` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `visited` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `places` (name, visited) VALUES ('Berlin',0),('Budapest',0),('Cincinnati',1),('Denver',0),('Helsinki',0),('Lisbon',0),('Moscow',1),('Nairobi',0),('Oslo',1),('Rio',0),('Tokyo',0);

places tabulka obsahuje tři pole:id , name a visited . visited pole je příznak používaný k identifikaci míst, která ještě zbývá navštívit . Neváhejte změnit ukázková místa nebo přidat nová. Až budete hotovi, uložte a zavřete soubor.

Dokončili jsme nastavení Dockerfile aplikace a konfiguračních souborů služby. Dále nastavíme Docker Compose, aby tyto soubory používal při vytváření našich služeb.

Krok 5 — Vytvoření prostředí s více kontejnery pomocí Docker Compose

Docker Compose vám umožňuje vytvářet prostředí s více kontejnery pro aplikace běžící na Dockeru. Používá definice služeb vytvářet plně přizpůsobitelná prostředí s více kontejnery, které mohou sdílet sítě a objemy dat. To umožňuje bezproblémovou integraci mezi komponentami aplikace.

Abychom mohli nastavit definice našich služeb, vytvoříme nový soubor s názvem docker-compose.yml . Tento soubor se obvykle nachází v kořenovém adresáři složky aplikace a definuje vaše kontejnerové prostředí, včetně základních obrázků, které použijete k sestavení kontejnerů, a toho, jak budou vaše služby interagovat.

V našem docker-compose.yml definujeme tři různé služby soubor:app , db a nginx .

app služba vytvoří obrázek s názvem travellist , na základě Dockerfile, který jsme dříve vytvořili. Kontejner definovaný touto službou spustí php-fpm serveru analyzovat kód PHP a odeslat výsledky zpět do nginx služba, která poběží na samostatném kontejneru. mysql definuje kontejner, na kterém běží server MySQL 5.7. Naše služby budou sdílet mostovou síť s názvem travellist .

Soubory aplikace budou synchronizovány v app a nginx služby prostřednictvím vázat připojení . Bind mounts jsou užitečné ve vývojových prostředích, protože umožňují výkonnou obousměrnou synchronizaci mezi hostitelským počítačem a kontejnery.

Vytvořte nový docker-compose.yml soubor v kořenovém adresáři složky aplikace:

  1. nano docker-compose.yml

Typický docker-compose.yml soubor začíná definicí verze, za kterou následuje services uzel, pod kterým jsou definovány všechny služby. Sdílené sítě jsou obvykle definovány na konci tohoto souboru.

Chcete-li začít, zkopírujte tento standardní kód do souboru docker-compose.yml soubor:

docker-compose.yml
version: "3.7"
services:


networks:
  travellist:
    driver: bridge

Nyní upravíme services uzel zahrnout app , db a nginx služby.

app Služba

app služba nastaví kontejner s názvem travellist-app . Vytváří nový obrázek Dockeru na základě souboru Dockerfile umístěného ve stejné cestě jako docker-compose.yml soubor. Nový obrázek bude uložen lokálně pod názvem travellist .

I když je kořen dokumentu obsluhovaný jako aplikace umístěn v nginx kontejneru, potřebujeme soubory aplikace někde uvnitř app kontejner, takže jsme schopni provádět úlohy příkazového řádku pomocí nástroje Laravel Artisan.

Zkopírujte následující definici služby pod services uzel uvnitř docker-compose.yml soubor:

docker-compose.yml
  app:
    build:
      args:
        user: sammy
        uid: 1000
      context: ./
      dockerfile: Dockerfile
    image: travellist
    container_name: travellist-app
    restart: unless-stopped
    working_dir: /var/www/
    volumes:
      - ./:/var/www
    networks:
      - travellist

Tato nastavení provádějí následující:

  • build :Tato konfigurace říká Docker Compose, aby vytvořil místní image pro app pomocí zadané cesty (kontextu) a souboru Dockerfile pro pokyny. Argumenty user a uid se vkládají do souboru Dockerfile, aby bylo možné přizpůsobit příkazy pro vytváření uživatelů v době sestavování.
  • image :Název, který bude použit pro vytvářený obrázek.
  • container_name :Nastaví název kontejneru pro tuto službu.
  • restart :Vždy restartujte, pokud není služba zastavena.
  • working_dir :Nastaví výchozí adresář pro tuto službu jako /var/www .
  • volumes :Vytvoří sdílený svazek, který bude synchronizovat obsah z aktuálního adresáře do /var/www uvnitř nádoby. Všimněte si, že toto není kořenový adresář vašeho dokumentu, protože bude uložen v nginx kontejner.
  • networks :Nastaví tuto službu tak, aby používala síť s názvem travellist .

db Služba

db služba používá předem vytvořený obraz MySQL 5.7 z Docker Hub. Protože Docker Compose automaticky načte .env proměnné soubory umístěné ve stejném adresáři jako docker-compose.yml můžeme získat nastavení naší databáze z Laravel .env soubor, který jsme vytvořili v předchozím kroku.

Zahrňte do svých services následující definici služby uzel hned za app služba:

docker-compose.yml
  db:
    image: mysql:5.7
    container_name: travellist-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./docker-compose/mysql:/docker-entrypoint-initdb.d
    networks:
      - travellist

Tato nastavení provádějí následující:

  • image :Definuje obrázek Docker, který by měl být použit pro tento kontejner. V tomto případě používáme obraz MySQL 5.7 z Docker Hub.
  • container_name :Nastaví název kontejneru pro tuto službu:travellist-db .
  • restart :Vždy restartujte tuto službu, pokud není výslovně zastavena.
  • environment :Definuje proměnné prostředí v novém kontejneru. Používáme hodnoty získané z Laravel .env soubor k nastavení naší služby MySQL, která automaticky vytvoří novou databázi a uživatele na základě poskytnutých proměnných prostředí.
  • volumes :Vytvoří svazek pro sdílení .sql výpis databáze, který bude použit k inicializaci databáze aplikace. Obrázek MySQL bude automaticky importovat .sql soubory umístěné v /docker-entrypoint-initdb.d adresář uvnitř kontejneru.
  • networks :Nastaví tuto službu tak, aby používala síť s názvem travellist .

nginx Služba

nginx služba používá předem vytvořený obraz Nginx nad Alpine, odlehčenou distribucí Linuxu. Vytvoří kontejner s názvem travellist-nginx a používá ports definice k vytvoření přesměrování z portu 8000 na hostitelském systému na port 80 uvnitř kontejneru.

Zahrňte do svých services následující definici služby uzel, hned za db služba:

docker-compose.yml
  nginx:
    image: nginx:1.17-alpine
    container_name: travellist-nginx
    restart: unless-stopped
    ports:
      - 8000:80
    volumes:
      - ./:/var/www
      - ./docker-compose/nginx:/etc/nginx/conf.d
    networks:
      - travellist

Tato nastavení provádějí následující:

  • image :Definuje obrázek Docker, který by měl být použit pro tento kontejner. V tomto případě používáme obrázek Alpine Nginx 1.17.
  • container_name :Nastaví název kontejneru pro tuto službu:travellist-nginx .
  • restart :Vždy restartujte tuto službu, pokud není výslovně zastavena.
  • ports :Nastaví přesměrování portu, které umožní externí přístup přes port 8000 na webový server běžící na portu 80 uvnitř kontejneru.
  • volumes :Vytvoří dva sdílené svazky. První z nich bude synchronizovat obsah z aktuálního adresáře do /var/www uvnitř nádoby. Tímto způsobem, když provedete místní změny v souborech aplikace, budou se rychle projevovat v aplikaci, kterou Nginx obsluhuje uvnitř kontejneru. Druhý svazek zajistí náš konfigurační soubor Nginx, který se nachází na adrese docker-compose/nginx/travellist.conf , se zkopíruje do konfigurační složky Nginx kontejneru.
  • networks :Nastaví tuto službu tak, aby používala síť s názvem travellist .

Dokončeno docker-compose.yml Soubor

Takto jsme dokončili docker-compose.yml soubor vypadá takto:

docker-compose.yml
version: "3.7"
services:
  app:
    build:
      args:
        user: sammy
        uid: 1000
      context: ./
      dockerfile: Dockerfile
    image: travellist
    container_name: travellist-app
    restart: unless-stopped
    working_dir: /var/www/
    volumes:
      - ./:/var/www
    networks:
      - travellist

  db:
    image: mysql:5.7
    container_name: travellist-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./docker-compose/mysql:/docker-entrypoint-initdb.d
    networks:
      - travellist

  nginx:
    image: nginx:alpine
    container_name: travellist-nginx
    restart: unless-stopped
    ports:
      - 8000:80
    volumes:
      - ./:/var/www
      - ./docker-compose/nginx:/etc/nginx/conf.d/
    networks:
      - travellist

networks:
  travellist:
    driver: bridge

Až budete hotovi, nezapomeňte soubor uložit.

Krok 6 – Spuštění aplikace pomocí Docker Compose

Nyní použijeme docker-compose příkazy k vytvoření obrazu aplikace a spuštění služeb, které jsme zadali v našem nastavení.

Vytvořte app obrázek pomocí následujícího příkazu:

  1. docker-compose build app

Dokončení tohoto příkazu může trvat několik minut. Uvidíte výstup podobný tomuto:

OutputBuilding app
Step 1/11 : FROM php:7.4-fpm
 ---> fa37bd6db22a
Step 2/11 : ARG user
 ---> Running in f71eb33b7459
Removing intermediate container f71eb33b7459
 ---> 533c30216f34
Step 3/11 : ARG uid
 ---> Running in 60d2d2a84cda
Removing intermediate container 60d2d2a84cda
 ---> 497fbf904605
Step 4/11 : RUN apt-get update && apt-get install -y     git     curl     libpng-dev     libonig-dev     ...
Step 7/11 : COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
 ---> e499f74896e3
Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user
 ---> Running in 232ef9c7dbd1
Removing intermediate container 232ef9c7dbd1
 ---> 870fa3220ffa
Step 9/11 : RUN mkdir -p /home/$user/.composer &&     chown -R $user:$user /home/$user
 ---> Running in 7ca8c0cb7f09
Removing intermediate container 7ca8c0cb7f09
 ---> 3d2ef9519a8e
Step 10/11 : WORKDIR /var/www
 ---> Running in 4a964f91edfa
Removing intermediate container 4a964f91edfa
 ---> 00ada639da21
Step 11/11 : USER $user
 ---> Running in 9f8e874fede9
Removing intermediate container 9f8e874fede9
 ---> fe176ff4702b

Successfully built fe176ff4702b
Successfully tagged travellist:latest

Po dokončení sestavení můžete prostředí spustit v režimu na pozadí pomocí:

  1. docker-compose up -d
OutputCreating travellist-db    ... done
Creating travellist-app   ... done
Creating travellist-nginx ... done

Tím budou vaše kontejnery spuštěny na pozadí. Chcete-li zobrazit informace o stavu vašich aktivních služeb, spusťte:

  1. docker-compose ps

Uvidíte výstup takto:

Output      Name                    Command               State          Ports        
--------------------------------------------------------------------------------
travellist-app     docker-php-entrypoint php-fpm    Up      9000/tcp            
travellist-db      docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
travellist-nginx   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp

Vaše prostředí je nyní v provozu, ale k dokončení nastavení aplikace musíme ještě provést několik příkazů. Můžete použít docker-compose exec příkaz pro provádění příkazů v kontejnerech služeb, jako je ls -l pro zobrazení podrobných informací o souborech v adresáři aplikace:

  1. docker-compose exec app ls -l
Outputtotal 260
-rw-rw-r--  1 sammy sammy    737 Jun  9 11:19 Dockerfile
-rw-rw-r--  1 sammy sammy    101 Jan  7 08:05 README.md
drwxrwxr-x  6 sammy sammy   4096 Jan  7 08:05 app
-rwxr-xr-x  1 sammy sammy   1686 Jan  7 08:05 artisan
drwxrwxr-x  3 sammy sammy   4096 Jan  7 08:05 bootstrap
-rw-rw-r--  1 sammy sammy   1501 Jan  7 08:05 composer.json
-rw-rw-r--  1 sammy sammy 179071 Jan  7 08:05 composer.lock
drwxrwxr-x  2 sammy sammy   4096 Jan  7 08:05 config
drwxrwxr-x  5 sammy sammy   4096 Jan  7 08:05 database
drwxrwxr-x  4 sammy sammy   4096 Jun  9 11:19 docker-compose
-rw-rw-r--  1 sammy sammy    965 Jun  9 11:27 docker-compose.yml
-rw-rw-r--  1 sammy sammy   1013 Jan  7 08:05 package.json
-rw-rw-r--  1 sammy sammy   1405 Jan  7 08:05 phpunit.xml
drwxrwxr-x  2 sammy sammy   4096 Jan  7 08:05 public
-rw-rw-r--  1 sammy sammy    273 Jan  7 08:05 readme.md
drwxrwxr-x  6 sammy sammy   4096 Jan  7 08:05 resources
drwxrwxr-x  2 sammy sammy   4096 Jan  7 08:05 routes
-rw-rw-r--  1 sammy sammy    563 Jan  7 08:05 server.php
drwxrwxr-x  5 sammy sammy   4096 Jan  7 08:05 storage
drwxrwxr-x  4 sammy sammy   4096 Jan  7 08:05 tests
drwxrwxr-x 41 sammy sammy   4096 Jun  9 11:32 vendor
-rw-rw-r--  1 sammy sammy    538 Jan  7 08:05 webpack.mix.js

Nyní spustíme composer install k instalaci závislostí aplikace:

  1. docker-compose exec app composer install

Uvidíte výstup takto:

OutputLoading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
  - Installing doctrine/inflector (1.3.1): Downloading (100%)         
  - Installing doctrine/lexer (1.2.0): Downloading (100%)         
  - Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)         
  - Installing erusev/parsedown (1.7.4): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.13.1): Downloading (100%)         
  - Installing phpoption/phpoption (1.7.2): Downloading (100%)         
  - Installing vlucas/phpdotenv (v3.6.0): Downloading (100%)         
  - Installing symfony/css-selector (v5.0.2): Downloading (100%)             
…
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

Poslední věc, kterou musíme před testováním aplikace udělat, je vygenerovat jedinečný aplikační klíč pomocí artisan Nástroj příkazového řádku Laravel. Tento klíč se používá k šifrování uživatelských relací a dalších citlivých dat:

  1. docker-compose exec app php artisan key:generate
OutputApplication key set successfully.

Nyní přejděte do prohlížeče a získejte přístup k názvu domény nebo IP adrese vašeho serveru na portu 8000:

http://server_domain_or_IP:8000

Poznámka :V případě, že toto demo spouštíte na svém místním počítači, použijte http://localhost:8000 pro přístup k aplikaci z vašeho prohlížeče.

Zobrazí se stránka podobná této:

Můžete použít logs příkaz ke kontrole protokolů generovaných vašimi službami:

  1. docker-compose logs nginx
Attaching to travellist-nginx
…
travellist-nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
travellist-nginx | /docker-entrypoint.sh: Configuration complete; ready for start up
travellist-nginx | 192.168.0.1 - - [09/Jun/2020:11:46:34 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
travellist-nginx | 192.168.0.1 - - [09/Jun/2020:11:46:35 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"

Pokud chcete pozastavit prostředí Docker Compose a zároveň zachovat stav všech jeho služeb, spusťte:

  1. docker-compose pause
OutputPausing travellist-db    ... done
Pausing travellist-nginx ... done
Pausing travellist-app   ... done

Poté můžete obnovit své služby pomocí:

  1. docker-compose unpause
OutputUnpausing travellist-app   ... done
Unpausing travellist-nginx ... done
Unpausing travellist-db    ... done

Chcete-li prostředí Docker Compose vypnout a odebrat všechny jeho kontejnery, sítě a svazky, spusťte:

  1. docker-compose down
OutputStopping travellist-nginx ... done
Stopping travellist-db    ... done
Stopping travellist-app   ... done
Removing travellist-nginx ... done
Removing travellist-db    ... done
Removing travellist-app   ... done
Removing network travellist-laravel-demo_travellist

Přehled všech příkazů Docker Compose naleznete v odkazu na příkazový řádek Docker Compose.

Závěr

V této příručce jsme nastavili prostředí Docker se třemi kontejnery pomocí Docker Compose k definování naší infrastruktury v souboru YAML.

Od tohoto okamžiku můžete pracovat na své aplikaci Laravel, aniž byste museli instalovat a nastavovat místní webový server pro vývoj a testování. Navíc budete pracovat s jednorázovým prostředím, které lze snadno replikovat a distribuovat, což může být užitečné při vývoji vaší aplikace a také při přechodu k produkčnímu prostředí.


Docker
  1. Jak nainstalovat a používat Docker v Ubuntu 20.04

  2. Jak nainstalovat a používat Docker Compose na CentOS

  3. Jak nainstalovat Docker Compose na Ubuntu 18.04

  1. Jak nainstalovat Docker Compose na Ubuntu 18.04

  2. Jak nainstalovat Docker Compose na Ubuntu 20.04

  3. Jak nainstalovat Docker a spustit kontejnery Docker v Ubuntu

  1. Jak nainstalovat a používat Docker Compose na Ubuntu 18.04

  2. Jak nainstalovat a nastavit Docker na Ubuntu 18.04

  3. Jak nainstalovat ONLYOFFICE 8.9.0 s Dockerem na Ubuntu