Установка и настройка Docker в Ubuntu 16.04
22 июля 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/