Ответы пользователя по тегу Docker
  • Как из контейнера запустить команду в "соседнем" (docker-compose) контейнере?

    kumaxim
    @kumaxim
    Web-программист
    Добавь в нужные тебе контейнеры sshd и, по необходимости, поключайте из одного контейнера в ssh в другой и выполняй что тебе там надо. Это самый правильный путь, на мой взгляд.

    Еще можно в контейнер, из которого ты хочешь выполнять команды в других контейнерах, установить docker и прокинуть socket докера с хоста в контейнер. Побочный эффект тут в том, что твой контейнер вдруг баганет, у тебя может рухнить все остальные запущенные контейнеры на хостовой машине.
    Ответ написан
  • Как найти причину не удачного запуска своего docker контейнера?

    kumaxim
    @kumaxim
    Web-программист
    1. Дело в том что после запуска я вижу id вновь созданного контейнера но в списке активных(ps) его нет, зато он висит в списке остановленных(ps -a). Как посмотреть все логи при запуске чтобы понять в чем проблема, ниже привожу мой конфиг, возможно кому то станет сразу ясно в чем проблема.

    Смотри, когда ты запускаешь docker run... твой только что созданный контейнер выполнит команду, указанную после имени образа. Эта команда отработает, сделает какой-то результат и завершиться. Поскольку внитри твоего контейнера больше нет никаких активных процессов, докер остановит твой контейнер за ненадобностью. Именно так он работает. Если хочешь посмотреть логи своего контейнера, тогда смотри мануал по команде docker logs

    2. Мне требуется добавить в свой образ мой скрипт написанный на Python но на git его нет, думаю как грамотней это сделать, добавить скрипт и после сделать просто commit?

    Если тебе надо образ собрать один раз на своей локальной машине, тогда смотри мануал по ADD/COPY. Если же тебе этот образ надо будет собирать на CI-сервере или он понадобится твоим коллегам в дальнейшем - выкладывай на git
    Ответ написан
    Комментировать
  • Как ограничить права на запуск контейнеров Docker?

    kumaxim
    @kumaxim
    Web-программист
    1. Сказать пользователю stepan, что ему можно запускать только два конкретных контейнера
    2. Мониторить активность пользователя stepan
    3. Дать по шее пользователю stepan, если увидите в логах, что он запускал какие-то еще контейнеры
    Ответ написан
    Комментировать
  • Почему при поднятии сервиса с помощью docker-compose не открывается порт?

    kumaxim
    @kumaxim
    Web-программист
    Вам нужно немного поправить docker-compose.yml
    version: '3.1'
    
    services:
    	nodejs:
            image: nodejs
            ports:
            - "44343:44343"
            - "17117:17117"
            depends_on:
            -c 
            - redis
            links:
            - c:custom_app
            - redis:redis
        c:
            image: c
            ports:
            - "19833:19833"
        redis:
            image: redis


    Внутри Вашего первого контейнера, из которого Вам надо достучаться до redis, используйте custom_app и redis для того чтобы подключиться к соответствующим контейнерам.
    Ответ написан
    4 комментария
  • Стоит ли использовать Docker на продакшене?

    kumaxim
    @kumaxim
    Web-программист
    Если у Вас один-три сервера, скорей всего, Docker Вам не нужен. В этом случае для управления конфигурацией лучше используйте ansible.

    Потребность в Docker возникает либо в случае когда нужно расшарать одно окружение на множество машин, например, у меня и моих коллег сейчас девелоперское окружение(php + apache + mysql + redis) крутиться на контейнерах. Второй пример - нужно настроить динамическое горизонтальное масштабирование. Этот вариант Вам нужно рассматривать, только если Вы используйте AWS или что-то подобное.

    В целом, docker / ansible / chef / puppet и т.п. Вам нужны только в случае, если нужно шарить одно окружение на разные машины, причем часто, с уверенностью что оно везде одно. Другого примера использования придумать не могу.
    Ответ написан
    1 комментарий
  • Как настроить mysql в Docker?

    kumaxim
    @kumaxim
    Web-программист
    Начинаешь разрабатывать проект #1, создаешь под него каталог с двумя вложенными подкаталогами src и db
    Ты уже установить docker-compose? Если нет, то сделать этого. Мой docker-compose.yml:
    version: '3.1'
    
    services:
      db:
        image: mariadb:10.2
        restart: on-failure
        ports:
          - "3306:3306"
        volumes:
          - ./db:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: your_root_pass_here
          MYSQL_DATABASE: db_name_here
          MYSQL_USER: db_user_here
          MYSQL_PASSWORD: user_pass_here
      nginx:
        image: nginx
        restart: on-failure
        ports:
          - "80:80"
        links:
          - wordpress:php-fpm-server
        depends_on:
          - wordpress
        volumes:
          - $HOME/DDK/nginx-default.conf:/etc/nginx/conf.d/default.conf:ro
          - ./development/src:/var/www/html:ro
      wordpress:
        image: php:5.6-fpm
        restart: on-failure
        links:
          - db:mysql
        depends_on:
          - db
        expose:
          - "9000"
          - "9900"
        volumes:
          - /mnt/bindfs/fire-cacher-dv1:/var/www/html


    Далее у тебя встанет проблема, файлы на твоей хостовой машине будут создаваться от пользователя www-data. Единственный вменяемый способ пофиксить это без сильных танцев с бубном - bindfs. Я использую следующую строку в fstab для монтирования:
    /home/user/Project/fire-cache/development/src	/mnt/bindfs/fire-cacher-dv1	fuse.bindfs	force-user=www-data,force-group=www-data,create-for-user=user,create-for-group=user,perms=0000:u+rwD:g+rD:o+rD	0	0


    Все создал? ОК, запускай docker-compose up -d и останавливай после окончания работы docker-compose stop. Проект закончен? Значит docker-compose down -v

    Вот это ты повторяешь каждый раз при старте нового проекта. Если есть еще какие-то вопросы по существу - пиши в комменты.
    Ответ написан
    5 комментариев
  • Как запускать задачи внутри докер контейнера?

    kumaxim
    @kumaxim
    Web-программист
    Любое приложение может находиться всего в двух состояниях: оно либо решает поставленную перед ним задачу либо нет. Но это так, немного теории.

    Конкретно в твоем случае лучшего варианта нет.
    Если тебе нужно убедиться в том, что на хостовой машине в cron есть твоя задача, тогда тебе нужен chef или ansible
    Ответ написан
  • Как в docker контейнере запустить mysql с данными с хоста?

    kumaxim
    @kumaxim
    Web-программист
    Ты хочешь чтобы два MySQL сервера читали одни и теже файлы таблиц?
    Чтобы два сервера одновременно перезатирали данные друг друга?
    Чтобы два сервера лезли в одни файлы с разными мета-данными?

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

    Быть может тебе нужно залезть из приложения в докер-контейнере в СУБД на хосте?
    Ответ написан
    Комментировать
  • Как вытащить файлы из docker?

    kumaxim
    @kumaxim
    Web-программист
    Вариант №1
    У тебя есть доступ к хостовой машине? Если да, тогда выполни docker cp

    Вариант №2
    Ты подключаешься внутрь виртуальной машины по SSH? Что в таком случае мешает скопировать файлы оттуда по scp?
    Ответ написан
  • Как работает Docker с точки зрения сети?

    kumaxim
    @kumaxim
    Web-программист
    Читайте про настройку сети в официальной документации. Там все предельно ясно написано.

    Если очень коротко: создавая сетку для докера Вы создаете виртуальный адаптер со своим IP. Адаптер по умолчанию работает в режиме бриджа. Как дальше спускать запросы на этот адаптер уже зависит от Вашей задачи.
    Ответ написан
    Комментировать