Docker/Docker-Compose部署Django
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                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/| 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| restart | 除正常工作外,容器會在任何時候重啟,比如遭遇 bug、進程崩潰、docker 重啟等情況 | 
| build | 指定一個包含Dockerfile的路徑,并通過此 Dockerfile 來構建容器鏡像。注意那個 “.” ,代表當前目錄 | 
| dockerfile | 如果需要指定額外的編譯鏡像的Dockefile 文件,可以通過該指令來指定。 | 
| command | 容器運行時需要執行的命令。這里就是我們很熟悉的運行開發服務器了。 | 
| volumes | 卷,這是個很重要的概念。宿主機和容器目錄的映射。 | 
| ports | 定義了宿主機和容器的端口映射;宿主機端口映射到本容器的端口 | 
| depends_on | 意思是此容器需要等待 db 容器啟動完畢才能夠啟動 | 
| image | 從倉庫拉取 MySQL 5.7鏡像??梢宰约憾ò姹?/td> | 
| 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 up4.安裝nginx
1.安裝nginx
yum install nginx2.進入nginx的目錄
cd /etc/nginx/conf.d3.編輯你的前端項目配置
vi your_name.confyour_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
 
- 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的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: nginx proxy_pass匹配路径
 - 下一篇: [anjularjs] ui-route