Статья
Установка и настройка Docker в Ubuntu 16.04

Установка и настройка Docker в Ubuntu 16.04

24 июня 2017

Установка Docker в Ubuntu 16.04

Установим самую последнюю версию на данный момент из репозитория Ubuntu:

sudo apt install -y docker-engine docker-compose


Добавим текущего пользователя в группу docker:

sudo usermod -aG docker $(whoami)


Структура

В домашней директории текущего пользователя будет следующая структура файлов и директорий:

~/Docker
└── php-server/
    ├── docker-compose.yml
    ├── mysql
    │   ├── data
    │   └── logs
    ├── nginx
    │   ├── Dockerfile
    │   ├── logs
    │   └── sites-enabled
    │       └── test.com
    └── php-fpm
        └── Dockerfile


Основной файл - это docker-compose.yml. Именно в нем содержатся настройки контейнеров, общих директорий, портов и связи контейнеров между собой:

nginx:
    dockerfile: ./Dockerfile
    build: ./nginx
    ports:
     - "80:80"
    links:
     - fpm:fpm
    volumes:
     - /var/www/:/var/www
     - ./nginx/logs:/etc/logs/nginx
     - ./nginx/sites-enabled:/etc/nginx/sites-enabled

fpm:
    dockerfile: ./Dockerfile
    build: ./php-fpm
    links:
     - mysql:mysql
    volumes:
     - /var/www/:/var/www

mysql:
    image: mysql:5.7
    ports:
     - "3306:3306"
    volumes:
     - ./mysql/data:/var/lib/mysql
     - ./mysql/logs:/var/log/mysql
    environment:
     - MYSQL_ROOT_PASSWORD=12345


Настройка контейнера MySQL

Для данного контейнера берем официальный образ mysql:5.7.
В директории ./mysql/data будут располагаться файлы БД MySQL.
Директорию ./mysql/logs используем для хранения логов.
Для доступа к MySQL в файлах необходимо использовать хост mysql, а не 127.0.0.1.


Настройка контейнера PHP-FPM

Добавим файл Dockerfile в директорию php-fpm со следующим содержимым:

FROM ubuntu:16.04

RUN apt update && \
    apt install -y \
    mc nano curl \
    php7.0-cli \
    php7.0-common \
    php7.0-mysql \
    php7.0-gd \
    php7.0-fpm \
    php7.0-cgi \
    php7.0-mcrypt \
    php7.0-curl \
    php7.0-json \
    php7.0-mbstring \
    php7.0-intl

RUN sed -i "s/;date.timezone =.*/date.timezone = UTC/" /etc/php/7.0/cli/php.ini && \
    sed -i "s/;date.timezone =.*/date.timezone = UTC/" /etc/php/7.0/fpm/php.ini && \
    sed -i "s/display_errors = Off/display_errors = On/" /etc/php/7.0/fpm/php.ini && \
    sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/7.0/fpm/php.ini && \
    sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/7.0/fpm/php.ini && \
    sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.0/fpm/php.ini && \
    sed -i -e "s/pid =.*/pid = \/var\/run\/php7.0-fpm.pid/" /etc/php/7.0/fpm/php-fpm.conf && \
    sed -i -e "s/error_log =.*/error_log = \/proc\/self\/fd\/2/" /etc/php/7.0/fpm/php-fpm.conf && \
    sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php/7.0/fpm/php-fpm.conf && \
    sed -i "s/listen = .*/listen = 9000/" /etc/php/7.0/fpm/pool.d/www.conf && \
    sed -i "s/;catch_workers_output = .*/catch_workers_output = yes/" /etc/php/7.0/fpm/pool.d/www.conf


RUN curl -sS https://getcomposer.org/installer | php && \
    chmod 755 composer.phar && \
    mv composer.phar /usr/local/bin/composer

EXPOSE 9000

CMD ["php-fpm7.0"]


За основу берем официальный образ Ubuntu 16.04 и устанавливаем необходимую версию PHP-FPM и расширения, настраиваем параметры.
Далее устанавливаем менеджер зависимостей PHP Composer.
Открываем 9000 порт для взаимодействия с Nginx.


Настройка контейнера Nginx

Добавим файл Dockerfile в директорию nginx со следующим содержимым:

FROM ubuntu:16.04

RUN apt update && \
  apt install -y nginx mc nano && \
  echo "\ndaemon off;" >> /etc/nginx/nginx.conf

CMD ["nginx"]

EXPOSE 80


За основу берем официальный образ Ubuntu 16.04 и устанавливаем последнюю версию Nginx.
Открываем 80 порт.
Директорию ./nginx/logs используем для хранения логов.
В директории ./nginx/sites-enabled располагаются файлы виртуальных хостов Nginx.

Пример настройки хоста (файл test.com):

server {

    listen 80;

    server_name test.com www.test.com;

    charset utf-8;
    client_max_body_size 128M;

    error_log  /etc/logs/nginx/test_error.log;
    access_log /etc/logs/nginx/test_access.log;

    index index.php index.html;

    root /var/www/test.com/src/public_html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}


В директиве fastcgi_pass используем хост и порт fpm:9000.

Добавим в /etc/hosts:

127.0.0.1   test.com
127.0.0.1   www.test.com


Запуск контейнеров

Для запуска контейнера переходим в директорию, содержащую файл docker-compose.yml и выполняем команду:

docker-compose up -d


Проверить статус контейнеров можно командой:

docker ps -a


Примечание:

Вместо образа ubuntu:16.04 можно использовать более легковесные образы: Baseimage, Alpine.


Источники:

https://docs.docker.com/
https://docs.docker.com/compose/