如何在构建时在 docker 容器卷中添加文件
How to add files in docker container volume on build time
我有一个 python 和 java 应用程序,我想将它们 运行 放在一个容器中。
我有一个名为 pass-hash
的文件夹,其中包含:
--h2o-start
文件夹包含我用来启动 h2o.jar
的 Dockerfile
,它会启动机器学习服务器。
--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
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。
和运行申请让我知道。
我有一个 python 和 java 应用程序,我想将它们 运行 放在一个容器中。
我有一个名为 pass-hash
的文件夹,其中包含:
--h2o-start
文件夹包含我用来启动 h2o.jar
的 Dockerfile
,它会启动机器学习服务器。
--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
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。
和运行申请让我知道。