Docker

Post Tag: tech

Что-то давно не писал в блог, пора исправляться. Про докер слышал давно и много, а тут как раз был релиз на Windows. Надо пробовать.

Немного теории: докер это - система управления приложений в среде виртуализации на уровне операционной системы. Зачем это нужно? Свои приложения можно запускать в любом месте и везде будет одинаковое окружение. А поскольку это не полноценная виртуализация, то работает все намного быстрее. Более подробно можно прочитать в этом замечательном руководстве, есть и перевод на хабре.

Теперь приступим к практике. Для образовательных целей сделаю очень простой докер контейнер с моим блогом. Контейнеры строятся на основе образов, а образы, в свою очередь, можно скачивать из официального репозитория или сделать самим из докерфайлов.

Использовать готовый образ не интересно, поэтому создам собственный.

FROM alpine:latest

ENV HUGO_VERSION 0.16
ENV HUGO_BINARY hugo_${HUGO_VERSION}_linux-64bit

RUN apk add --no-cache git

# Download and Install hugo
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}.tgz /usr/local/
RUN tar xzf /usr/local/${HUGO_BINARY}.tgz -C /usr/local/bin/ && rm /usr/local/${HUGO_BINARY}.tgz

RUN git clone https://github.com/bege13mot/bege13mot.blog.git

EXPOSE 1313

CMD cd /bege13mot.blog/ && hugo server -wD -p 1313 --bind=0.0.0.0

В принципе все понятно, но несколько уточнений по командам:

Докерфайл готов, и теперь построим образ на его основе:

docker build -t test -f D:\Docker\dockerTest .

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

Образ построен, можно запустить контейнер:

docker run -p 1313:1313  test

В результате, по адресу localhost:1313 можно читать блог.

Продолжим эксперимент дальше. Можно зайти внутрь контейнера и, например, написать новый пост.

docker run -p 1313:1313 -it test /bin/sh

Новый пост написать можно, но если остановить контейнер, то изменения в файловой системе не сохранятся. Это можно обойти, если использовать общую директорию между хостом и контейнером.

Для докера на Windows эту возможность нужно включить дополнительно, об этом хорошо написано в этом руководстве.

А после выполняем:

docker run -p 1313:1313 -v D:/Docker/content:/bege13mot.blog/content/post -it test /bin/sh

А можно заранее создать файлы и скопировать их в контейнер при помощи команды cp.

docker cp <containerId>:/file/path/within/container /host/path/target

На этом я эксперименты завершил. Надеюсь, пригодится в будущем.

comments powered by Disqus