docker. Создание контейнера для laravel
Данный материал предоставлен сайтом
PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
В статье описан процесс создания docker контейнеров для работы Laravel.
Для удобной работы с контейнерами мы будем использовать docker-compose.yml
После выполения всех действий в данной статье, у вас будут созданы следующие сервисные контейнеры:
nginx - nginx:stable-alpine
db - mysql:8.0.16-alpine
php - php:8.1-fpm-alpine
db - mysql:8.0.16-alpine
php - php:8.1-fpm-alpine
Проект будет содержать следующую структуру:
- data
- docker
- mysql
Dockerfile
my.cnf
- nginx
Dockerfile
default.conf
- php-fpm
Dockerfile
- src
.env
docker-compose.yml
Создайте папку data. В этой папке будут содержаться файлы БД.
Создайте папку docker. В этой папке создайте еще 3 папки (mysql, nginx, php-fpm). В этих папках будут содержаться Dokerfile и конфигурационные файлы контейнера.
Создайте папку src и поместите в нее свой Laravel проект.
Если у вас нет проекта, то вы можете скачать новый проект с помощью composer, выполнив команду скачивания с указанием версии Laravel:
composer create-project laravel/laravel:^8.0 src
После выполнения команды у вас появится папка src, в которой будет находиться Laravel framework 8 версии.
В файле .env будут созданы переменные, которые будут использоваться в docker-compose файле для подключения к БД.
Содержимое docker файлов.
Содержимое docker-compose.yml
При создании контейнера базы данных был указан алиас хоста mysql сервера.
По этому в конфигурационном .env файле laravel теперь необходимо указывать следующий mysql хост - db.pacificsky.ru (Но вы можете заменить его на свой хост).
В конце статьи опубликован файл с готовым примером контейнера. В папке src размещен пример конфигурационного laravel файла, в котором прописан mysql хост - db.pacificsky.ru, по которому вы можете подключиться к mysql контейнеру.Содержимое папки docker/nginx/
DockerfileFROM nginx:stable-alpine
Описание Dockerfile:
default.cnfserver { listen 80; index index.php index.html; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
Описание default.cnf:Содержимое папки docker/php-fpm/
DockerfileFROM php:8.1-fpm-alpine RUN apk update && apk upgrade # Install the PHP pdo_mysql extention RUN docker-php-ext-install pdo pdo_mysql WORKDIR /var/www
Описание Dockerfile:Содержимое папки docker/mysql/
DockerfileFROM mysql:8.0.16 COPY my.cnf /etc/mysql/conf.d/my.cnf CMD ["mysqld"] EXPOSE 3306
Описание Dockerfile:
my.cnf# The MySQL Client configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysql] [mysqld] sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" default-authentication-plugin=mysql_native_password
Содержимое .env файла
Укажите такие же данные как в конфигурационном .env файле laravel (src/.env).
Для примера я использую следующие значения:
Теперь, когда ваши файлы для запуска контейнеров готовы, можно приступить к сборке проекта. Для этого выполните команду:
docker-compose build
Далее для запуска контейнера необходимо выполнить
docker-compose up -d
Скачать шаблон контейнера можно тут (Скачать файл можно только авторизованным пользователям):
Внимание! У Вас нет прав для просмотра скрытого текста.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.