Знайомство з docker

Прийшов час познайомитися з Docker.

Якщо коротко, що таке Docker. Точніше трохи філософії Docker. Це відкритий програмний продукт, що дозволяє розгортати додатки в ізольованому контейнері. Так, можна розглядати це каr такий собі мегасупер chroot. Філософія докера має на увазі, що в одному контейнері можна розгорнути один додаток. Наприклад, можна розгорнути веб-сервер з якимось веб-сайтом або веб-додатком і надалі це контейнер можна переносити на інший сервак, в продакшн, в хмару і не потрібно буде ніяких залежностей. Просто потрібен буде докер і все буде працювати.

Чим відрізняється Docker від віртуалізації? Є кілька типів віртуалізації: OS-level, paravirtualization, virtualization, emulation. Але Docker не відноситься ні до якої віртуалізації. Це скоріше контейнеризація. На ОС ставиться движок docker.io і все. Потім ви качаєте потрібний образ, наприклад, ubuntu і розвертаєте його потрібної програми. Образи для докера вже легковагі, ось наприклад, у мене остання Убунту важить 134.7 MB.

Дуже наочна картинка, ніж Docker відрізняється від віртуальної машини:

Знайомство з docker

Тобто, нам не потрібно створювати віртуальну машину, ставити на неї ОС, все ліби, купу софта, просто для того щоб машина працювала. А ще потім розгорнути на ній наш додаток або сайт.

Ще для прикладу, можна згадати концепції хмарних обчислень SAAS, PAAS, IAAS.

SAAS - це додатки працюють в хмарі, приклад - Dropbox.

PAAS - це стек інструментів і сервіс для розробки хмарних додатків.

IAAS - це серверна інфраструктура для клієнтів, самі клієнти вже використовують сервера і сховища, для своїх хмарних додатків.

Так ось, на прикладі цих концепцій Docker і є SAAS. Тобто, ми підняли додаток в контейнері і як воно там живе і які залежно у нього нас не хвилює.

Ближче до справи, як то кажуть. Помацаємо на практиці. Є у мене ubuntu server 14.02, поставимо на нього Docker і розгорнемо контейнер з веб-сервером Apache.

Ставимо докер дуже просто

apt-get update
apt-get install docker.io

service docker start

Усе. Docker встановлений. Тепер нам потрібен образ системи, на якій будемо розгортати наш контейнер. Список образів можна подивитися командою

Качний образ ubuntu

docker pull ubuntu

Образ викачаний і тепер на основі цього способу можна розгорнути контейнер. Можна просто запустити контейнер командою

docker run -name test -d -p 8888: 80 ubuntu / bin / bash

test - ім'я контейнера

ubuntu - образ, який ми скачали

-p 8888: 80 означає, що 80 порт контейнера проброшен на порт 8888 хостовой машини

-d означає daemon режим

В результаті отримуємо контейнер із запущеним bash. Заходимо і потрапляємо в шелл.

docker attach test

1b3f9a138209 - це id нашого контейнера.

Тепер можна встановити звичайно apache2 і все, але не тут то було. Апач підніметься, але в автозавантаженні його не буде і ніякі Ініт-скрипти не допоможуть. Потрібно зібрати контейнер з Dockerfile, в якому вкажемо інструкції як і що ставити.

Створюємо в home директорії файлик Dockerfile і пишемо туди

FROM ubuntu: latest
MAINTAINER Test
RUN apt-get update
RUN apt-get install apache2 -y
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR / var / log / apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR / var / run / apache2
ENV APACHE_LOCK_DIR / var / lock / apache2
ENV APACHE_SERVERADMIN admin @ localhost
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT / var / www
ADD ./conf/apache2.conf /etc/apache2/apache2.conf

ADD ./conf/start.sh /start.sh
RUN chmod 0755 /start.sh
CMD [ "bash", "start.sh"]

У файлі, як видно, вказуємо образ з якого будемо робити контейнер. Вказуємо команди установки сервера Apache і змінні до нього. А також беремо конфиг від апача з хостовой машини і додаємо скрипт start.sh

/ Conf створюємо скрипт start.sh пишемо туди

# Start apache
/ Usr / sbin / apache2 -D FOREGROUND

Робимо його виконуваним

chmod + x start.sh

Тепер нам потрібно зібрати свій образ з цим файлом. Саме образ, а не контейнер.

docker build -t apache2.

Ім'я образу буде apache2. Dockerfile він візьме з директорії, де ви запустили команду. Файл повинен називатися саме Dockerfile (перший символ у верхньому регістрі).

Якщо все пройшло успішно, то в списку образів буде образ apache2.

Тепер збираємо контейнер

docker run -i -t -name test -d -p 8888: 80 apache2

Дивимося що вийшло. команда

Покаже нам все контейнери і запущені вони чи ні.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9be9493aa841 apache2: latest bash start.sh 3 hours ago Up 1 seconds 0.0.0.0:8888->80/tcp test

Все ок, бачимо що контейнер запущений. Перевіримо чи працює апач.

І бачимо html код стандартної сторінки apache. Все працює.

docker start [container-id] - запустити контейнер

docker stop [container-id] - зупинити контейнер

docker rm docker start [container-id] - видалити контейнер

docker rmi [image-id] - видалити образ системи

docker pull [image-id] - отримати образ (centos, debian, ubuntu etc.)

docker top [container-id] - подивитися список процесів контейнера

docker ps -a список всіх контейнерів

Поки все, далі буде ...

Схожі статті