Ответы пользователя по тегу Docker
  • Как пробросить папку из контейнера в локальну папку?

    @metajiji
    Возьми docker-compose, опиши создание своих контейнеров и вольюмов, создай именованный volume, при создании файлы будут скопированы из контейнера на хост и доступны по пути /var/lib/docker/volumes/имя-вольюма/_data
    Эти же файлы доступны и внутри контейнера.
    Подробнее в официальной доке: https://docs.docker.com/compose/compose-file/#volumes
    Ответ написан
    Комментировать
  • Где на самом деле лежит моя бд, которую я развернул в docker-compose?

    @metajiji
    docker volume ls
    По умолчанию вольюмы хранятся в
    /var/lib/docker/volumes/
    Ответ написан
    Комментировать
  • Как настроить docker чтобы он писал логи в папку по имени контейнера?

    @metajiji
    Вам скорее их нужно научиться читать по имени контейнера, довольно просто:
    docker logs имя-контейнера  # просто посмотреть логи
    docker logs -f имя-контейнера  # в рейлтайм режиме


    Так же можно настроить логирование в приложениях, где полет фантазии не ограничен, только не забудьте о ротации, логи могут скушать весь диск.
    Ответ написан
    Комментировать
  • Docker - как запустить Apache от имени пользователя?

    @metajiji
    Вот если совсем в лоб, то:
    docker run --help
    docker run --user XXX


    В принципе вы это сделали в Dockerfile, но подумайте головой... Вы взяли образ httpd, внутри огромный debian https://github.com/docker-library/httpd/blob/75e85...
    Лучше для такой задачи взять alpine FROM httpd:alpine-2.4
    Дальше httpd скорее всего запускается от рута, причем не просто так! Ему просто необходимо это сделать, потому, что существует такая вещь как не привилегированные порты https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D...

    У вас 100500% в конфиге httpd указан порт 80, что меньше 1024, следовательно httpd не в силах запуститься!
    httpd запускается от рута, биндится на 80/443 порт, после чего делает suid на uid/gid, указанного в кофниге https://httpd.apache.org/docs/2.4/mod/mod_unixd.ht...

    Теперь зная это, становится понятно, почему в docker logs (имя_контейнера) мы видим ошибки.

    Что делать? Ну например запускать апач от пользователя www-data, как и собирались, но на портах выше, чем 1024, а если хочется, чтобы он отвечал на 80 порту на хосте, то не вопрос, порт-маппинг сделает для вас это, потому, что на хосте dockerd запустит docker-proxy процесс, который будет работать от рута и будет слушать 80 порт, проксируя траффик в контейнер на указанный вами порт, например 8080.
    Получаем, что внутри контейнера апач живет на 8080, снаружи на 80.

    version: '3.7'
    
    services:
    
      db:
        image: mariadb
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: example
    
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
    
      web:
        image: httpd:alpine-2.4  # поверьте, вам не нужен nano внутри контейнера! просто подключите все необходимые конфиги с хоста как volume, это правда удобно.
        depends_on:
          - db
        restart: always
        ports:
          - 80:8080  #HOST:CONTAINER
        volumes:
          - //c/Docker/sf4/project:/usr/local/apache2/htdocs
    #      - скопируйте необходимые конфиги себе примерно так: "docker cp /etc/httpd/httpd.conf ." и подключите как volume
          - "./httpd/httpd.conf:/etc/httpd/httpd.conf"  # пример подключения конфига, где ./httpd/httpd.conf файл рядом с вашим docker-compose.yml
    Ответ написан
    6 комментариев
  • Как починить docker на windows 10?

    @metajiji
    В загрузчике bcd нужно включить hyperv
    bcdedit /set hypervisorlaunchtype auto

    https://blogs.technet.microsoft.com/vm/2008/03/29/19/

    Гуглится это крайне просто по тексту из ошибки:)
    Ответ написан
    3 комментария
  • Сайт на docker медленно работает?

    @metajiji
    Есть такое да, если делаете паблишинг портов, то на голом докере по умолчанию это произойдет через docker-proxy у которого катастрофически низкая производительность + огромный аппетит к Cpu, выход крайне простой - при создании контейнеров, которые будут взаимодействовать с внешним миром используйте --net host. Например у вас есть php-fpm, nginx и любая бд, в таком случае делаете --net host для nginx, остальные могут оставаться в сети docker, конечно же вам понадобится icc(inter container communication) и для этого нужно создать так называемую user-defined network. Для упрощения жизни создавайте контейнеры через docker-compose.
    Ответ написан
    1 комментарий
  • Как удобно выполнять composer / npm / artisan / ... в Docker?

    @metajiji
    Используйте multistage build, это когда пишут 2 и более раз директиву FROM, что позволит собирать артефакты в 1 Dockerfile и не захламлять итоговый образ.
    Ответ написан
  • Как правильно создать Docker-контейнер?

    @metajiji
    Образ собрали и да и нет. Во первых для облегчения объема используйте python:3-alpine, во вторых сделайте через использование промежуточного образа, а именно 2 раза FROM, в первом будет сборка venv, во втором копирование venv и вашего скрипта. ENTRYPOINT можно не менять и писать имя вашей программы, ее можно закинуть в PATH, например в /usr/local/bin, но это не обязательно.

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

    Например, docker run --rm ti -v $(pwd)/data:/data avito_parser_cli "трактор мтз" -t -m 300000 -s 'date' -a

    Ожидается, что программа внутри контейнера сохранит данные в папку /data, а на хосте они будут в $(pwd)/data
    Ответ написан
    Комментировать
  • Можете по-простому объяснить про Docker и как им начать пользоваться?

    @metajiji
    Не супер конечно руководство, но для начала сойдёт: https://habr.com/post/310460/

    Важно усвоить в чем разница image и container, потом осознать почему это одно и тоже:)
    А дальше будет легче.
    Ответ написан
    Комментировать
  • Что не так с Docker?

    @metajiji
    Дело не в Dockerfile, а в docker-compose
    А а именно, у вас судя по всему windows, и проблема с пробросом маунтов и в целостности имейджей. Попробуйте вайпнуть докер и запустите с чистого листа:)

    ERROR: for mysql Cannot start service mysql: b"error while creating mount source path '/host_mnt/e/webdev/mysql': mkdir /host_mnt/e: file exists"

    Проброс с хоста (windows) внутрь виртуальной машины с Линукс поломатый. Пересоздайте вм и будет счастье.
    Ответ написан
    Комментировать