如何在构建时在 docker 容器卷中添加文件

How to add files in docker container volume on build time

我有一个 python 和 java 应用程序,我想将它们 运行 放在一个容器中。 我有一个名为 pass-hash 的文件夹,其中包含: --h2o-start 文件夹包含我用来启动 h2o.jarDockerfile,它会启动机器学习服务器。 --model-generator 文件夹包含 passhash.py 和一个 data.csv 文件。 passhash.py 应用程序包含 h2o.import_file("/var/my-data/data.csv"),它从我在容器中创建的 my-data 文件夹中获取 data.csv 文件,并使用它生成一个 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:

Docker 卷旨在在主机和 Docker 容器之间共享文件夹。如果您在主机上复制任何文件(卷位置路径),它将自动在容器内可用。

docker 卷的语法如下:

 -v /home/data:/data

在上面的语法中,/home/data 是主机上可用的文件夹,/data 这个文件夹在 docker容器。

如果您在 /home/data 文件夹中复制主机上的任何文件,它将自动在容器 /data文件夹。

希望你清楚。

如果您使用的是 docker-compose,请按以下方式添加音量标签

 volumes:
   - /home/data:/data

例如:

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

如果您的意思是在 docker 构建时添加文件,请查看 ADD & COPY 说明。

I don't know, that is the solution i came up with. Can you tell me the better solution for my problem? My problem is: I have a python app that uses a data.csv file to generate a POJO machine learning model. When I specify a path to this python app to the data file, it gives an exception that the file doen't exist. Also, I have another app written in java, that uses the generated POJO file and it gives predictions based on that data. The java app also updates the data.csv file every day. I want every app (microservice) to run in separate container, but want them both to use the 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

这是你的 docker 文件

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。

和运行申请让我知道。