Ответы пользователя по тегу Docker
  • Можно ли ограничить доступ к API через Docker-compose?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Развернуть backend и frontend в одной сети и не открывать порты бека во внешнюю сеть, чтобы открыты были только порты фронтенда.

    Все что "загрузилось браузером" у клиента - доступно клиенту, а значить можно отправить запрос вне сайта на этот же api.
    Вопрос, такой расклад событий может помочь ограничить доступ к эндпоинтам?

    Нет. Необходим более сложный механизм защиты, по типу отслеживания количества запросов с определённых ip адресов.
    Ответ написан
    1 комментарий
  • В чем ошибка запуска Docker compose?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как подключить бд к серверу в docker-compose?

    DB_HOST: db

    Предположу, фронт использует localhost или 127.0.0.1 для подключения к бд? Если да, то заменяем ее на db.

    Можно проверить, кто использует сеть my_network (искать в Containers), фронт должен быть там:
    $ docker network inspect my_network

    MYSQL_USER: "root"
    MYSQL_PASSWORD:

    Ну и пароль рекомендую все таки установить.
    Ответ написан
    5 комментариев
  • Как подключить бд к серверу в docker-compose?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Server=localhost

    Чей локалхост? У каждого контейнера он свой. Тогда какой указывать? Оптимально - по имени.
    https://docs.docker.com/compose/networking/
    Reference containers by name, not IP, whenever possible. Otherwise you’ll need to constantly update the IP address you use.

    Port=6002

    Чья туфля порт? Внутри докер-сети (Вы же указали: networks>postgres-network) контейнеры общаются по внутренним портам (рекомендуется).

    Если резюмировать, то будет примерно так (поправить местами при необходимости):

    "Postgres": "Server=localhost; Port=6002; Database=post; User ID=postgres; Password=passwd; Pooling=true"

    "Postgres": "Server=postgres_db; Port=5432; Database=post; User ID=postgres; Password=passwd; Pooling=true"

    docker-compose.yml:
    version: '3.8'
    
    networks:
      postgres-network:
        driver: bridge
    
    services:
      gchain.posts.api:
        image: gchain.posts.api
        build:
          context: .
          dockerfile: GChain.Posts.Api/Dockerfile
        ports:
          - "80:8080"
        networks:
          - postgres-network
        depends_on:
          - postgres_db
    
      postgres_db:
        container_name: postgres_post
        image: postgres:latest
        environment:
          POSTGRES_USER: ${POSTGRES_USER:-postgres}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-passwd}
          POSTGRES_DB: post
        volumes:
          - postgres-data:/var/lib/postgresql/data
        ports:
          - "6002:5432"
        networks:
          - postgres-network
        restart: unless-stopped
    
    volumes:
      postgres-data:
    Ответ написан
    Комментировать
  • Как на asp .net 7 подключить ssl для https протокола?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как мне сделать так, чтобы мой сервис используя эти файлы запускался на https в контейнере

    Пример Dockerfile конфига (при необходимости, поправить пути и наименования):
    FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
    WORKDIR /src
    COPY ["project.csproj", "."]
    RUN dotnet restore "project.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "project.csproj" -c Release -o /app/publish
    
    FROM build AS publish
    RUN dotnet publish "project.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    COPY ["cert.pem", "key.pem", "/https/"]
    ENTRYPOINT ["dotnet", "project.dll"]

    https://learn.microsoft.com/en-us/aspnet/core/fund...
    Пример Program.cs:
    var builder = WebApplication.CreateBuilder(args);
    
    builder.WebHost.ConfigureKestrel(options =>
    {
        options.ListenAnyIP(443, listenOptions =>
        {
            listenOptions.UseHttps("/https/cert.pem", "/https/key.pem");
        });
    });

    Ну и при использование Nginx (например) в качестве обратного прокси, то придется настроить и его. С другой стороны, если у Вас будет стоять Nginx, то не совсем понятно, для чего гонять защищенный трафик между Nginx и ASPNET, т.к:
    1. Nginx универсальнее и производительнее ASPNET в данном контексте.
    2. Если подлинность трафика уже подтверждена на уровне Nginx, то зачем все тоже самое повторять дальше по цепочке, в ASPNET.
    Ответ написан
    Комментировать
  • Почему получается подключить Core в Dockerfile?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понял задачу (использовать одну общую либу Core для нескольких проектов), то я бы использовал 2 варианта:
    - Создание NuGet пакета (если Core изменяется не часто), затем подключаем его в любом проекте.
    - Или docker multi-stage builds (если Core изменяется часто).

    Пример docker multi-stage builds с авто сборкой Core lib + Api proj (поправить пути и наименования директорий при необходимости):
    # Build Core lib
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS core-build
    WORKDIR /src
    COPY ["../Core/Core.csproj", "./Core/"]
    RUN dotnet restore "./Core/Core.csproj"
    COPY ["../Core/", "./Core/"]
    RUN dotnet build "./Core/Core.csproj" -c Release -o /app/core
    
    # Build API proj
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS api-build
    WORKDIR /src
    COPY ["Service/API/API.csproj", "./Service/API/"]
    RUN dotnet restore "./Service/API/API.csproj"
    COPY ["Service/API/", "./Service/API/"]
    COPY --from=core-build /app/core /lib
    RUN dotnet build "./Service/API/API.csproj" -c Release -o /app/service
    
    # Create final image
    FROM mcr.microsoft.com/dotnet/aspnet:8.0
    WORKDIR /app
    COPY --from=api-build /app/service .
    ENTRYPOINT ["dotnet", "API.dll"]
    Ответ написан
    1 комментарий
  • Как часто Docker выполняет logout regestry?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    как часто docker выполняет команду logout и выполняется ли она вообще

    Logout из реестра не выполняется автоматически.
    Ответ написан
    3 комментария
  • Пару вопросов по использованию докера в продакшене?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Использовать докер в продакшене - нормальное решение?

    Нормальное.
    3. У меня был сервер на 50 гигов

    Докер хранит все слои, образы и логи, периодически, необходимо чистить не используемые образы docker system prune.
    4. Автоматический бекап базы данных

    Я бы cron использовал для этого.
    5. Как не терять данные из бд при перезапусках контейнера?

    Не использовал, но слышал много хорошего про Docker volumes.
    6. Node.js приложение само пишет нужные мне логи и кладет в корень проекта.

    Docker volumes.
    Ответ написан
    Комментировать
  • Docker засоряет папку Temp вплоть до 80 гб, что делать?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вы сами туда настроили складирование чего либо, например логов? Если нет, то оптимальный выбор удалить неиспользуемые образы, контейнеры, сети и томы:
    docker image prune -a
    docker container prune
    docker network prune
    docker volume prune
    Ответ написан
  • Как на хостинге запустить flask приложение на 80 порту?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант:
    1. Создать А-запись с ip сервера.
    2. На сервер поставить обратный прокси, например Nginx, в котором прописать правила, откуда брать инфу, если зайдут на указанный домен, например на контейнер докера с портом 3000.
    3. Запустить контейнер докера с портами 8080>3000 (внешним и внутренним соответственно). Flask приложение в контейнере должно слушать 3000 порт (либо изменить во всех случаях на тот, который слушает).
    4. Выпустить SSL для домена, затем дописать в Nginx правило обработки https.
    5. Проверить файервол, чтобы разрешал локальный трафик на 127.0.0.1:3000.

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Контейнер создавался без флага --restart?
    Политика перезапуска контейнера что говорит?
    docker inspect -f '{{ .Name }} {{ .HostConfig.RestartPolicy.Name }}' $(docker ps -aq)

    Отключение автозапуска конкретного контейнера:
    docker update --restart=no <container_id>
    Ответ написан
    33 комментария
  • Что такое Docker простыми словами?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Что такое Docker простыми словами

    простыми словами

    Если совсем прям простыми, то - это некая легковесная оболочка, которая способна изолировать приложение внутри себя от внешнего мира. Очень похож (по логике) на системы виртуализации VMware, VirtualBox, Parallels итп, но сам не является им.

    Возможности:

    - Контейнеризация: Docker позволяет паковать приложения вместе со всеми их зависимостями в контейнеры, обеспечивая тем самым их независимость от конкретной инфраструктуры.
    - Переносимость: Контейнеры Docker могут быть запущены на любом компьютере, который поддерживает Docker, независимо от операционной системы. Это делает распространение и развертывание приложений намного проще.
    - Изоляция ресурсов: Каждый контейнер Docker работает в изолированной среде и не влияет на другие контейнеры или хостовую систему.
    - Слоистая файловая система: Docker использует слоистую файловую систему для хранения данных, что позволяет существенно экономить дисковое пространство и упрощает обновление и распространение контейнеров.
    - Сетевые возможности: Docker позволяет настраивать сетевые параметры каждого контейнера, что позволяет создавать сложные многокомпонентные приложения.
    - Docker Hub: Docker Hub – это репозиторий, где можно хранить и делиться контейнерами. Это облегчает развертывание и распространение приложений.
    - Docker Compose: Это инструмент для определения и запуска многоконтейнерных - Docker-приложений. С помощью Compose вы можете использовать файл YAML для конфигурации служб вашего приложения, а затем с помощью одной команды создать и запустить все службы.
    - Docker Swarm: Docker Swarm предоставляет нативные возможности Docker для оркестрации и масштабирования кластера Docker.
    Ответ написан
    Комментировать