Tutorial: Web development z narzędziem Docker
Zdaniem portalu Linux.com,

Docker jest narzędziem, które może zbudować aplikację, wraz z jej wszystkimi zależnościami,
wewnątrz kontenera, który z kolei może być uruchomiony na dowolnym serwerze działającym w środowisku Linux.
Pozwala to na uzyskanie elastyczności i przenośności. Aplikacja może w ten sposób zostać uruchomiona i działać w dowolnym miejscu: u providera, w chmurze publicznej lub prywatnej.
Jak przyspieszyć Symfony web development korzystając z narzędzia Doker?
Stack:
- PHP 7.1
- MySQL 5.7
- Symfony 4
Jak rozpocząć?
Upewnij się, że usługa narzędzia Docker jest uruchomiona.
Otwórz Terminal.
Przejdź do wybranego katalogu.
Utwórz katalog, w którym będzie znajdował się Twój projekt.
dev@dev: mkdir myproject && cd myproject
Wewnątrz katalogu myproject utwórz dwa nowe katalogi.
dev@dev: mkdir docker-myproject && mkdir myapp
Przejdź do katalogu docker-myproject.
dev@dev: cd docker-myproject
Ustawienie zmiennych środowiskowych
W głównym katalogu Twojego projektu utwórz plik .env.
dev@dev: touch .env && nano .env
Do pliku .env skopiuj i wklej poniższą konfigurację.
APP_PATH=../myapp
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=mydb
MYSQL_USER=user
MYSQL_PASSWORD=password
Zapisz zmiany naciskając Control + o, a następnie opuść program wybierając Control + x.
Konfiguracja usług
Utwórz plik o nazwie docker-compose.yml i otwórz go.
dev@dev: touch docker-compose.yml && nano docker-compose.yml
Skopiuj i wklej poniższy kod do pliku docker-compose.yml.
version: '2'
services:
db:
image: mysql
volumes:
- "./.data/db:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
php:
build:
context: php
ports:
- 80:80
Zapisz zmiany.
Przygotowanie instrukcji do budowy obrazu php w Dockerfile
Utwórz katalog o nazwie php i przejdź do niego.
dev@dev: mkdir php && cd php
Utwórz, a następnie otwórz do edycji plik Dockerfile.
dev@dev: touch Dockerfile && nano Dockerfile
Do pliku Dockerfile wklej poniższą konfigurację:
FROM php:7.1-apache
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN apt-get update && apt-get install -y \
git \
unzip
RUN a2enmod rewrite
ADD myapp.conf /etc/apache2/sites-available/000-default.conf
Zapisz zmiany i wyjdź z edytora.
Konfiguracja virtualhost
Znajdując się w katalogu php, utwórz nowy plik o nazwie vhost.conf i otwórz go do edycji.
dev@dev: touch myapp.conf && nano myapp.conf
Do pliku vhost.conf wklej poniższą zawartość:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Order Allow,Deny
Allow from All
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
</VirtualHost>
Zapisz zmiany i wyłącz edytor.
Uruchomienie kontenerów
Aby zbudować obraz php na podstawie powyższej konfiguracji i uruchomić Twoje kontenery w tle, skorzystaj z poniższego kodu:
dev@dev: docker-compose up -d --build
W związku z faktem, że uruchamiany nasz skrypt po raz pierwszy, z sieci w pierwszej kolejności zostaną wszelkie potrzebne zasoby, dopiero potem program utworzy kontenery i uruchomi je.
Wyświetlenie aktywnych kontenerów
W celu wyświetlenia aktywnie działających kontenerów (wraz z ich identyfikatorami), wykonaj polecenie:
dev@dev: docker ps
Przykładowy output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af2e2ddeb785 mysql "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 3306/tcp dockermyproject_db_1
4586304f33f7 php:7.1-apache "docker-php-entrypoi…" 3 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp dockermyproject_php_1
Instalacja Symfony4
Połączyć się ze swoimi kontenerami (za pomocą ssh) wpisując:
dev@dev: docker-compose exec php bash
Utwórz nowy projekt Symfony za pomocą narzędzia composer.
root@2de2bfbeeb9c:/var/www/html# composer create-project symfony/skeleton .
Gdy narzędzie zakończy swoje działanie, otwórz przeglądarkę i przejdź do adresu: http://localhost. Na ekranie powinieneś ujrzeć:
To wszystko! Teraz możesz przejść do tego, co lubisz najbardziej - czyli web development!
You got a 1.37% upvote from @mercurybot courtesy of @piotr42!
You got a 2.47% upvote from @bid4joy courtesy of @piotr42!