2016-09-21 767 views
2

我已经建立了一个docker django容器,并使用build here构建了其图像。本教程演示了如何创建一个基本的django应用程序,并将应用程序安装到“/ code”,据我了解,它包含在一个数据卷中。在Docker容器中更新代码

但是我想了解,我将如何能够更新和开发此代码,并能够发布/部署它。由于当我提交时,它不会考虑代码中的任何更改,因为它是数据卷的一部分。

有没有什么办法让django代码成为图像的一部分,或者用更新的代码更新图像?

+1

您只需将Python源代码添加到已安装相应python依赖项的容器中即可。并保持该容器的'ENTRYPOINT'为'[“python”,“/path/to/my.py”]'。建立码头图像是你的CI系统根据规则完成的事情,例如只在标签上或仅从主机等等。 – activatedgeek

+0

如何在容器中添加源代码而不是在数据卷中? – bilalba

+0

一般工作流程有一个单独的'Dockerfile.development'和'Dockerfile'(用于生产)。卷正在开发中,但生产dockerfile没有卷指令(在你的情况下它不是必需的)。只需简单地做一个'ADD。/code'。没有卷。 – activatedgeek

回答

-1

tutorial的步骤9中,您设置了一个卷。本卷将链接您的当前目录和您的容器目录。换句话说,他们将是一样的。

因此,对本地文件的任何更新都会更改容器中的文件。请记住,您将需要重新启动您的应用程序,以便进行更改。

在部署图像之前,您需要创建第二个docker撰写文件。该文件将删除该卷,以便代码将保留在容器内,并且不会从外部更改。您可以按照docker compose documentation中提供的步骤操作。

+0

当我更改/ code中的文件时,它们显示在本地Web应用程序中,但是当我推送容器图像并部署它时,它不包含更改。 – bilalba

+0

我认为音量选项可能是问题所在。当你推动你的容器并运行它时,音量仍然可以工作,但不会再使用本地文件。请务必更新您正在部署的代码。 另一种替代方法是删除音量。这样,每次更新代码时都需要重新构建映像。 – alejdg

+0

这就是我要求的。如何更新我部署的代码? – bilalba

0

当你想更新的图像,可以说由于你的应用程序代码的更改,您将图像生成过程中使用COPY,所以在Dockerfile你这样做

COPY /you/code/on/the/host /var/www 

也看到了我对答案“卷”和图像编译https://stackoverflow.com/a/39314602/3625317,以阐明为什么您的代码在构建中缺失