django-docker ## 项目根路径 │ .gitignore # git忽略不上传的文件 │ docker-compose.yml # docker-compose文件 │ Dockerfile # 部署django项目的dockerfile │ README.md # 项目Readme说明 │ requirements.txt # 项目必须要安装的文件 │ ├─nginx ## nginx容器配置文件 │ │ nginx.conf # /etc/nginx/nginx.conf配置文件 │ │ │ └─conf # /etc/nginx/conf.d配置nginx文件夹 │ default.conf │ └─web ## 部署django项目的web容器 │ manage.py │ uwsgi.ini # django项目的uwsgi配置文件 │ ├─demoapp │ │ admin.py │ │ apps.py │ │ models.py │ │ tasks.py # 配置celery任务文件 │ │ tests.py │ │ urls.py │ │ views.py │ │ __init__.py │ │ │ ├─migrations │ │ __init__.py # 引入celery │ │ │ └─templates │ └─demoapp │ celery_detail.html # 查看具体celery执行结果页面 │ celery_index.html # 查看对应celery任务页面 │ index.html # 项目主页面 │ └─web celery.py # celery配置文件 settings.py urls.py wsgi.py __init__.py
doclerfile
FROM python:3 ENV PYTHONUNBUFFERED=1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # ADD . /code/ django-dockerDockerfile
docker-compose
version: '3' services: mysql: image: mysql:5.7 volumes: - ./mysql:/var/lib/mysql expose: - "3306" restart: always environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=djangodocker - MYSQL_USER=django - MYSQL_PASSWORD=django nginx: image: nginx:alpine volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/conf:/etc/nginx/conf.d - ./web/staticfiles:/django_static ports: - "80:80" depends_on: - web redis: image: redis:alpine expose: - "6379" restart: always web: build: . # command: python manage.py runserver 0:8000 # ports: # - "8000:8000" command: uwsgi --ini uwsgi.ini working_dir: /code/web volumes: - .:/code expose: - "8000" depends_on: - mysql - redis celery: build: . command: celery -A web worker -l info working_dir: /code/web volumes: - .:/code depends_on: - mysql - redis docker-compose.yml
docker-compose 详解:
version: '3' # cocker compose版本号 services: # 顶级配置文件 mysql: # 服务名: 容器建通信、管理容器 image: mysql:5.7 # 引入官方mysql镜像 volumes: - ./mysql:/var/lib/mysql # 把当前文件夹下的 ./mysql文件夹挂载到docker容器 /var/lib/mysql 路径下 expose: - "3306" # 将当前容器的端口3306端口暴露给link到本容器的容器 restart: always # 宿主机重启自动拉起这个docker容器 environment: - MYSQL_ROOT_PASSWORD=root # mysql服务器root密码root - MYSQL_DATABASE=djangodocker # 创建数据库 djangodocker - MYSQL_USER=django # 创建一个用户 django - MYSQL_PASSWORD=django # 用户密码为django nginx: image: nginx:alpine volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/conf:/etc/nginx/conf.d - ./web/staticfiles:/django_static ports: - "80:80" # 绑定容器的80端口到主机的80端口 depends_on: - web # 必须先启动web容器然才能启动nginx容器 redis: image: redis:alpine expose: - "6379" restart: always web: build: . # command: python manage.py runserver 0:8000 # ports: # - "8000:8000" command: uwsgi --ini uwsgi.ini # 启动uwsgi命令 working_dir: /code/web # 项目工作路径 volumes: - .:/code # 将当前文件夹下所有文件挂载到容器的 /code 文件夹 expose: - "8000" depends_on: # 必须mysql和reids容器启动后才能启动web容器 - mysql - redis celery: build: . command: celery -A web worker -l info working_dir: /code/web volumes: - .:/code depends_on: - mysql - redis