Ответы пользователя по тегу Docker
  • Пытаюсь подключиться к postgresql 16 через docker-compose, использую spring-boot 3.2.4, что не так?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.

    java.net.UnknownHostException: db


    Попробуйте добавить оба контейнера в одну сеть.

    version: "3"
    
    services:
    
      app:
        build:
          context: .
          dockerfile: app.Dockerfile
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/javacode
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres
        ports:
          - "8080:8080"
        networks:
          app:
    #    command: ["./wait-for-it.sh", "db:5432", "java", "-jar", "/app/app.war"]
    
      db:
        build:
          context: .
          dockerfile: postgreSQL.Dockerfile
        container_name: db
        environment:
          POSTGRES_DB: javacode
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
        ports:
          - "5432:5432"
        volumes:
          - ./db/initDB.sql:/docker-entrypoint-initdb.d/initDB.sql
        networks:
          app:
    
    networks:
      app:
        driver: bridge
    Ответ написан
  • Стоит ли использовать Docker в продакшене для нескольких сайтов на одной VPS?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Я в проде, будучи разработчиком, использую Docker Swarm - https://dockerswarm.rocks/
    С этого сайта удобно развертывать окружение. Обычно использую Rockly Linux 8 + Docker swarm (swarmpit, docker, traefik и т.д.)
    Ответ написан
    Комментировать
  • Какая концепция используется в миграциях БД в Докере?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    pgdump или psql
    Например:

    Экспорт
    psql -U {username} -d {db_name} > backup_03_08.sql

    Импорт
    psql -U {username} -d {db_name} < backup_03_08.sql
    Ответ написан
    3 комментария
  • Docker: почему всегда No such file or directory при попытке подключится к БД?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    No such file or directory
    У вас в docker или docker compose конфигурации есть volumes? Может он пытается смонтировать несуществующий volume, oтсюда и ошибка?
    Ответ написан
  • Docker соединяет frontend и backend?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Можно, но не нужно.
    Суть докера в том, чтобы все сервисы были отдельно. Соответственно, отдельный nginx, back, db, front и т.д.
    Ответ написан
    Комментировать
  • Docker засоряет папку Temp вплоть до 80 гб, что делать?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    docker system prune --all
    Это должно помочь
    Ответ написан
    Комментировать
  • Как генерировать соурсы jOOQ, когда БД тоже в Docker?

    azerphoenix
    @azerphoenix Автор вопроса
    Java Software Engineer
    Ситуация была в следующем.
    Плагин jOOQ срабатывает на этапе `mvn clean package`. Так как на данном этапе в docker compose образы хоть и собраны, но контейнер БД не стартовал, то этап сборки приложения не сработает (connection refused to db).
    Почему healthcheck & depends_on не подошли в данном случае:
    Так как они сработают в случае, если контейнеры стартовали. К тому же, depends_on не гарантирует то, что стартанет сервис. Он гарантирует, что стартанер контейнер.
    Решил проблему следующим образом. В docker compose первоначально выборочно собираю нужные образы и стартую нужные сервисы (БД в том числе). Затем уже собираю образ приложения и стартую приложение.
    Т.е. примерно так:
    Этап 1
    `docker compose up postgres rabbit redis -d`
    Этап 2
    `docker compose up app -d`

    Есть альтернативное решение, тоже хорошее.
    Генерация сущности после того, как приложение стартовало при помощи AfterStartupApplicationListener
    Подробности тут - https://habr.com/ru/articles/488522/
    Ответ написан
    Комментировать
  • Как писать микросервсиы на Java + Docker?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как отметил коллега, каждый микросервис может быть написан на разных языках и это нормальная практика.
    Теперь, что касается Java. Ну во-первых, касаемо используемых фреймворков. Удобонее писать микросервисы на Spring (Spring Boot) или Quarkus.
    Приложения могут быть запущены в Tomcat, Jetty, Netty, GlassFish и т.д.
    По умолчанию в Spring Boot есть embedded зависимость для самозапускающихся приложений. Например, embedded tomcat.

    В Node.js сервисы обычно запускают в Docker, я слышал что в Java для этого используют Tomcat, в чем разница между ними? (или это вообще разные вещи?)

    Это разные вещи. Приложения написанные в Java тоже можно контейнезировать и запустить внутри докера.

    В Node.js для запуска сервера обычно используют express.js, а что для этого используется в Java? (Servlet, Spring или что-то еще?)

    Сервлет, есть сервлет. Spring это фреймворк. А для запуска используется то, что я указал выше.

    Допустим я сделал сервер на Servlet, как запускать это в docker контейнере?

    https://sematext.com/blog/docker-java-tutorial/

    Если я запущу 10 Java сервисов в отдельных Docker контейнерах, в каждом из них будет отдельный экземпляр JRE\JDK?

    В этом и есть суть докер контейнера и микросервисов. Каждый микросервис является автономным модулем. Каждый контенер является полноценной системой.

    Преимущество Java мискросервисов перед Node.js? (или наоборот)

    Не хочу холиварить. У каждого языка и фреймворка свои преимущества. Потому, микросервисы могут быть написаны на разных языках и не только на ноде, но и на Rust, Kotlin, Go и т.д.
    https://runnable.com/docker/java/dockerize-your-ja...
    Ответ написан
    2 комментария
  • Почему liquibase не работает в docker?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вариантов может быть несколько.
    Например, вы указали некорректный путь до БД в конфигах liquibase. Как вариант, вы могли указать localhost вместо названия самого докер контейнера в jdbc url или еще что...
    Ответ написан
    Комментировать
  • Простая оркестрация контейнеров?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Могу рассказать, как это решается на Java + Spring.
    Конфигурацию микросервисов можно сделать централизованной. Для этого необходимо развернуть amqp сервис. Например, rabbitmq.
    Конфигурация при этом выносится в отдельный репозиторий и хранится там.
    Далее каждый из микросервисов при старте знает, что ему нужно обратиться к микросервису, который отвечает за конфигурации. Также они подписываются на событие к rabbitmq.
    Когда в гит репозиторий пушатся конфиги, то конфиг сервер кидает их в rabbitmq, а они в свою очередь забираются микросервисом и проводится динамическое обновление конфигов.
    Скорее всего, на python есть некий похожий сервис для этих целей.
    Ответ написан
  • Почему докер не запускается с первого раза?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Вам скорее всего необходим rootless режим.
    https://docs.docker.com/engine/security/rootless/
    Ответ написан
    Комментировать
  • Как запустить docker на MacOs без Docker Desktop?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    Аналогичная поблема бывает и на Linux тоже.

    Вот, решение для Linux - https://stackoverflow.com/questions/44678725/canno...
    Вот, решение для MacOS - https://stackoverflow.com/questions/44084846/canno...
    Ответ написан
    Комментировать
  • Установка Redmine в контейнер докер, ubuntu?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Вы можете использовать оф. образ Redmine.
    Поищите на https://hub.docker.com/
    Вот, например: https://hub.docker.com/_/redmine
    Либо вы можете воспользоваться образами от Bitnami -
    https://bitnami.com/stack/redmine/containers
    https://hub.docker.com/r/bitnami/redmine

    После установки docker на машину, запустите docker pull redmine

    Можете еще воспользоваться docker compose (сперва нужно установить).
    Дальше остается лишь запустить файл конфигурации.
    Вот, конфиг - https://github.com/bitnami/bitnami-docker-redmine/...
    Скопировать себе yml файл. В консоли набрать
    docker compose -f docker-compose.yml up -d
    Ответ написан
    Комментировать
  • Будет ли работать приложение если установить mysql, PostgreSQL в докер?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Я всегда использую СУБД в докере. Очень удобно использовать конфиги для docker compose
    Вот, конфиги, чтобы быстро поднять БД + панель управления.
    PostgreSQL + PgAdmin
    version: '3.8'
    services: 
      postgres:
        container_name: postgres
        image: postgres
        restart: always
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          PGDATA: /data/postgres
        ports:
          - "5432:5432"
        volumes:
          - postgres:/data/postgres
      pgadmin:
        depends_on:
          - postgres
        container_name: pgadmin4
        image: dpage/pgadmin4
        restart: always
        environment:
          PGADMIN_DEFAULT_EMAIL: mail@example.com
          PGADMIN_DEFAULT_PASSWORD: postgres
        ports:
          - "5050:80"
        volumes:
          - pgadmin:/root/.pgadmin
    
    networks:
      postgres:
        driver: bridge
    
    volumes:
      postgres:
      pgadmin:


    Mysql + PhpMyAdmin
    version: '3.8'
    
    services:
      mysql:
        image: mysql:latest
        container_name: mysql
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mysql
      phpmyadmin:
        depends_on:
          - mysql
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mysql
         - UPLOAD_LIMIT=1024M
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300version: '3.8'
    
    services:
      mysql:
        image: mysql:latest
        container_name: mysql
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mysql
      phpmyadmin:
        depends_on:
          - mysql
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mysql
         - UPLOAD_LIMIT=1024M
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300


    MariaDB + PhpMyAdmin
    version: '3.8'
    
    services:
      mariadb:
        image: mariadb:latest
        container_name: mariadb
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mariadb
      phpmyadmin:
        depends_on:
          - mariadb
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mariadb
         - UPLOAD_LIMIT=1024Mversion: '3.8'
    
    services:
      mariadb:
        image: mariadb:latest
        container_name: mariadb
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mariadb
      phpmyadmin:
        depends_on:
          - mariadb
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mariadb
         - UPLOAD_LIMIT=1024M
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300
    Ответ написан
    2 комментария
  • Как развернуть локально всю экосистему если дали доступ к vps на которой все в докере?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    1) Можно попробовать создать docker image из контейнера, а затем его развернуть у себя.
    https://www.sentinelone.com/blog/create-docker-image/
    2) Можно создать бекап виртуалки и развернуть его у себя в виртуалке)))
    3) Если это все нужно для дебага, то можно провести удаленный дебаг. Например, xdebug
    4) Как по мне самым адекватным решением должно быть следующее:
    Поднять у себя эти контейнеры на основе Dockerfile. (возможно, используеться docker compose).
    Затем экспортировать БД из продакшна и закинуть его себе.
    Ответ написан
    Комментировать
  • Разработка symfony-проекта в Docker?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Я не сталкивался с symfony и не являюсь РНР разработчиком, но зачем вы хотите разрабатывать проект внутри докера?
    Разработайте проект отдельно, затем, когда он будет готов, добавьте необходимую конфигурацию для деплоя приложения в докер контейнере.
    Ответ написан
  • Как создать контейнер для postgresq и spring boot приложения? И чтобы они взаимодействовали между собой?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Во-первых, вам необходимо при подключении jdbc указать название сервиса (postgres), вместо localhost
    Во-вторых,
    Вам нужно в yml добавить
    networks:
      myApp:
        name: myApp
        driver: bridge


    А также каждый сервис добавить в network
    ports:
          - "5432:5432"
    networks:
          - myApp
    Ответ написан
  • Работа с java из docker?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Есть сервер ubuntu с установленным на нем Docker

    Если вы планируете использовать docker compose, то не забудьте установить и его тоже, помимо докера.

    подразумеваю что буду использовать разные контейнеры для бд, и самого сайта, и соответственно docker compose

    Для удобства деплоя можно использовать docker compose, но это можно и сделать без него тоже.

    как работать с удаленным сервером, как деплоить проект

    Вы можете также посмотреть в сторону CI / CD для удобства деплоя. Также можно собирать ваши проекты при помощи скриптов gitlab и т.д.

    Можно ли подключить как то докер к intellij?

    В самом intellij есть плагин докер, который позволяет при разработке быстро деплоить приложения. Но пожалуй, не самая лучшая идея деплоить приложение на prroduction из intellij idea.

    Да и в целом какие есть нормальные гайды и советы)

    Я даже скажу больше - есть отдельные онлайн курсы для java разработчиков по docker
    Вот, например - https://www.udemy.com/course/docker-for-java-devel...
    Хотя, можно и проще (открыть документацию к докер и прочитать ее).
    Ответ написан
  • Почему не выходит запустить html файл в docker?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Вам томкат не нужен. Это дорого и неудобно.
    Вам нужен nginx.
    Прочитайте вот, эту статью:
    https://medium.com/code-to-express/https-medium-co...
    или вот эту:
    https://www.dailysmarty.com/posts/steps-for-deploy...
    Ответ написан
    Комментировать
  • Где развернуть микросервисное приложение?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Сам недавно разворачивал микросервисы.
    Если нужно по принципу дешево и сердито, то смотрите в сторону Hetzner Cloud
    https://www.hetzner.com/cloud-ru

    то есть на вирт машине запустить всё так же как я запускаю у себя на локалке через docker-compose ну или kubernetes?

    Нет особого смысла использовать kubernetes. Докера будет предостаточно. Используйте Docker Compose.
    Если вы используете Config Server, то убедитесь, что ваши приложения ожидают старта сервера конфигурации и падают (пытаются переподключиться).

    Ну а если бюджет позволяет, то можно и AWS.
    Ответ написан
    Комментировать