На старте уже должны стоять docker, docker-compose, php и php-composer.
Создаем папку с проектом и в ней папку docker.
mkdir lk_site
cd lk_site && mkdir docker
cd docker
В папке docker создаем файл docker-compose.yml для поднятия окружения разработки.
vim docker-compose.yml
start____________________________________________________________
# Последняя версия docker-compose
version: '3'
# Создаем общую сеть deafult для всех контейнеров
networks:
default:
driver: bridge
services:
web:
build: ./web
# Подключаем к общей сети с другими контейнерами
networks:
- default
# Запускаем только после db
depends_on:
- db
# Линкуем внешнюю папку с исходниками внутрь
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
- "../conf/apache2:/etc/apache2/sites-available"
ports:
- 8085:80
working_dir: ${APP_PATH_CONTAINER}
db:
image: mariadb
# Подключаем к общей сети с другими контейнерами
networks:
- default
restart: always
environment:
MARIADB_ROOT_PASSWORD: example
MARIADB_DATABASE: yii2db
MARIADB_USER: userdb
MARIADB_PASSWORD: secret
volumes:
- ${DB_PATH_HOST}:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8088:8080
composer:
image: composer:2.0.8
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
working_dir: ${APP_PATH_CONTAINER}
command: composer install
nvim:
build: ./nvim
tty: true
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
working_dir: ${APP_PATH_CONTAINER}
end____________________________________________________________
В папке docker создаем файл .ENV
vim .ENV
start____________________________________________________________
#PATHS
DB_PATH_HOST= ../databases
APP_PATH_HOST= ../www
APP_PATH_CONTAINER= /var/www/html/
end____________________________________________________________
В папке web создаем файл конфигурации нашего контейнера Dockerfile.
mkdir web
cd web
vim Dockerfile
start____________________________________________________________
FROM php:7.4-apache
# Install system dependencies
RUN apt-get update && apt-get install -y \
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
# gd with-freetype требуется для капчи в yii2. После для проверки "php -r 'var_dump(gd_info());'"
RUN docker-php-ext-configure gd --with-freetype && docker-php-ext-install gd
WORKDIR /var/www/html/
end____________________________________________________________
В папке nvim создаем файл конфигурации нашего контейнера Dockerfile astronvim.
cd .. && mkdir nvim
cd nvim
vim Dockerfile
start____________________________________________________________
FROM alpine:edge
# Install system dependencies
RUN apk add bash git lua nodejs npm lazygit bottom python3 go neovim ripgrep alpine-sdk --update
RUN git clone https://github.com/AstroNvim/AstroNvim ~/.config/nvim
RUN nvim --headless -c "autocmd User PackerComplete quitall"
WORKDIR /var/www/html/
end____________________________________________________________
Для apache2 создаем папку lk_site/conf/apache2 и файл 000-default.conf в ней. Файлик может изменяться, в зависимости от того, как вы хотите настроить apache2 на своем проекте. Его можно менять локально, т.к. он подключается через volume. Но надо не забывать внутри контейнера перезагружать apache2: service apache2 reload
cd ../.. && mkdir conf
cd conf && mkdir apache2
cd apache2
vim 000-default.conf
start____________________________________________________________
<VirtualHost *:80>
ServerName lk.site.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
end____________________________________________________________
Все команды выполняются из корневой папки.
cd ..
Выполняем команду создания проекта:
composer create-project --prefer-dist yiisoft/yii2-app-advanced:2.0.47 www
В файле composer.json меняем это
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
на это
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org",
"options": {
"ssl": {
"verify_peer": false
}
}
}
]
Запускаем окружение:
docker-compose -f docker/docker-compose.yml up -d --build
Инициализируем проект:
www/init --env=Development --overwrite=All
Открываем в редакторе файл www/common/config/main-local.php и заполняем его данными для подключения к БД.
Подключаемся к контейнеру:
docker exec -it docker_web_1 bash
Выполняем команду миграции БД:
php /var/www/html/yii migrate
Создаем папку для логов mkdir /var/www/html/log
И выходим exit
Тормозим сервис:
docker-compose -f docker/docker-compose.yml down
Запускаем его заново:
docker-compose -f docker/docker-compose.yml up -d
Открываем localhost:8085 в браузере и смотрим на новый сайт.
Шпаргалка:
Из папки doker
docker-compose ps - вывести список контенеров в папке docker
docker-compose stop web
docker-compose stop db
docker-compose rm web - удуалить
Применение
Основные команды для Docker:
docker-compose up -d
чтобы запустить все службы в вашем стеке в фоновом режиме
docker-compose ps
вывести список запущенных сервисов
docker-compose logs -f
просматривать журналы для всех служб, непрерывно
docker-compose stop
чтобы изящно остановить все службы в вашем стеке
docker-compose kill
немедленно остановить все службы в вашем стеке
docker-compose down -v
чтобы остановить и удалить все службы, помните о потере данных, когда не используются хост-тома
Для запуска команд в контейнере
docker-compose run --rm web composer install
запускает установку композитора в новом контейнере
docker-compose exec web bash
выполняет bash в запущенной php службе
Комментариев нет :
Отправить комментарий