Ответы пользователя по тегу Docker
  • Почему могут не прокидываться volumes от letsencrypt by certbot сертификаты в docker container nginx-а?

    Вместо полного пути к
    - /etc/letsencrypt/live/domen.ru/:/etc/letsencrypt/live/domen.ru/

    надо
    services:
      nginx:
        # ...
        volumes:
          # ...
          - /etc/letsencrypt:/etc/letsencrypt

    потому, что в live/domen.ru лежат не сами сертификаты, а линки на файлы двумя уровнями выше. Линки вы и видите, но указывают они на недоступные файлы.
    Ответ написан
    2 комментария
  • Контейнеризация для локальной разработки?

    Правильно понимаю, что docker можно также спокойно использовать локально на windows?
    Правильно.

    Как вы локально разворачиваете докер ?
    Под Mac или Windows cкачать Docker Desktop.
    Разворачивать проект – так же как заворачивали ) Скорее всего клонировать репку с файлом docker-compose.yml вашего проекта и docker-compose up А потом заходить внутрь контейнеров, или запускать дополнительные временные – со всякими git clone, composer install, npm i, mysql -p${MYSQL_ROOT_PASSWORD} < database_init.sql и пр.

    При разворачивании проекта через docker, создается некая виртуализация.
    Не совсем. Docker не виртуализация, а контейнеризация. Отсутствует виртуальная машина, в отличие от, например, VirtualBox. На бытовом уровне, есть некие изолированные виртуальные коробки-контейнеры, из которых наружу торчит, может, порт. И друг дружку эти коробки видят как компы в локальной сети.

    Как тогда работать с проектом через IDE ? Если все окружение проекта на linux, а мы работаем на windows, как вообще люди работают через IDE в таких случаях ?
    Как вариант, работать как с удалённым Linux сервером. Подключаться к нему по SSH, тот же VS Code умеет через расширение Remote-SSH.

    Файлы копировать с компа в контейнеры (или наоброт) через
    docker cp ./local.file  containerName://var/www/remote.file


    За «роскошь» локальной-обычной работы с файлами прямо на компе с любым IDE, какой предпочитает любой из разработчиков, придётся расплачиваться докручиванием конфигов, которые будут отличаться от продакшена. И тогда, наверное, пропадает весь кайф докеризации-для-разработки.

    В целом я бы не рекомендовал докер для локальной разработки, хотя сам пользуюсь в некоторых проектах.
    Ответ написан
    Комментировать
  • В чем может быть причина и как исправить?

    Нет файла .env с определением упомянутых переменных
    Ответ написан
    Комментировать
  • Становится ли контейнер образом?

    1. верно
    2. ок
    3. нет. docker build (док) создаёт новый image (образ) В вашем примере с тегом python-barcode
    4. docker run запускает из образа контейнер. Можно и не один, а несколько, даже параллельно. В вашем примере имя для него сгенерится автоматом, какая-нибудь смешная комбинация двух слов. Контейнер может работать, останавливаться, перезапускаться. Можно удалить контейнер. Контейнер не изменяет образ, из которого создан – он «накатывает» свою деятельность поверх, в новых слоях.
    5. контейнером не поделиться. Делятся образом. Если в контейнер вносили изменения - например, зашли в него терминалом, установили доп. пакеты – можно из этого контейнера создать новый image через docker commit


    базовый FROM образ -- образ с доп. слоями = ваш новый образ -- контейнер и изменения -- образ с изменениями
    Ответ написан
    2 комментария
  • Как в docker работать с несколькими проектами?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    все на php7.3, mysql 5.7, nginx

    Раз у всех проектов одна среда, достаточно запустить по одному инстансу php-fpm, mysql, nginx и пользоваться ими из всех разрабатываемых проектов.

    «Проект», получается, это папка с файлами, отдельная бд или таблицы на общем сервере MySQL, и прописанный в конфигах nginx
    location /project-42 { root /projects/project-42; ... }
    
    ### или целый блок
    
    server {
      listen 80;
      server_name  project42.dev;
      ... 
    }


    Пожалуй, лучше работать через docker-compose: весь конфиг в одном файле, общая сеть, сервисы друг друга видят, но при этом не светят лишними портами наружу.

    Поднимите сначала один из проектов. Потом разберитесь, как добавить файлы остальных через volumes:
    nginx:
      volumes:
        - "/freelance/projects/Project-0/:/var/www/project0"
        - "/freelance/projects/Project-42/:/var/www/project42"
        # ...
    php-fpm:
      volumes:
        # то же самое сюда


    2) Как проектам дать не localhost:8080, а нормальный урл типа project.dev?

    В конфиге сервиса nginx в docker-compose.yml пропишите вместо 8080:8080:80, а в локальном файле hosts допишите 127.0.0.1 project.dev project42.dev
    Ответ написан
    Комментировать
  • Как из приложения docker compose подключиться к работающему контейнеру на default network?

    sergiks
    @sergiks Автор вопроса
    ♬♬
    Решил костыльно (?) – network connect подключил нужный отдельностоящий контейнер ещё и к сети docker-composer'а:
    docker network connect myapp_default mysql
    При этом и приложение уже работало и mysql-контейнер был запущен.

    После этого сервис стал доступен внутри под именем хоста mysql, как и требовалось.
    Ответ написан
  • Как поднять nginx в докере и разместить в нем любой сайт?

    Вот же:
    docker pull nginx
    docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
    # предполагается, что в локальной папке /some/content
    # у вас лежит какой-нибудь index.html
    Ответ написан
    5 комментариев
  • Как в Docker на одном IP-адресе разместить несколько сайтов?

    Поднять ещё один контейнер nginx как единую точку входа, слушающую внешние порты 80 и 443.
    В зависимости от домена прокси на тот или иной внутренний ip контейнера-сайта.
    Ответ написан
    3 комментария
  • Принцип работы composer в docker контейнере?

    Для файлов проекта сделать отдельный контейнер project_files, который потом можно подключать к php через --volumes-from project_files

    Примерный Dockerfile для этого контейнера:
    FROM ubuntu
    
    RUN apt-get update  &&  apt-get install -y git
    
    RUN mkdir /root/.ssh/
    
    COPY id_rsa /root/.ssh/id_rsa
    
    # Add bitbuckets key
    RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
    
    # CLone repo
    RUN git clone git@bitbucket.org:username/projectname.git /project_files
    
    # Create volume
    VOLUME /project_files


    Кладёте в папку с Dockerfile ваш id_rsa и билдите docker build -t myproject/files . и создаёте контейнер
    docker create --name project_files myproject/files /bin/true


    Есть официальный докер имидж composer'а: docker pull composer/composer Надо его запустить и установить зависимости вашего проекта, подключив тот контейнер с файлами проекта:
    docker run --rm --volumes-from project_files -w "/project_files" composer install

    Теперь в вашем контейнере с файлами полный комплект для запуска.

    К контейнеру с PHP подключайте контейнер с файлами проекта тем же --volumes-from:
    docker run \
      --name myproject_php \
      --volumes-from project_files \
      php:5-fpm
    Ответ написан
    Комментировать
  • Docker & web-приложение?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    конфиги nginx править скриптом?
    sed -i "s/%%%%%%/$API_URL/ig"  "/etc/nginx/nginx.conf"
    Ответ написан
    7 комментариев