Docker/Docker-Compose部署Django

Docker/Docker-Compose部署Django前后不分离开发

  1. 什么是Dockerfile
    类似于脚本,将docker镜像,使用自动化的方式实现出来。

  2. Dockerfile的作用
    ​ 找一个镜像: ubuntu

    ​ 创建一个容器: docker run ubuntu

    ​ 进入容器: docker exec -it 容器 命令

    ​ 操作: 各种应用配置

    ​ …

    ​ 构造新镜像: docker commit

  3. 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

第三步

  1. 把项目放到服务器上
    比如: 在 home 目录下建一个 root文件夹,把项目放在里面

在项目应用目录下建 Dockerfile 文件

	从仓库拉取 带有 python 3.7 的 Linux 环境
	FROM python:3.7
    设置 python 环境变量
	ENV PYTHONUNBUFFERED 1
 	添加这两行
	RUN apt-get update
	RUN apt-get install python3-dev default-libmysqlclient-dev -y
	创建 code 文件夹并将其设置为工作目录
	RUN mkdir /code
	WORKDIR /code
 	更新 pip
	RUN 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: always
    build: .  # '点'代表当前目录
    dockerfile:./c/d/Dockerfile
    command: "python3 manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    container_name: docker-web-container
  db:
    image: mysql:5.7
    volumes:
      - "./mysql:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - 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; #有域名放域名,没域名就是 localhost

    location / {
        root /wwwroot/h5; #这里放前端项目目录地址
        index index.html;
    }
}
保存退出编辑

使用dockerfile/docker-compose部署。

1.确定项目的服务,比如mysql,redis,nginx等…

2. 为各个服务编写dockerfile。

  • Nginx --> Dockerfile
    FROM nginx:本版
    RUN rm -rf /etc/nginx/nginx.conf
    COPY ./compose/production/nginx/nginx.conf /etc/nginx/
    
  • Redis --> Dockerfile
    FROM redis:本版
    
  • Web服务 --> Dockerfile
FROM python:本版
RUN apt-get update && \
    apt-get install -y openssl build-essential libopenblas-dev \
    netcat \
    gettext

	ENV PYTHONDONTWRITEBYTECODE 1
	ENV PYTHONUNBUFFERED 1
	RUN  mkdir /app
	COPY . /app
	EXPOSE 8000
	WORKDIR /app
	ENV PIPENV_VENV_IN_PROJECT 1
	
	RUN pip install -r requirments.txt
这个位置要看项目具体使用什么服务,可能需要其他sh文件来启动,或者是初始化。
  • db
    数据库位置比较麻烦
    FROM postgres:11
    
    COPY ./compose/postgresql.conf /postgresql.conf  #读取数据库配置
    
    COPY ./compose/postgres/backup.sh /usr/local/bin/backup
    RUN chmod +x /usr/local/bin/backup
    
    COPY ./compose/postgres/restore.sh /usr/local/bin/restore
    RUN chmod +x /usr/local/bin/restore
    
    COPY ./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-stopped
    container_name: nginx
    ports:
      - "8001:8001"
      - "8000:8000"
    volumes:
      - .:/app
      - .nginx的配置文件位置和Docker映射位置,如同redis的volumes
    depends_on:
      - web

  web:
    build:
      context: .
      dockerfile: web的dockerfile文件位置
    restart: unless-stopped
    container_name: django
    command: 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
      - redis
    volumes:
      - .:/app
    expose:
      - "8000"
    env_file: .env

  db:
    build:
      context: .
      dockerfile:db的dockerfile文件位置
    restart: unless-stopped
    container_name: postgres
    volumes:
      - 配置文件映射位置     
    ports:
      - "1234:1234"  # 可以自定义
    env_file: .env

  redis:
    image: redis:3.0
    restart: unless-stopped
    container_name: redis
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
     - ./redis/redis.conf:/usr/local/etc/redis/redis.conf  映射位置     

最后使用docker-compose build开始创建和启动你的docker服务。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页