Ú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í:
- cd ~
- 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í:
- sudo apt update
- sudo apt install unzip
Nyní rozbalte obsah aplikace a přejmenujte rozbalený adresář pro snazší přístup:
- unzip travellist.zip
- mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo
Přejděte na travellist-demo
adresář:
- 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í:
- cp .env.example .env
Otevřete tento soubor pomocí nano
nebo vámi zvolený textový editor:
- 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:
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í:
- nano Dockerfile
Zkopírujte následující obsah do vašeho Dockerfile:
DockerfileFROM 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:
- mkdir -p docker-compose/nginx
Otevřete nový soubor s názvem travellist.conf
v tomto adresáři:
- 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:
- mkdir docker-compose/mysql
Otevřete nový .sql
soubor:
- 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.sqlDROP 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:
- 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:
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:
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 proapp
pomocí zadané cesty (kontextu) a souboru Dockerfile pro pokyny. Argumentyuser
auid
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 vnginx
kontejner.networks
:Nastaví tuto službu tak, aby používala síť s názvemtravellist
.
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:
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ázvemtravellist
.
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:
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 port8000
na webový server běžící na portu80
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 adresedocker-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ázvemtravellist
.
Dokončeno docker-compose.yml
Soubor
Takto jsme dokončili docker-compose.yml
soubor vypadá takto:
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:
- 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í:
- 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:
- 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:
- 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:
- 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:
- 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:
- 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:
- docker-compose pause
OutputPausing travellist-db ... done
Pausing travellist-nginx ... done
Pausing travellist-app ... done
Poté můžete obnovit své služby pomocí:
- 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:
- 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í.