摘要:今天整理了一下如何在中部署項目。執行可以查看容器出錯的具體原因。若上述容器都成功運行,則在瀏覽器中輸入時,視圖會返回相應的結果。以交互方式進入容器后,進入數據庫,會看到在數據庫中生成了相應的表。
今天整理了一下如何在docker中部署django項目。
1.環境如下:
python3.6 django2.0.5 nginx mysql5.7 gunicorn
2.項目結構如下:
由于僅僅是測試,項目比較簡單,復雜的項目也是這個流程。
通過上面的結構,我們需要編寫的文件包括
blog/Dockerfile, blog/gunicorn.conf, blog/start.sh, nginx/Doickerfile, nginx/nginx.conf, docker-conpose.yml
3.blog/Dockerfile(基礎鏡像使用的是python:3.6,而不是ubuntu、centos。如果是ubuntu、cenos,Dockerfile文件中需要配置python環境):
FROM python:3.6 # 選擇基礎鏡像,這里的基礎鏡像也可以選擇ubuntu,centos等,但是下面的配置就會發生變化 # 創建工作目錄 RUN mkdir /blog #設置工作目錄 WORKDIR /blog #將當前目錄加入到工作目錄中 ADD . /blog RUN pip3 install -r requirements.txt #對外暴露端口 EXPOSE 80 8080 8000 5000 #設置環境變量 ENV SPIDER=/blog
4.blog/gunicorn.conf:
workers=2 bind="0.0.0.0:8000" proc_name="blog"
5.blog/start.sh:
#!/bin/bash python manage.py collectstatic --noinput&& python manage.py makemigrations&& python manage.py migrate && gunicornblog.wsgi:application -c gunicorn.conf
6.nginx/Dockerfile:
FROM nginx # nginx鏡像,最好是先拉取到本地 # 對外暴露端口 EXPOSE 80 8000 RUN rm /etc/nginx/conf.d/default.conf # 刪除原有配置文件 ADD nginx.conf /etc/nginx/conf.d/ # 添加配置文件 RUN mkdir -p /usr/share/nginx/html/static # 創建靜態資源文件夾
7.nginx/nginx.conf:
server { listen 80; server_name localhost; location /static { alias /usr/share/nginx/html/static; } location / { proxy_pass http://web:8000; proxy_set_header Host $host; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
8.docker-compose.yml:
version: "3" services: db: image: mysql:5.7 # mysql鏡像,最好先拉取到本地 environment: - MYSQL_HOST=localhost - MYSQL_DATABASE=docker - MYSQL_USER=root - MYSQL_PASSWORD=wyzane - MYSQL_ROOT_PASSWORD=wyzane volumes: - /home/wyzane/pyprojects/db:/var/lib/mysql # 將宿主機與容器中的文件映射 restart: always # 若容器運行出現問題,會自動重啟容器 web: build: ./blog ports: - "8000:8000" volumes: - ./blog:/blog - /tmp/logs:/tmp command: bash start.sh # 執行命令,有多種格式 links: - db depends_on: - db restart: always nginx: build: ./nginx ports: - "80:80" volumes: - ./blog/static:/usr/share/nginx/html/static:ro links: - web depends_on: - web restart: always
9.依次執行以下命令:
docker-compose build
docker-compose up -d
10.執行完成后,通過
docker images 命令可以查看新增了2個鏡像
docker ps 命令可以查看啟動了3個容器
多執行幾次docker ps,當容器的STATUS是以Restarting開頭時,表示這個容器運行時發生了錯誤。執行docker logs CONTAINERID可以查看容器出錯的具體原因。
若上述容器都成功運行,則在瀏覽器中輸入http://127.0.0.1:80/api/v1/articles/info/時,視圖會返回相應的結果。
以交互方式進入容器:
docker exec -it CONTAINERID /bin/bash
后,進入mysql數據庫,會看到在數據庫中生成了相應的表。
11.運行中遇到的問題,在運行3個容器后,web容器一直報錯,通過
docker logs CONTAINERID查看主要錯誤信息如下:
django.db.utils.OperationalError: (2003, "Can"t connect to MySQL server on "mariadb55" (111 "Connection refused")")
解決方案在這里 https://stackoverflow.com/que...
主要是在settings.py中,將database配置中的HOST值改成db,而不是127.0.0.1,指向docker-compose.yml中的db服務
參考自 https://blog.csdn.net/hbnn111...
今天就聊到這里,如有疑問,歡迎交流!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27547.html
摘要:今天整理了一下如何在中部署項目。執行可以查看容器出錯的具體原因。若上述容器都成功運行,則在瀏覽器中輸入時,視圖會返回相應的結果。以交互方式進入容器后,進入數據庫,會看到在數據庫中生成了相應的表。 今天整理了一下如何在docker中部署django項目。 1.環境如下: python3.6 django2.0.5 nginx mysql5.7 gunicorn 2.項目結構如下:...
摘要:按照指示,分別安裝和,然后測試安裝結果接下來,根據以下項目結構從克隆一份項目或自己創建項目現在我們準備容器運行開啟,只需運行這個命令設置一個新的開發環境。 原文地址:Django Development With Docker Compose and Machine 以下為譯文 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器...
摘要:而大多數數據科學研究的場景下,更快的速度也意味著更早地發現問題和完成檢驗假設的閉環。通常,數據科學被認為研究成果立即應用到生產環境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數據科學研究中,快速驗證想法是非常關鍵的一環,而如何快速開發出數據產品則可以有效推動整個數據科學項...
摘要:而大多數數據科學研究的場景下,更快的速度也意味著更早地發現問題和完成檢驗假設的閉環。通常,數據科學被認為研究成果立即應用到生產環境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數據科學研究中,快速驗證想法是非常關鍵的一環,而如何快速開發出數據產品則可以有效推動整個數據科學項...
摘要:背景當多個項目且某些包無法兼容時,通常我們使用虛擬環境即可解決。但事實上不僅僅只能用于線上應用部署,我們的開發調試環境也可以使用。 背景 當多個Python項目且某些包無法兼容時,通常我們使用虛擬環境即可解決。 但是在團隊中多個環境其實相對比較固定了,較少變更,如果換電腦或者新人加入需要重新一個一個配置虛擬環境并安裝相應的包,會耗費很多時間,而且由于重新安裝的包依賴可能會有版本變更導致...
閱讀 7581·2023-04-25 14:36
閱讀 1747·2021-11-22 09:34
閱讀 2137·2019-08-30 15:55
閱讀 3138·2019-08-30 11:19
閱讀 1301·2019-08-29 15:17
閱讀 544·2019-08-29 12:47
閱讀 2984·2019-08-26 13:38
閱讀 2622·2019-08-26 11:00