Как мне создать контейнер docker с двумя Java-приложениями и сервером Mysql?

#java #docker #docker-compose #microservices

#java #docker #docker-compose #микросервисы

Вопрос:

У меня есть Java-приложение, использующее двоичные журналы из базы данных Mysql и взаимодействующее с другой службой, которую я разместил на своем локальном хостинге. Как мне создать образ Docker со всеми этими сервисами, чтобы я мог запускать их все одновременно?

Из того, что я слышал, мне нужно использовать docker-compose. Но я действительно не знаю, как это сделать? Должен ли я создавать отдельные контейнеры Docker и связывать их порты? Должен ли я создать один контейнер?

Я создал один файл Dockerfile для приложения Java:

 FROM maslick/minimalka:jdk11
WORKDIR /app
EXPOSE 8080
COPY target/foster-maxwell-uber-jar.jar foster-maxwell.jar
COPY config.properties config.properties
CMD java -jar foster-maxwell.jar --config_type MAXWELL_UNSIGNED_KAAS --kaas_config config.yml --zk_timeout 1000
  

Как мне это сделать? Извините за вопрос новичка.

Комментарии:

1. Да, вам понадобится несколько контейнеров docker, по одному для каждого процесса. И используйте docker compose, чтобы связать их все вместе в одной сети.

Ответ №1:

Вам следует прочитать документацию docker-compose:https://docs.docker.com/compose/compose-file /

Например, попробуйте использовать файл docker-compose.yml, подобный этому

 version: '3.8'

services:

  your-java-app1:
    build:
      context: .          <-- (dir where you have your Dockerfile)
      dockerfile: Dockerfile
    image: yourjavaapp1image:1.0
    container_name: your-java-app1
    depends_on:
      - db

  your-java-app2:
    build:
      context: .          <-- (dir where you have your Dockerfile_for_app2)
      dockerfile: Dockerfile_for_app2
    image: yourjavaapp2image:1.0
    container_name: your-java-app2
    depends_on:
      - db

  db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: [put here your root pass]
       MYSQL_DATABASE: [put here your db name]
       MYSQL_USER: [put here your user]
       MYSQL_PASSWORD: [put here your pass]
  

После того, как вы определили свои файлы Dockerfiles, сначала создайте образы с вашими приложениями:

 docker-compose build
  

Затем запустите images (создание контейнера)

 docker-compose up -d
  

Комментарии:

1. Для полноты картины следует упомянуть, что возможно создать пользовательский образ с несколькими сервисами внутри: docs.docker.com/config/containers/multi-service_container . Обычно это действительно плохая идея, поскольку отдельные службы сложнее поддерживать и обновлять.