日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker/Docker-Compose部署Django

發布時間:2024/1/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker/Docker-Compose部署Django 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Docker/Docker-Compose部署Django前后不分離開發

  • 什么是Dockerfile
    類似于腳本,將docker鏡像,使用自動化的方式實現出來。

  • Dockerfile的作用
    ? 找一個鏡像: ubuntu

    ? 創建一個容器: docker run ubuntu

    ? 進入容器: docker exec -it 容器 命令

    ? 操作: 各種應用配置

    ? …

    ? 構造新鏡像: docker commit

  • Dockerfile使用準則
    1.大: 首字母必須大寫D

    2.空: 盡量將Dockerfile放在空目錄中。

    3.單: 每個容器盡量只有一個功能。

    4.少: 執行的命令越少越好。

  • 1.Dockerfile使用命令

    構建鏡像命令格式:docker build -t [鏡像名]:[版本號][Dockerfile所在目錄] 構建樣例:docker build -t nginx:v0.2 /opt/dockerfile/nginx/ 參數詳解:-t 指定構建后的鏡像信息, /opt/dockerfile/nginx/則代表Dockerfile存放位置,如果是當前目錄,則用 .(點)表示 #Dockerfile快速入門

    docker,docker-compose安裝

    第一步

    切換yum源: https://blog.csdn.net/wangshuminjava/article/details/84380308 https://blog.csdn.net/qq_39157144/article/details/94717837

    第二步

    1. 安裝docker Centos:https://www.runoob.com/docker/centos-docker-install.html Ubuntu:https://www.cnblogs.com/leoshi/archive/2004/01/13/12742276.html 2.安裝docker-compose 下載地址:http://get.daocloud.io/ apt地址:https://blog.csdn.net/diligent_lee/article/details/79098302

    第三步

  • 把項目放到服務器上
    比如: 在 home 目錄下建一個 root文件夾,把項目放在里面
  • 在項目應用目錄下建 Dockerfile 文件

    從倉庫拉取 帶有 python 3.7 的 Linux 環境FROM python:3.7設置 python 環境變量ENV PYTHONUNBUFFERED 1添加這兩行RUN apt-get updateRUN apt-get install python3-dev default-libmysqlclient-dev -y創建 code 文件夾并將其設置為工作目錄RUN mkdir /codeWORKDIR /code更新 pipRUN pip install pip -U -i https://mirrors.aliyun.com/pypi/simple/將 requirements.txt 復制到容器的 code 目錄ADD requirements.txt /code/安裝庫 并使用阿里源安裝RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/將當前目錄復制到容器的 code 目錄ADD . /code/ FROM python:3.7指令從倉庫拉取一個包含 python 3.7 的 Linux 操作系統環境
    RUN 和 WORKDIR指令都是針對容器的,功能是在docker容器里創建目錄、并將其設置為工作目錄;注意宿主機是沒有這個目錄的
    ADD requirements.txt /code/意思是將宿主機當前目錄(即 Dockerfile 所在目錄)的 requirements.txt 文件復制到容器的 /code 目錄中
    ADD . /code/把當前目錄所有內容復制到容器 /code/ 目錄,注意中間那個點

    2. 在項目根目錄下建 docker-compose.yml文件

    version: "3" services:app:restart: alwaysbuild: . # '點'代表當前目錄dockerfile:./c/d/Dockerfilecommand: "python3 manage.py runserver 0.0.0.0:8000"volumes:- .:/codeports:- "8000:8000"depends_on:- dbcontainer_name: docker-web-containerdb:image: mysql:5.7volumes:- "./mysql:/var/lib/mysql"ports:- "3306:3306"restart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=mypassword- MYSQL_DATABASE=django_app version代表 docker-compose.yml 的版本,目前最新版為 3
    restart除正常工作外,容器會在任何時候重啟,比如遭遇 bug、進程崩潰、docker 重啟等情況
    build指定一個包含Dockerfile的路徑,并通過此 Dockerfile 來構建容器鏡像。注意那個 “.” ,代表當前目錄
    dockerfile如果需要指定額外的編譯鏡像的Dockefile 文件,可以通過該指令來指定。
    command容器運行時需要執行的命令。這里就是我們很熟悉的運行開發服務器了。
    volumes卷,這是個很重要的概念。宿主機和容器目錄的映射。
    ports定義了宿主機和容器的端口映射;宿主機端口映射到本容器的端口
    depends_on意思是此容器需要等待 db 容器啟動完畢才能夠啟動
    image從倉庫拉取 MySQL 5.7鏡像。可以自己定版本
    container_name指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。 需要注意,指定容器名稱后,該服務將無法進行擴展,因為 Docker 不允許多個容器具有相同的名稱
    environment定義容器的環境變量,設置了 MySQL 的 root 用戶的密碼、數據庫的名稱。
    詳細鏈接https://blog.csdn.net/jiangyu1013/article/details/82772363

    3.修改Django的setting.py中數據庫的配置

    DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django_app','USER': 'root','PASSWORD': 'mypassword','HOST': 'db', #注意 HOST 填寫的是docker容器的名稱,即 db 'PORT': '3306','OPTIONS': {'charset': 'utf8'},} }

    3. 運行docker

    docker-compose up

    4.安裝nginx

    1.安裝nginx

    yum install nginx

    2.進入nginx的目錄

    cd /etc/nginx/conf.d

    3.編輯你的前端項目配置

    vi your_name.conf

    your_name.conf 是自己隨便取的名字,只要是xxx.conf就行

    server {listen 80;server_name localhost; #有域名放域名,沒域名就是 localhostlocation / {root /wwwroot/h5; #這里放前端項目目錄地址index index.html;} } 保存退出編輯

    使用dockerfile/docker-compose部署。

    1.確定項目的服務,比如mysql,redis,nginx等…

    2. 為各個服務編寫dockerfile。

    • Nginx --> DockerfileFROM nginx:本版 RUN rm -rf /etc/nginx/nginx.conf COPY ./compose/production/nginx/nginx.conf /etc/nginx/
    • Redis --> DockerfileFROM redis:本版
    • Web服務 --> Dockerfile
    FROM python:本版 RUN apt-get update && \apt-get install -y openssl build-essential libopenblas-dev \netcat \gettextENV PYTHONDONTWRITEBYTECODE 1ENV PYTHONUNBUFFERED 1RUN mkdir /appCOPY . /appEXPOSE 8000WORKDIR /appENV PIPENV_VENV_IN_PROJECT 1RUN pip install -r requirments.txt 這個位置要看項目具體使用什么服務,可能需要其他sh文件來啟動,或者是初始化。
    • db數據庫位置比較麻煩 FROM postgres:11COPY ./compose/postgresql.conf /postgresql.conf #讀取數據庫配置COPY ./compose/postgres/backup.sh /usr/local/bin/backup RUN chmod +x /usr/local/bin/backupCOPY ./compose/postgres/restore.sh /usr/local/bin/restore RUN chmod +x /usr/local/bin/restoreCOPY ./compose/postgres/list-backups.sh /usr/local/bin/list-backups RUN chmod +x /usr/local/bin/list-backups

    3.使用Docker-compose管理

    version: '2' services:nginx:build:context: .dockerfile: Nginx的dockerfile文件位置restart: unless-stoppedcontainer_name: nginxports:- "8001:8001"- "8000:8000"volumes:- .:/app- .nginx的配置文件位置和Docker映射位置,如同redis的volumesdepends_on:- webweb:build:context: .dockerfile: web的dockerfile文件位置restart: unless-stoppedcontainer_name: djangocommand: bash -c "python manage.py migrate && python manage.py collectstatic --noinput && python manage.py createdefault && gunicorn mysite.wsgi --worker-class=gevent -b 0.0.0.0:8000 -w 4"depends_on:- db- redisvolumes:- .:/appexpose:- "8000"env_file: .envdb:build:context: .dockerfile:db的dockerfile文件位置restart: unless-stoppedcontainer_name: postgresvolumes:- 配置文件映射位置 ports:- "1234:1234" # 可以自定義env_file: .envredis:image: redis:3.0restart: unless-stoppedcontainer_name: rediscommand: redis-server /usr/local/etc/redis/redis.confvolumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf 映射位置

    最后使用docker-compose build開始創建和啟動你的docker服務。

    總結

    以上是生活随笔為你收集整理的Docker/Docker-Compose部署Django的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。