Docker: user namespaces

С самого начала пользователей Докера, обеспокоенных вопросами безопасности, волновал тот факт, что внутри контейнеров идентификаторы пользователей и групп начинаются с нуля. Иными словами, root в контейнере равносилен root-у во внешней системе. И даже нашлись сценарии (не самые тривиальные, конечно), в которых root выбирается наружу.

В Docker 1.10 добавили поддержку так называемых user namespaces, которые призваны исправить эту ситуацию.

Нужно ли скорее бежать и включать их у себя?

Не спешите! Во всей этой истории предполагается, что зловредный пользователь контейнера хочет атаковать внешнюю систему. Такое возможно в сценариях хостинга и аренды. Если же вы используете Docker сами и на своих серверах, то, конечно же, не будете этого делать, а наоборот будете соблюдать правила безопасности внутри контейнеров. «Внутренний» root заслуживает такого же бережного обращения как и внешний.

Читать далее ▸

Docker: user defined networks — правильная работа с сетью

И раньше, и сейчас, если не указать дополнительных опций, контейнеры попадают в «дефолтную» виртуальную сеть, параметры которой можно узнать командой:

ip addr show docker0

В Docker 1.10 появилась возможность создавать дополнительные (user-defined) виртуальные сети. Делается это так:

docker network create my-net-1

Читать далее ▸

Docker: named volumes — правильная работа с томами

В терминологии Докера, тома (volumes) — это места для длительного хранения важных файлов (баз данных, логов и тд).

Принцип работы прост: определённые директории внутри контейнера (например, /var/lib/mysql или /var/log/nginx) монтируются извне. Можно уничтожить контейнер и создать на его месте новый — например, из обновленного Dockerfile или более свежего базового образа — и при этом драгоценные данные, размещенные на томах, останутся в целости и сохранности.

До версии Docker 1.10 было два способа работы с томами:

  • Bind-mounts — монтирование внешних папок параметром -v /host:/container (как в статье про MySQL внутри Докера).

  • Data-only containers — создание специального контейнера-спутника и использование его файловой системы для хранения данных (параметр --volumes-from).

Читать далее ▸

Docker: запуск нескольких приложений в одном контейнере

Прежде всего, несколько слов о том, правильно ли это.

В интернете можно встретить утверждения вида «философия Докера предполагает ровно один процесс». Я не думаю, что это правда. Философия Докера строится не вокруг технических деталей (таких как количество процессов), а вокруг идеи удобной упаковки, доставки и развертывания приложений. Вы сами выбираете подход — десяток изолированных микросервисов или один толстый контейнер all inclusive. Действуйте по ситуации!

Вот одна классическая ситуация: Apache + MySQL + cron.

Dockerfile может выглядеть так:

FROM ubuntu:14.04

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 mysql-server

CMD (mysqld_safe&) && apache2ctl start && cron && sleep infinity

Читать далее ▸

Django Reinhardt Nuages Chords

Surprisingly, it’s fairly hard to find proper guitar chords for «Nuages» by Django Reinhardt. Below is my own attempt, in E, as performed by Djangoband in Paris:

Django Reinhardt Nuages Chords

(PDF, PNG)