与我们encryption的Docker上的Flask应用程序

我想在Docker实例中创build一个Flask应用程序,该实例使用Let's Encrypt方法获取SSL Cert,从而启用HTTPS。 证书也需要经常自动更新(3个月,我认为),这已经在我的服务器上完成,但Flask应用程序也需要访问该文件!

我需要修改这个Docker文件来启用我们的encryptionfunction?

FROM ubuntu:latest RUN apt-get update -y && apt-get upgrade -y RUN apt-get install -y python-pip python-dev build-essential RUN pip install --upgrade pip COPY . /app WORKDIR /app RUN pip install -r requirements.txt ENTRYPOINT ["python"] CMD ["web/app.py"] 

您可以使用泊坞窗音量function :

卷是主机和容器之间的安装目录。

使用docker创build卷有两种方法:

  1. 你也可以在dockerfile中声明一个VOLUME命令

    FROM ubuntu:latest RUN apt-get update -y && apt-get upgrade -y RUN apt-get install -y python-pip python-dev build-essential RUN pip install --upgrade pip COPY . /app WORKDIR /app RUN pip install -r requirements.txt VOLUME /certdir ENTRYPOINT ["python"] CMD ["web/app.py"]

这将创build一个以/var/lib/docker/volumes的容器ID命名的目录。

当你想从容器中分享一些东西的时候,这个解决scheme更加有用,但是当其他方法不太实际的时候。

  1. 您可以在docker create或docker run上使用-v标志将容量添加到容器中:

    docker run -v /certdir ./certdir web/app.py

其中/certdir是容器中的目录/ certdir,. /certdir是项目目录中主机上的目录。

这个解决scheme将工作,因为主机目录将被安装在定义位置的容器内。 但是如果没有在一些文档中明确指出它,或者为你的docker run / create命令提供一个易于使用的别名,其他用户将不知道如何定义它。

PS:快速提示:

把你的RUN命令放在一个语句中:

 ``` FROM ubuntu:latest RUN apt-get update -y && apt-get upgrade -y \ && apt-get install -y python-pip python-dev build-essential \ && pip install --upgrade pip COPY . /app ``` 

Docker的优点是只会创build一个图层来安装依赖关系,而不是三个。 (见文档 )