在windows 10中为python web服务创建docker映像

在windows 10中为python web服务创建docker映像,python,docker,flask,Python,Docker,Flask,我是Docker的初学者,我想为我在Flask中制作的web服务应用程序创建一个图像。我的web服务文件夹名为MovieFlix,其中包含我的webservice.py,一个名为templates的文件夹,其中包含HTML模板,以及一个.git文件,我不知道是否需要包含该文件。这是我第一次使用Docker,我将在下面列出我的步骤 我在一个名为DockerFolder的文件夹中创建了一个Dockerfile文件,没有扩展名。 在Dockerfile中,我编写了以下几个步骤: FROM ubuntu

我是Docker的初学者,我想为我在Flask中制作的web服务应用程序创建一个图像。我的web服务文件夹名为MovieFlix,其中包含我的
webservice.py
,一个名为templates的文件夹,其中包含HTML模板,以及一个
.git
文件,我不知道是否需要包含该文件。这是我第一次使用Docker,我将在下面列出我的步骤

我在一个名为DockerFolder的文件夹中创建了一个Dockerfile文件,没有扩展名。 在Dockerfile中,我编写了以下几个步骤:

FROM ubuntu:16.04 //create base image 
MAINTAINER bill <bill@gmailcom>
COPY //this is where I want to copy my web service I believe I should put the complete path of MovieFlix folder?
CMD //I do not know how to run the container or my app 
RUN // I think that here I should install Python and the libraries I need for the Python app 
USER bill 
EXPOSE 80 tcp 
来自ubuntu:16.04//创建基本映像 维修人员账单 复制//这是我想复制我的web服务的地方我想我应该把MovieFlix文件夹的完整路径放在这里? CMD//我不知道如何运行容器或我的应用程序 运行//我想我应该在这里安装Python和Python应用程序所需的库 用户账单 暴露80 tcp
如果您能帮助我创建Docker映像并运行Python应用程序,我将不胜感激。提前谢谢你

您可以执行以下操作:

FROM ubuntu:16.04
MAINTAINER bill <bill@gmailcom>
# Here we copy your API directory to the container
COPY ./MovieFlix /MovieFlix
# Copy the requirements and install
COPY requirements.txt /requirements.txt 
RUN pip install -r /requirements.txt
# Expose your port
EXPOSE 80
# Set the working directory to your main file
WORKDIR "/MovieFlix"
# Run the Flask app like you usually do
CMD ["python", "webservice.py", "--host", "0.0.0.0", "--port", "80"]
来自ubuntu:16.04的

维修人员账单
#这里我们将您的API目录复制到容器中
复制./MovieFlix/MovieFlix
#复制需求并安装
复制requirements.txt/requirements.txt
运行pip安装-r/requirements.txt
#暴露你的端口
暴露80
#将工作目录设置为主文件
WORKDIR“/电影胶片”
#像往常一样运行Flask应用程序
CMD[“python”、“webservice.py”、“--host”、“0.0.0.0”、“--port”、“80”]

请注意,您需要将您的running of Flask应用程序放入
CMD
语句中,而不是
RUN
语句中,因为您希望您的容器在运行映像时运行应用程序,而不是在构建映像时运行应用程序。

不确定这是否是最好的方法,但我制作的Docker映像是从Python映像开始的。我的Docker文件如下所示:

FROM python:3.x

MAINTAINER Me

COPY . /app #Copy whole directory where the docker file is to /app directory, I've also seen /usr/app but I guess it's just personal preference.

WORKDIR /app #Switch to the directory you've copied the app to. So you're working from the directory where your app is, makes running files easier.

EXPOSE 80

RUN pip install --no-cache-dir -r requirements.txt #Install required packages

CMD ["python", "./Movieflix/webservice.py"] #Run Python and my python file

尽管在docker hub提供的标准python映像上运行相当大,但从python映像开始,无论您使用的是哪种基础,您都无需自己安装它。如果你能在python3.x-alpine上运行它,它会小得多,但是alpine没有很多预装的软件包

如果您的整个应用程序都在./Movieflix目录中,请将docker文件放入其中,然后您可以从CMD行中删除./Movieflix

我假设您开始使用的目录只包含应用程序的内容,而不包含您不想复制到图像中的其他内容

运行pip安装--no cache dir-r requirements.txt行将安装应用程序所需的软件包,但您确实需要创建“requirements.txt”文件。如果您使用的是虚拟环境,则可以使用
pip freeze>requirements.txt

如果您还没有公开,也值得在这里查看Docker文档,因为EXPOSE实际上并不发布端口,以便您通过localhost访问它(如果您正试图这样做的话)

如果您不想包含任何文件,那么使用.dockrignore文件是值得的。工作原理与.gitignore类似

就我个人而言,我从不包括git文件或任何虚拟环境文件。也不要包括任何你不想让别人看到的东西


希望对您有所帮助

您的烧瓶服务在没有Docker的情况下是否正常工作?你能告诉我们你现在是如何运行应用程序的吗(在Docker之外)?@mabergerx这是一个简单的烧瓶应用程序。如果name='main':app.run(debug=True,host=127.0.0.1',port=5000),那么我只需在程序运行时单击url,我就可以通过ctrl+Chost将其关闭必须为0.0.0.0?因为在我的flask应用程序中,我有127.0.0.1否,它可以是localhost,或者您甚至可以不使用它,而使用默认的flask行为。我不理解代码中的这一行。为什么要包括两次电影胶片这里我们将API目录复制到容器副本。/MovieFlix/MovieFlix这里我们将目录从本地系统复制到副本中的容器。/MovieFlix/MovieFlix I get copy failed:stat/var/lib/docker/tmp/docker-builder 664580866/MovieFlix:没有这样的文件或目录,因此我将DockerFolder复制到我的dockerfile文件夹中,我的dockerfile位于我有html模板和flask应用程序?是的,我想是的。假设您在目录MovieFlix中拥有运行应用程序所需的一切,那么您也可以将dockerfile放入MoveFlix中。然后,行
复制/应用程序
将复制整个MoveFlix文件夹。当您构建映像时,您将使用命令提示符导航到MovieFlix目录,并运行
docker build-t MyWebApp:v1。
这将使用dockerfile构建映像。或者,您可以使用用户
docker build-t mywebapp:v1