DevOps, Linux, 2 git`a
  • Обо мне
  • Категории
  • Теги
  • Архив

Часть 1.1. Docker. Введение.

Содержание

  • Вводная
  • Структура
  • Базовый образ
  • Проект
    • Компонент №0
      • Контейнер с данными mysql
      • Контейнер с данными nginx

Docker

Disclaimer: Статья написана как напоминание в первую очередь для себя и не на что не претендует. Но надеюсь она сможет помочь кому-нибудь. Мне бы точно помогла, если бы была в начале моего знакомства с докером.

Вводная

К моменту как вы начнете это читать у вас должно быть минимальное представление о том что такое docker. А если представления нет, то отправляемся сюда, а потом в обязательном порядке проходим интерактивный туториал тут. После этого представление должно появится, а понимание вскорости прийдет. Для работы с докером на рабочей машине используется boot2docker: os x, windows. А если у вас линукс в качестве рабочего компьютера (надеюсь что нет ☺), то нативная поддержка.

Структура

Для того чтоб понять как работает технология надо начать ей пользоваться. А лучше сделать на ней рабочий продукт. Я опишу два таких проекта в соответствующих двух частях. Часть первая - вводная часть и простой домашний проект. Часть вторая - проект для моей работы, рассчитаный на нагрузки, который станет частью системы мониторинга. А так же подготовка инфраструктуры для будущих проектов на докере.

Часть 1.1. Docker. Введение.
Часть 1.2. Mysql, php, nginx via docker.
Часть 1.3. Линковка. Общие тома. Запуск. PhpBB.

Краткая версия доступна тут, github репозиторий.

Базовый образ

В качестве основного образа, который будет использоваться для построения всей инфраструктуры, будет использован baseimage-docker.

Внимание: Проблемы, которые решает baseimage-docker на момент написания этих статей еще присутствуют (версия docker 1.5). Но в будущем они могут быть исправлены. Прошу проверять актуальность решения по использованию baseimage-docker.

Проект

В качестве домашнего проекта для испытания докера была выбрана задача по развертыванию форума phpBB. Для форума потребуется следующие компоненты:

  • база данных: mysql
  • обработчик php: php-fpm
  • фронтенд: nginx

Компонент №0

Докер – система, которая не сохраняет данные внутри контейнера. Вернее так: данные сохраняются в контейнере до тех пор пока он запущен. Для постоянного сохранения данных есть два подхода. Первый: монтирование папки из хост системы внутрь контейнера как тома (volume). Второй (канонический, на котором настаивает докер): это использование data volume контейнеров. Именно этот второй я и буду использовать.

Контейнер с данными mysql

Необходимо хранить данные для БД mysql. Опишу создание контейнера с данными в следующем Dockerfile:

    FROM busybox
    RUN \
        adduser -H -D mysql mysql && \
        mkdir /var/lib/mysql && \
        chown -R mysql:mysql /var/lib/mysql

    VOLUME /var/lib/mysql
    CMD /bin/sh

FROM - на базе легкого образа busybox
RUN - исполняются следующий команды: создается пользователь mysql с соответствующей группой, создается директория /var/lib/mysql и присваиваются соответствующие права
VOLUME - директория /var/lib/mysql назначается как том
CMD - команда которая исполняется при старте контейнера

Соберем образ:

    docker build -t mysql_datastore /путь/до/папки/с/докерфайлом/

где mysql_datastore - имя образа

Наш новый образ можно посмотреть командой docker images

    REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    mysql_datastore            latest              48270e80e3c5        3 days ago          2.436 MB
    busybox                    latest              4986bf8c1536        8 weeks ago         2.433 MB
Контейнер с данными nginx

Php файлы форума, а так же конфиг сайта для nginx так же необходимо сохранить внутри контейнера с данными.

Следующий докерфаил содержит инструкции для автоматического скачивания и распаковки файлов phpBB и русской локализации. А также подключение конфига nginx.

FROM busybox

ADD https://www.phpbb.com/files/release/phpBB-3.1.3.zip /tmp/phpbb/phpbb.zip
ADD https://www.phpbb.com/customise/db/download/109011 /tmp/phpbb/phpbb-rus.zip
WORKDIR /tmp/phpbb
RUN \
    mkdir -p /etc/nginx/conf.d /www/phpbb && \
    unzip phpbb.zip -qq -d . && \
    unzip phpbb-rus.zip -qq -d . && \
    cp -r  phpBB3/* russian_1_1_3/* /www/phpbb/ && \
    rm -r /tmp/phpbb && \
    chown -R www-data.www-data /www/phpbb/cache /www/phpbb/files /www/phpbb/store /www/phpbb/images/avatars/upload /www/phpbb/config.php
ADD phpbb.conf /etc/nginx/conf.d/
VOLUME /etc/nginx/conf.d
VOLUME /www
CMD /bin/sh

Прошу обратить внимание, что инструкция ADD скачивает последнии на данный момент файлы форума (версия 3.1.3) и локализации (версия 1.1.3). К сожалению phpBB не выкладывает файлы по универсальным ссылкам и для получения последней версии возможно придется исправить адреса на актуальные. Далее происходит распаковка архивов и выкладывание по пути /www/phpbb, так же папкам /www/phpbb/cache, /www/phpbb/files, /www/phpbb/store, /www/phpbb/images/avatars/upload и файлу /www/phpbb/config.php меняется владелец на www-data. Это необходимое условии, е для нормального функционирования форума. Инструкцией ADD phpbb.conf /etc/nginx/conf.d/ добавляется фаил phpbb.conf по соответствующему пути. При создании образа, фаил phpbb.conf должен находится рядом с нашим Dockerfile'ом. Инструкцией VOLUME папки с конфигами и файлами phpBB переводятся в том.

Содержимое phpbb.conf:

server {
            listen 80;
            root /www/phpbb;
            location / {
            index index.php ;

        location ~ /(config\.php|common\.php|includes|cache|files|store|images/avatars/upload) {
                deny all;
                internal;
        }

            location ~ \.php$ {
                    try_files $uri =404;
                    include fastcgi_params;
                    fastcgi_pass php-fpm:9000;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }
                    }
}

Создадим образ nginx_datastore: docker build -t nginx_datastore /путь/до/папки/с/докерфайлом

Создание остальных компонентов далее "Часть 1.2. Mysql, php, nginx via docker"

Комментарии
comments powered by Disqus

Опубликовано

фев 27, 2015

Изменено

мар 6, 2015

Категория

devops

Теги

  • data container 4
  • datastore 4
  • docker 4
  • mysql 3
  • nginx 5
  • php 3
  • phpbb 3

Контакты

Получать обновления

  • Creative Commons License DevOps, linux, 2 git`a. Дмитрий Леонов
  • Создано с помощью Pelican. Тема Elegant от Talha Mansoor. Перевод темы Дмитрий Леонов