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


Проект будет содержать следующую структуру:
- 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/


    Dockerfile
    FROM nginx:stable-alpine

    Описание Dockerfile:

    default.cnf
    server {
        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/


    Dockerfile
    FROM 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/


    Dockerfile
    FROM 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


Скачать шаблон контейнера можно тут (Скачать файл можно только авторизованным пользователям):
Внимание! У Вас нет прав для просмотра скрытого текста.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.