Pull to refresh
6
0
Дмитрий Вапельник @dvapelnik

Back-end Web Development

Send message
есть несколько вариантов:
  • можно для каждого указывать локальную директорию хранения (-v) — например, нужно хост-директорию (хост-файл) пробросить в контейнер или же сохранить данные между запусками контейнера (для примера, можно вынести папку для хранения БД в файловую систему хоста и тогда базы будут сохраняться между запускати контейнера для баз данных),
  • можно завести какой-то контейнер и в него пробрасывать папочки (--volumes-from) — например, если данные нужно расшарить между несколькими работающими одновременно контейнерами
на DockerHub есть минималистичный debootstrap (размером всего 87.02 MB) для убунты, в котором нет лишнего софта, утилит и демонов. есть debootstrap для дебиана (навскидку нашел этот образ размером 122.6 MB)
о, так с Вашей статьи в блоге все и началось. изначально у меня приблизительно так оно и было.

у меня был LAMP-образ, в проекте была дополнительная папка .docker с определенной струкрутой, был файл, который инициализировал запуск контейнера, прокидывал туда папки и конфиг для веб-сервера и прописывал в DNSMasq; и был файл, который запускался уже в контейнере и он уже создавал пользователя, БД на mysql-сервера хост-машины. все работало, все было круто, но для меня оно все равно было неким нагромождением допиленного неструктурированного кода, который нужно было когда-то переписать. потом я познакомился с Fig, разобался с линкованием, случайно удалил свои репозитории и пришлось «рукам дойти» для переписывания этого всего добра.

не использование DNSMasq хорошо когда у Вас один проект и вы его можете спело повесить на http://localhost:80/, но если их несколько (можно вести несколько проектов; можно вести один и параллельно пилить что-то для себя; можно вести один проект, вести что-то для себя и изучать параллельно что-то третье новое для себя), то да, можно раскидать на несколько портов на интерфейсе хост-машины и не париться, но нужно будет запоминать порты — это уже не гуд, осмысленные доменные имена намного лучше, чем номера портов.

на самом деле действий для развоначивания проекта в моем варианте не намного больше и их нужно произвести единожды для проекта — дальше его просто нужно запустить и остановить. при этом не нужно выходить за рамки папки с проектом
я считаю, что это было бы излишеством ибо тогда нужно было бы хранить всю папку для БД в своей директории при отключении окружения. да, это решило бы вопрос с разворачиванием дампов, но это породило бы дерево новых папок, которые не нужны. я осознанно отказался от предложеной Вами идеи в пользу дампов только из-за чистоты
Как минимум, это писалось для себя чтобы умпростить разворачивание приложений хотя бы для того, чтобы запустить. Не знаю как кого, но меня утруждает создавать где-то новый поддомен и выливать туда файлы или использовать подпапки для разных проектов. К тому же хотелось иметь все 4 версии PHP.

но для Вас опишу более подробно. инструмент позволяет в несколько действий (копирование папочки к проекту, редактирование двух конфигов, копирование дампа базы, запуск скрипта) развернуть приложение в отдельных контейнерах и зайти на свой проект через браузер по ссылочке. я ответил на Ваш вопрос?

и еще относительно 1: только что проверил репозитории Ubuntu — обновления для docker.io не наблюдаются и у меня у самого Docker version 1.0.1, build 990021a
  1. информацию о docker exec я учту, спасибо. я видел команду, но не разбирался в новых изюминках
  2. мне масштабировани fig-ом как-то вообще не к телу. мне важно было написать удобочитаемый конфиг для оркестрирования нескольких машин ибо в формате команды docker run как-то вообще нечитаемо
  3. относительно статьи в одну строку: я не считаю, что надо было приводить сам код и пояснения к нему если он доступен в репозитории и не кроет в себе никаких загадок
