1. 目录结构
|
| ├── django-devops-nginx | | │ ├── Dockerfile | | │ └── nginx.repo | | ├── django-devops-compose | | │ ├── docker-compose.yml | | │ ├── www | | │ ├── conf | | │ │ ├── nginx.conf | | │ ├── log | | │ │ ├── nginx | | │ │ │ ├── access.log | | │ │ │ ├── error.log |
|
每个服务的镜像 Dockerfile,单独放在一个文件夹。django-devops-compose 项目最终组装全部镜像,./www/ 目录被挂在到每个镜像的 /var/www/ 目录下,用于提供动态的配置信息、代码目录、数据目录、日志目录。
2. Dockerfile
文件:django-devops-nginx/Dockerfile
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 |
|
| FROM centos:7 | | | | ADD ./nginx.repo /etc/yum.repos.d/nginx.repo | | | | RUN yum install -y nginx | | | | RUN rm /etc/nginx/nginx.conf | | | | RUN ln -sf /var/www/conf/nginx.conf /etc/nginx/nginx.conf | | | | CMD ["nginx", "-g", "daemon off;"] | | | | EXPOSE 80 |
|
Nginx 源文件:django-devops-nginx/nginx.repo
|
| [nginx] | | | | name=nginx repo | | | | baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ | | | | gpgcheck=0 | | | | enabled=1 |
|
django-devops-compose/docker-compose.yml
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 |
|
| version: '2' | | | | services: | | | | nginx: | | build: ../django-devops-nginx/ | | volumes: | | - ./www/:/var/www/ | | | | | | ports: | | - "80:80" | | expose: | | - "80" |
|
www/conf/nginx.conf
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | | 30 | | 31 | | 32 | | 33 | | 34 | | 35 | | 36 | | 37 | | 38 | | 39 | | 40 | | 41 | | 42 | | 43 | | 44 | | 45 | | 46 | | 47 | | 48 |
|
| user nginx nginx; | | | | worker_processes 2; | | | | events { | | worker_connections 1024; | | use epoll; | | } | | | | http { | | include mime.types; | | default_type application/octet-stream; | | | | upstream django{ | | | | server uwsgi:8000; | | } | | | | server { | | | | listen 80; | | server_name 127.0.0.1; | | charset utf-8; | | | | root /var/www/app; | | | | access_log /var/www/log/nginx/access.log; | | error_log /var/www/log/nginx/error.log; | | | | location /meida { | | alias /var/www/app/media; | | } | | | | location /static { | | alias /var/www/app/static; | | } | | | | location / { | | | | include /etc/nginx/uwsgi_params; | | uwsgi_pass django; | | proxy_set_header Host $host; | | proxy_set_header X-Real-IP $remote_addr; | | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | | } | | | | } | | } |
|
使用 docker-compose up
命令,启动项目之前,如果没有相关镜像,会自动构建镜像,然后启动容器。或者进入 docker-devops-nginx 目录,执行 docker build .
,也可以立即构建镜像。使用 docker images
,查看当前主机上的镜像信息。
|
| REPOSITORY TAG IMAGE ID CREATED SIZE | | djangodevopscompose_nginx latest 253f527fa13c About a minute ago 275.6 MB |
|
通过,http://127.0.0.1/static/index.html 就可以访问了。在本地 ./www/log/nginx/access.log 中可以看到访问的日志信息。
3. 调试方法
3.1 ssh 登陆容器
启动容器,并通过 ssh 登陆 :
|
| docker run -it --rm djangodevops_nginx /bin/bash | | | | [[email protected] /] | | Linux cb769cbf310d 3.10.0-514.26.2.el7.x86_64 |
|
通过 ssh 登陆容器,可以使用 Linux 命令直接对容器进行操作。记录下,操作这些操作命令,用于 Dockerfile 文件的编写,能显著提高构建镜像的效率。
3.2 查看日志
由于在 Nginx 的配置中,将日志目录设置在挂载目录中。可以在本地,直接查看日志调试。
3.3 使用 Linux 作为开发主机
Docker 对 Windows 的支持不够友好,本人使用的是 CentOS 作为开发系统环境,打包镜像。一方便可以避免一些 Windows 的坑,Windows 下也是通过虚拟机提供的 Linux 环境运行 Docker;另一方面,由于 Dockerfile 定义的镜像的基础镜像通常也是 Linux ,如果主机也是 Linux,可以方便脚本的编写和调试。