Docker геттинг стартед

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

Установка довольно проста, только как оказалось 32-х разрядные системы не поддерживаются. Для Mac или Windows необходимо просто скачать и установить Docker Toolbox. После установки проверьте в консоли

Поехали в hello world

Ценность докера в том, что он позволяет запускать изолированные операционные системы и приложения в них, управлять ими. Кроме того, немалую ценность несут готовые образы разных продуктов, например Redmine, сколько раз я слышал о сложной установке, но с докером всё превращается в: 1.скачал образ, 2. запустил контейнер с приложением, 3. всё.

Откройте Docker Hub и в строке поиска наберите Redmine. Один из предложенных вариантов это оффициальный репозитарий Redmine. Кстати, отличный пример, обратите внимание на ссылки Dockerfile, это рецепты того как эти образы создавались.

Наберите в консоли docker pull redmine, и докер скачает вам образ redmine с меткой latest (latest это соглашение именования образов, подразумевая “последний актуальный”).

Произойдёт следующее, docker запустит только скаченный образ redmine, образ несёт в себе инструкции по запуску контейнера, которые начнёт выполнять, например вы увидите как ставятся гемы. Так, гемы поставились и вроде бы в консоли есть заветная надпись о Rails 4.2.7.1 application starting in production on http://0.0.0.0:3000, но адрес в браузере не открывается. Всё просто, этот адрес работает в подсети этого контейнера. Можно проверить, наберите docker ps, там должен быть список запущенных контейнеров, точнее в вашем случае только один. И вот обратите внимание на поле PORTS, запомните и продолжим.

Чтобы пробросить порт на основную машину, надо при запуске контейнера использовать параметр -P. То есть остановите запущенный ранне контейнер, запустите его дополнив аргументом -P, или с аргументом -p 3000:3000. Теперь проверьте docker ps, поле PORTS изменилось, что-то типа 0.0.0.0:32768->3000/tcp теперь можно открывать http://0.0.0.0:32768

Всё, рабочий Redmine. Видимо первый вопрос, как отвязать запущенный контейнер от консоли, так чтобы при завершении консоли контейнер не останавливался. Для этого надо запустить контейнер с аргументом -d, что значит daemon, но без аргумента -it, потому что они взаимоисключающие. Чуть позже я раскрою тему как вынести хранение файлов приложения и базу данных во вне из контейнера.

Dockerfile

Только что мы запустили контейнер на основе Dockerfile, если посмотреть из чего он состоит то можно увидеть список инструкций. Другими словами при помощи Dockerfile можно собрать свой образ. И более того, для своего может быть кастомного Redmine можно использовать этот образ выше. Инструкция FROM указывает родительский образ. Вот краткий список возможных инструкция для Dockerfile, полный доступен по ссылке.

  • FROM – какой образ взять за основу
  • RUN – запуск команд
  • EXPOSE – сообщает докеру о предполагаемом активном порте
  • ADD – копирует файлы, папки, или файлы с удалённых источников
  • ENTRYPOINT – инструкция которая будет запущена при запуске контейнера
  • VOLUME – точка монтирования
  • WORKDIR – основная рабочая папка

Leave a Reply

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