кстати, вот нашел в своих закладках ссылку «If you run SSHD in your Docker containers, you're doing it wrong!»
я тут ищу и не могу найти: при помощи fig можно как-то устанавливать предел использования оперативной памяти и CPU?
почему не реализовать «социальность» и «развертывание сервера» не в виде облачной IDE, а в виде плагина к тому же PhpStorm?
это можно автоматизировать. я создаю контейнер с некоторым именем, тут же дописываю этот домен в dnsmasq.conf и к контейнеру уже можно получать доступ по доменному имени: containerName.doc
лично я вижу резон в работе с контейнером по ssh только в том случае, когда нужно достучаться к контейнеру, который развернут на удаленной машине таким образом, чтобы не было возможности попасть в консоль самой машины
тоесть, если есть домашний laptop, есть server, есть container и Вы — владелец server — не хотите давать доступ к server третьему лицу, которому нужно дать доступ c laptop к container. в таком случае, вы поднимаете на container ssh и прокидываете его порт на интерфейс server. laptop подключается к этому порту и попадает в container по ssh — вот и виртуализация на основе Docker
не по умолчанию, возможно
возможно, Вы не знали или не дошли до мануала. так вот, на сайте Docker.com есть ссылка на маны по приложению. там довольно много информации, которая очень помогает даже если с первого прочтения не ясно что это и для чего это. Потом, когда слалкиваешся с вопросом, то всплывает ман. Согласен, сначала несколько трудно и непривычно понять концепцию контейнеров, но постепенно начинаем думать в этом русле и все становится прекрасным, но с некотороыми нюансами
в частности, в разделе Dockerizing Applications есть описание использование ключей -i, -t.
Еще совет: если вы просто запустите приложение

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

то после его завершения у Вас останется остановленный контейнер и если он Вам не нужен, то можно ручками удалить, но можно сказать, чтобы docker удалял его по завершению работы (выхода из него)

$ sudo docker run --rm ubuntu:14.04 /bin/echo 'Hello world'
для начала можно просто запустить контейнер (все по ману)

$ sudo docker run -it imageName /bin/bash

после этого вы попадаете в консоль самого контейнера
у меня пока не было таких ситуаций, когда нужно было подключаться к контейнеру по ssh. мне кажется, что это вообще противоречит концепции. если нужно попасть в консоль работающего контейнера, то, да, пишем просто

$ sudo docker attach containerId

на заметку: узнать IP можно без грепа:

sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' containerId
не советовал бы знакомиться с прелестями Docker на основе готовых решений с копипастом команд для запуска контейнера
намного интереснее и полезнее реализовать некоторую рутинную задачу в контейнере. для меня это запуск контейнеров с различными версиями ПО для вебразработки. пока дифференциация ПО заключается только в версиях PHP (5.3, 5.4, 5.5). для того, чтобы запустить проект на некоторой версии PHP — запускаем контейнер с этим сетапом ПО
да, кажется, на это и похоже
А сталкивался ли кто с шумами в виде «ощущения повышенной нагрузки» (не знаю как описать, но будто выдающая аудиосистема захлебывается) при изменении настроек эквалайзера (повышение уровня басов) PulseAudio под Ubuntu Linux 14.04.
Возможно, это как-то решается?
советую ознакомиться с этим комментарием от torf на счет использования LinuxJavaFixes. я тоже мучался с этой проблемой и мне помогло
спасибо за подсказки
довел я до ума сей скрипт и его запуск под себя
1. для запуска от своего пользователя использую порд 25025 и подкорректировал запуск демона:
/etc/init.d/fakemail

start_fakemail()
{
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --chuid myusername --exec $DAEMON -- $DOPTIONS >/dev/null 2>&1 &
}

2. для того, чтобы корректно просматривать сообщения советую добавить нужное расширение к сохраняемым файлам — eml, у меня установлен Thunderbird и он корректно открывает это сообщение — скорее всего нам же нужно не только знать отправилось ли сообщение, а еще и посмотреть как оно отрендерилось. потому добавляем следующее в файл fakemail.py — у меня он лежит тут /usr/local/bin/fakemail.py
находим строку

filename = os.path.join(self.path, "%s.%s" % (recipient, count))

и изменяем на

filename = os.path.join(self.path, "%s.%s.eml" % (recipient, count))

теперь мы можем открывать письма для просмотра например с помощью Thunderbird
спасибо за связку — все работает как мне и требовалось
<хотелка>вот было бы еще шикарно чтобы письма сохранялись не от рута</хотелка>
добавлю, что для более корректного добавления (не знаю кто как, но мне больше нравится работать через интерфейс того, что уже существует, нежели пилить свои грабли — я имею в виду ручную линковку файлов) в начало файла-демона следует добавить следующий код

### BEGIN INIT INFO
# Provides:          fakemail
# Required-Start:    $remote_fs $syslog $nullmailler
# Required-Stop:     $remote_fs $syslog $nullmailler
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

и далее добавить инициализировать демон

update-rc.d fakemail default

взято отсюда

Information

Rating
Does not participate
Location
Винница, Винницкая обл., Украина
Date of birth
Registered
Activity