В будущем будет меняться по мере изучения 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 

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 пересобрать и запустить контейнеры