Начало работы с Docker

После теории перейдем к практическим занятиям. Для этого нам понадобится Linux с установленным Docker либо Doot2Docker на Windows или OSX. Как это сделать, доступно написано на сайте разработчика. На тестовой машине у меня версия 1.3.2:

┌─[ ~/blog ]
└─[root@core (пт січ 09 04:02:32)] ·> docker info
Containers: 15
Images: 302
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 368
Execution Driver: native-0.2
Kernel Version: 3.13.0-43-generic
Operating System: Ubuntu 14.04.1 LTS

Создаем первый контейнер

Создаем наш первый контейнер на основание образа ubuntu:

docker run -i -t ubuntu /bin/bash

Команда run создала контейнер и выполнила /bin/bash внутри нового контейнера. Ключ -i открывает STDIN, а -t говорит Docker открыть pseudo-tty в контейнер, что бы мы могли с ним работать. Вот он:

root@d40430154f65:/#

Теперь мы внутри контейнера 🙂

Внутри контейнера

Внутри контейнера доступны все команды образа, на основание которого он был создан. В нашем случае это Ubuntu Linux. Docker также присваивает контейнеру свой уникальный IP:

root@d40430154f65:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
825: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:42:ac:11:01:38 brd ff:ff:ff:ff:ff:ff
    inet 172.17.1.56/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:138/64 scope link
       valid_lft forever preferred_lft forever

Контейнеру присвоен адрес 172.17.1.56.

Так же, мы можем установить любой дополнительный софт внутри контейнера. Давайте поставим vim редактор:

root@d40430154f65:/# apt-get update && apt-get install vim

Но это так, забавы. Давайте сделаем что-то более интересное.

Привет, Jekyll!

Jekyll – это движок на Ruby, который позволяет создать веб-сайт с простых текстовых файлов. Движок не использует базы данных, что позволит нам пока с этим не заморачиваться.

Я подготовил образ для создания контейнера. Образ создается с помощью простых команд в Dockerfile. Как видите из файла, здесь мы уже сталкиваемся с понятием Volumes, нам нужно вынести файлы нашего будущего сайта за рамки контейнера. Помните? Пока существует контейнер – существуют и файлы. Что будет если мы пересоздадим контейнер? Правильно, все файлы будут уничтожены. Для этого в моем образе предусмотрен Volume /src в котором и будет храниться исходник сайта (пример статьи).

mkdir src

Внутри src можем создать тестовый файлик:

echo "<H1>Helo world</H1>" > src/index.html

Создаем контейнер и компилируем сайт:

docker run -v ${PWD}/src:/src vkovalyshyn/jekyll build

Новый ключ -v отвечает за «проброс» внутрь контейнера локальной директории. Больше ничего этот контейнер не делает, соответственно он сразу же и остановиться.

Теперь можем запустить сайт:

docker run -d -v ${PWD}/src:/src -p 4000:4000 vkovalyshyn/jekyll serve --host 0.0.0.0

Новый ключ -d отвечает за запуск контейнера в фоновом режиме, а ключ -p – за проброс порта наружу. С помощью docker ps можем увидеть наш контейнер:

CONTAINER ID        IMAGE                                       COMMAND                CREATED              STATUS              PORTS                                                                                    NAMES
85f0766d4643        vkovalyshyn/jekyll:latest                   "jekyll serve --host   15 seconds ago      Up 14 seconds       0.0.0.0:4000->4000/tcp                                                                   sharp_kirch

Все, наш сайт в Docker работает! Открываем страницу и любуемся результатом.

Что бы остановить контейнер, воспользуемся CONTAINER ID:

docker stop 85f0766d4643

Удалить контейнер:

docker rm 85f0766d4643

1 Comment on "Начало работы с Docker"


Leave a Reply

Your email address will not be published. Required fields are marked *