Ответы пользователя по тегу Docker
  • Деплой на VPS c лёгкостью Heroku?

    @askhat
    Ответ написан
    Комментировать
  • Зачем добавлять пользователя в группу docker?

    @askhat
    Вы получили права на исполнение бинарей докера для своего пользователя
    Ответ написан
    Комментировать
  • Как автоматически запускать процессы (tor, privoxy) в Docker со стартом контейнера?

    @askhat
    Почему вы хотите запускать несколько сервисов в одном контейнере? Идеология докера: один процесс — один контейнер. Задача в тому чтобы изолировать tor и privoxy в отдельных контейнерах, а затем соединить — по сети или общими директориями.
    Ответ написан
    4 комментария
  • Docker swarm вопросы по архитектурое?

    @askhat
    > По идее nginx должен быть поднят как для боя, так и на машинке для разработчиков

    Плохая идея. В вашем кластере должен быть один сервис прослушивающий соединения на 80 порту, не важно Nginx это или что угодно. Чтобы решить вашу проблему и маршрутизировать запросы, можно использовать разные порты, что абсолютно дилетантски, или матчить запросы в Nginx:

    example.com
    dev.example.com // как я понимаю слушает только 192.168...
    
    или
    
    example.com/
    example.com/dev // imho не удобно
    Ответ написан
    3 комментария
  • Docker: Как увидеть локальную сеть из контейнера?

    @askhat
    Успешная попытка получить доступ к eth0 из контейнера без использования network: host, будет тем же самым что и использование network: host.

    Через CLI флаг:
    docker run --network host ...

    Через Compose:
    some-service:
      network_mode: 'host'


    https://docs.docker.com/network/host/
    Ответ написан
    1 комментарий
  • Стоит ли все "запихивать" в Docker?

    @askhat
    Если всё запихать в докер, это не даст безопасность по дефолту. Магии нет, безопасность зависит только от вас.

    На вопрос «стоит ли запихивать в докер всё», я отвечаю положительно. Потому что это даст удобство. (1) Общение между контейнерами будет осуществляться через интерфейс докера, что значительно облегчит конфиги. (2) Управление средой станет централизированым и унифицированым, а главное явным. (3) Масштабирование, с помощью докера можно легко запустить дополнительный процесс контейнера, или развернуться на других машинах с помощью докер сворм.

    Контейнеры действительно не должны быть зависимы от стейта, однако приложения в нутри них могут. Для большинства приложений, как СУБД, это вообще не избежно. И тут докер предоставляет удобные средства: вы всегда можете просто замапать директорию контейнера на директорию хоста, или воспользоваться беспроцессным дата контейнером, или создать вольюм, и даже подключить удалёный вольюм через nfs.

    В общем, да—пихайте всё в докер.
    Ответ написан
    2 комментария
  • Как выполнить gulp.task внутри docker?

    @askhat
    Чтобы команда была доступна для запуска из шелла, gulp надо ставить с ключём -g (global) для npm. Либо запускать так:

    $ node node_modules/.bin/gulp
    Ответ написан
    Комментировать
  • Как задиплоить docker-compose приложение на VPS?

    @askhat
    Нужно добавить удалённую машину в docker-machine и перейти в её контекст.

    $ docker-machine create --driver generic \
         --generic-ip-address $REMOTE_IP_OR_HOSTNAME \
         $REMOTE_MACHINE_NAME
    
    $ eval (docker-machine env $REMOTE_MACHINE_NAME)


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

    Ссылки:
    Ответ написан
    8 комментариев
  • Как работают тома в Docker?

    @askhat
    Не считая хост директорий, есть 2 способа делать персистанс в докере: (1) дата-контейнеры и (2) вольюмы. На примере композа, рассмотрим оба варианта.

    1. Дата-контейнеры
    Самый старый и, на мой взгляд, костыльный способ. Заключается в том, что данные будут сохраняться в контейнере в котором не запущен процесс, и по факту контейнер остановлен. В качестве такого контейнера можно использовать «основной» имедж или использовать специальный, как tianon/true.
    docker-compose.yml
    version: '2'
    services:
      web:
        image: 'nginx'
        volumes_from:
          - 'data'
      data:
        build: './public_html'

    public_html/Dockerfile
    FROM nginx
    ADD index.html /var/www/public_html
    CMD /bin/true

    Обратите внимание на директиву CMD в Докерфайле дата-контейнера. Не смотря на то что исходным имеджем является nginx, как и в сервисе web, команда /bin/true не запустит процесс, а лишь сигнализирует докеру об успешной сборке контейнера. docker-compose ps покажет что дата-контейнер иммет статус типа Exit..., и это именно то состояние которого мы ищем для этого контейнера.
    Прим.: для tianon/true директиву CMD указывать не обязательно, однако придётся указать директиву VOLUME, так как в отличии от основного имеджа, она не указана в исходном Докерфайле.

    2. Вольюмы
    Или, как их называют официально, именованные вольюмы. Более очевидный способ работать с персистансом.
    docker-compose.yml
    version: '2'
    services:
      web:
        image: 'nginx'
        volumes:
          - 'web_data:/var/www/public_html'
    volumes:
      web_data:

    Такая конфигурация автоматически создаст вольюм с именем web_data и замапит его на папку /var/www/public_html внутри контейнера web, при старте композа. Обратите внимание, что в этом примере вольюм обозначен как ключ без значений, это валидный ямл синтаксис, и, в данном случае, означает что композ сфолбэчит опции вольюма на дефолтные, обязательной из которых является driver: 'default'. В случае если вы поднимаете композ локально или на удалённой докер машине, дефолтный драйвер вам подойдёт, если только вы не знаете что нет.
    Прим.: из драйверов, которые представляют особый интерес, во всяком случае мне, драйвер для NFS и DigitalOcean Block Storage.

    Дефолтное поведение докера — не удалять ничего пока пользователь не попросит этого эксплицитно, это распространяется как на дата-контейнеры, так и на вольюмы.
    Ответ написан
    2 комментария
  • Как поставить ownCloud за Nginx в Docker?

    @askhat Автор вопроса
    Проблема в том, что proxy_pass http://127.0.0.1:6789; смотрит на собственный контейнер, а не на сервис owncloud. К счастью docker-compose добавляет адреса сервисов в /etc/hosts, в чём можно убедиться выполнив команду docker exec nginx cat /etc/hosts, там будет строчка 172.17.0.2 owncloud 8a567934bb13.

    Значит если изменить docker-compose.yml, заменив ports: - 6789:80 на expose: - 80, и nginx.conf, заменив значение proxy_pass на http://owncloud; — всё заработает.
    Ответ написан
    3 комментария