簡體   English   中英

Dockerize 現有的 Django 項目

[英]Dockerize existing Django project

我無法理解如何對現有的 Django 應用程序進行 dockerize。 我已經閱讀了 Docker 的官方手冊,解釋了如何在創建 Docker 映像期間創建 Django 項目,但我需要的是使用相同的方法對現有項目進行 dockerize。

這種方法的主要目的是我不需要一直在本地構建 docker 鏡像,而是我想要實現的是將我的代碼推送到附加了 docker-hub watcher 的遠程存儲庫,並且代碼庫已更新,它正在服務器上自動構建。

現在我的 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 (如果是:如何?)來實現我所描述的功能?

這個問題的解決方案:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
RUN pip install *name of package*
RUN pip install *name of another package*
ADD . /code/
EXPOSE 8000
CMD python3 manage.py runserver 0.0.0.0:8000

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
EXPOSE 8000
CMD python3 manage.py runserver 0.0.0.0:8000

requirements.txt 應該是一個簡單的包列表,例如:

Django==1.11
djangorestframework
pyqrcode
pypng

這個問題太寬泛了。 您創建的 Dockerfile 會發生什么?

除非您有多個需要交互的容器,否則您不需要 docker compose。

來自您當前 Dockerfile 的一些一般觀察:

  • 最好將 pip install 命令折疊為單個語句。 在 docker 中,每條語句都會創建一個文件系統層,而 pip install 命令之間的層可能沒有任何用處。
  • 最好在 setup.py 或 requirements.txt 文件( pip install -r requirements.txt )中聲明依賴項,並使用固定版本號( foopackage==0.0.1 )以確保可重復構建。
  • 我建議將您的 Django 應用程序打包到 python 包中並使用 pip ( cd /code/; pip install . ) 安裝它,而不是直接添加代碼目錄。
  • 您缺少執行應用程序的語句(CMD 或 ENTRYPOINT)。 https://docs.docker.com/engine/reference/builder/#cmd

警告: -onbuild圖像已被棄用

@AlexForbes 提出了很好的觀點。 但是如果你想要一個超級簡單的 Django Dockerfile ,你可以這樣做:

FROM python:3-onbuild
RUN python manage.py collectstatic
CMD ["python", "manage.py"]

然后使用以下命令運行容器:

docker run myimagename runserver

小的-onbuild修飾符-onbuild您的大部分需求。 它創建/usr/src/app ,將其設置為工作目錄,將所有源代碼復制到其中,並運行pip install -r requirements.txt (您忘記運行)。 最后,我們收集靜態數據(如果靜態數據托管在某處,則在您的情況下可能不需要),並將默認命令設置為manage.py以便一切都易於運行。

如果您必須運行其他容器(如 Celery、Redis 或任何其他后台任務或您的環境未提供的服務器),則需要docker-compose

我實際上在https://rehalcon.blogspot.mx/2018/03/dockerize-your-django-app-for-local.html寫了一篇關於這個的文章

我的情況非常相似,但它為代碼秘密添加了一個 MySQL db 服務和環境變量,以及docker-compose的使用(在 macOS 中需要)。 我也使用 python:2.7-slim docker parten 圖像,使圖像更小(低於 150MB)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM