Как добавить файлы в том Docker контейнера во время сборки - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение на python и java, которое я хочу запустить внутри контейнера. У меня есть папка с именем pass-hash с: - h2o-start папка, содержащая Dockerfile, которую я использую для запуска h2o.jar, которая запускает сервер для машинного обучения. - model-generator папка, содержащая passhash.py и файл data.csv. Приложение passhash.py содержит h2o.import_file("/var/my-data/data.csv"), которое берет файл data.csv из папки my-data, которую я создал в контейнере, и создает файл POJO с ним. h2o-start Dockerfile содержит:

FROM openjdk:8
ADD h2o.jar h2o.jar
EXPOSE 54321
EXPOSE 54322
ENTRYPOINT ["java", "-jar", "h2o.jar"]

model-generator Dockerfile содержит:

FROM python:2.7-slim 
WORKDIR /model-generator 
ADD . /model-generator 
RUN mkdir /var/my-data 
COPY data.csv /var/my-data 
RUN chmod 777 /var/my-data/data.csv 
RUN pip install --trusted-host pypi.python.org -r requirements.txt 
EXPOSE 8080 
ENV NAME World 
CMD ["python", "passhash.py"]

Файл docker-compose.yml содержит:

version: "3"

services:

   h2o-start:
    image: milanpanic2/h2o-start
    build: 
      context: ./h2o-start
    ports: 
      - "54321:54321"
      - "54322:54322"
    volumes:
      - "home/data"

   model-generator:
    image: milanpanic2/model-generator
    build:
      context: ./model-generator
    ports:
      - "8080:8080"
    depends_on:
      - "h2o-start"
    volumes:
      - "csvdata:/var/my-data" 

volumes:
 csvdata:

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Если вы хотите добавить файлы при сборке docker, взгляните на инструкции ADD & COPY .

0 голосов
/ 05 июля 2018

Я не знаю, это решение, которое я придумал. Можете ли вы сказать мне лучшее решение для моей проблемы? Моя проблема: у меня есть приложение на python, которое использует файл data.csv для генерации модели машинного обучения POJO. Когда я указываю путь к этому приложению python к файлу данных, это дает исключение, что файл не существует. Кроме того, у меня есть другое приложение, написанное на Java, которое использует сгенерированный файл POJO и дает прогнозы на основе этих данных. Приложение Java также обновляет файл data.csv каждый день. Я хочу, чтобы каждое приложение (микросервис) работало в отдельном контейнере, но хочу, чтобы они оба использовали data.csv

Чтобы ответить на это, вам нужно использовать тома.

Попробуйте код ниже.

Это ваш docker-compose файл

version: "3" 
services: 
  h2o-start: 
  image: milanpanic2/h2o-start 
  build: context: ./h2o-start 
  ports: 
    - "54321:54321" - "54322:54322" 
  volumes: 
    - /home/data:/var/my-data 
model-generator: 
 image: milanpanic2/model-generator 
 build: context: ./model-generator 
 ports: 
  - "8080:8080" 
 depends_on: 
  - "h2o-start" 
 volumes: 
  - /home/data:/var/my-data

Это ваш докер

FROM python:2.7-slim 
WORKDIR /model-generator 
ADD . /model-generator 
RUN mkdir /var/my-data
RUN pip install --trusted-host pypi.python.org -r requirements.txt EXPOSE 8080 ENV 
NAME World CMD ["python", "passhash.py"]

А где твой файл java docker?

Теперь просто создайте файл data.csv по умолчанию и скопируйте его в папку вашего хоста /home/data.

и запустите приложение, дайте мне знать.

0 голосов
/ 05 июля 2018

Тома Docker предназначены для совместного использования папок между хост-машиной и контейнерами Docker. Если вы скопируете какой-либо файл на своем хост-компьютере (путь расположения тома), он автоматически перейдет к доступным внутри контейнеров.

Синтаксис для тома докера следующий:

 -v /home/data:/data

В приведенном выше синтаксисе / home / data - это папка, доступная на хост-компьютере, а / data эта папка доступна внутри док-контейнера.

Если вы скопируете какой-либо файл на хост-компьютере в папку / home / data , он автоматически будет доступен в папке контейнера / data .

Надеюсь, вам это ясно.

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

 volumes:
   - /home/data:/data

например:

version '3'
 services:
  app:
   image: nginx:alpine
     ports:
     - 80:80
   volumes:
    - /home/data:/data
...