Dockerizing现有的Django项目
我无法包装如何dockerize现有的Django应用程序。 我已经阅读了Docker 官方手册 ,解释了如何在创buildDocker镜像的过程中创buildDjango项目,但是我需要的是使用相同的方法dockerize现有的项目。
这种方法的主要目的是,我不需要在本地build立docker镜像,而是想将我的代码推送到一个远程仓库,docker-hub观察器连接到它,一旦代码库更新它正在服务器上自动构build。
现在我的Dockerfile看起来像:
FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install Django RUN pip install djangorestframework RUN pip install PyQRCode ADD . /code/
任何人都可以请解释我应该如何撰写Dockerfile,我需要使用docker-compose.yml
(如果是的话:如何?)来实现我所描述的function?
这个问题太广泛了。 你创build的Dockerfile会发生什么?
除非你有多个需要交互的容器,否则你不需要docker组合。
来自您当前的Dockerfile的一些常规观察:
- 将pip install命令合并到一个语句中会更好。 在docker中,每个语句创build一个文件系统层,而pip安装命令之间的图层可能没有用处。
- 最好在setup.py或requirements.txt文件(
pip install -r requirements.txt
)中声明依赖关系,并使用固定版本号(foopackage==0.0.1
)来确保可重复构build。 - 我build议把你的Django应用打包到python包中,并用pip(
cd /code/; pip install .
)安装它,而不是直接添加代码目录。 - 你错过了一个语句(CMD或ENTRYPOINT)来执行应用程序。 请参阅https://docs.docker.com/engine/reference/builder/#cmd
@AlexForbes提出了非常好的观点。 但是,如果你想为Django提供一个超级简单的Dockerfile
,你可以这样做:
FROM python:3-onbuild RUN python manage.py collectstatic CMD ["python", "manage.py"]
然后你运行你的容器:
docker run myimagename runserver
小-onbuild
修饰符可以完成你所需要的大部分工作。 它创build/usr/src/app
,将其设置为工作目录,将所有源代码复制到内部,然后运行pip install -r requirements.txt
(忘记运行)。 最后,我们收集静态信息(如果静态托pipe在某处,可能不需要您的情况),并将缺省命令设置为manage.py
这样一切都很容易运行。
如果您必须运行其他容器(如Celery,Redis或任何其他不是由您的环境提供的后台任务或服务器),则需要docker-compose
。
- 来自守护进程的错误响应:获取https://registry-1.docker.io/v2/:在192.168.65.1:53上拨号tcp:lookup registry-1.docker.io:没有这样的主机
- Docker群集节点在重启后没有显示出来
- docker构成试图拉现有的图像
- dockerd与docker容器vsdocker运行与docker-containerd-ctr vsdocker容器shim
- 如何在docker机器中为机器设置TLS证书
- 在OSX中安装Docker卷时,权限被拒绝
- Dockerregistry中的所有存储库在docker守护程序重新启动后都会被移除(docker-for-mac)
- Docker:更新映像和registry
- 无法从MacOS连接容器泊坞窗