
В будущем будет меняться по мере изучения docker. Пока что буду публиковать заметки и подсказки очень кратко. Часть материала взята из открытых источников. Связка для первого проекта будет php+nginx+mariadb+adminer
Все команды выполнять лучше от рута, а также проверить что выключен текущий локальный веб-сервер(если он есть) и его составные(бд и прочее) чтобы не было конфликтов.
Для начала составим стартовую структуру из директорий и файлов.

В cfg будет хранится конфиг для nginx назовем его projectone.conf с примерным содержанием:
server { index index.php; server_name projectone; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/projectone; 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; } }
В images создаем php с файлом Dockerfile
FROM php:7.2-fpm MAINTAINER my <my@my.my> RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install -j$(nproc) mbstring RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # Добавим свой php.ini ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini # Указываем рабочую директорию для PHP WORKDIR /var/www # Запускаем контейнер CMD ["php-fpm"]
В www создаем папку проекта projectone с файлом index.php и любым содержимым.
Осталось настроить все связи в docker-compose.yml
# Версия docker-compose version: '3' # Список наших сервисов (контейнеров) services: nginx: image: nginx:latest # маршрутизируем порты ports: - "80:80" - "443:443" # монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере volumes: - ./cfg:/etc/nginx/conf.d - ./www:/var/www - ./logs:/var/log/nginx php: # у нас свой образ для PHP, указываем путь к нему и говорим что его надо собрать build: ./images/php # монтируем директорию с проектами volumes: - ./www:/var/www db: image: mariadb ports: - "3306:3306" volumes: - ./db:/var/lib/mysql # задаем пароль для root пользователя environment: MYSQL_ROOT_PASSWORD: dbpass adminer: image: adminer restart: always ports: - "8080:8080"
Включить и дождаться сборки/установки sudo docker-compose up -d (для выключения после работы использовать sudo docker-compose down)
Результат смотрим http://127.0.0.1 наш Adminer http://127.0.0.1:8080
Краткий список полезных команд:
- docker ps список контейнеров
- docker exec -t -i < container_name > /bin/bash подключение к указанному контейнеру
- docker cp < container_name >:<пусть к проекту> <путь куда копируем на текущем сервере> копируем данные из контейнера
- docker-compose up -d —build пересобрать и запустить контейнеры