目录

    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

    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

    version: '2'
    
    services:
    
        nginx:
          build: ../django-devops-nginx/
          volumes:
            - ./www/:/var/www/
          # links:
          #  - uwsgi
          ports:
            - "80:80"
          expose:
            - "80"
    

    www/conf/nginx.conf

    user nginx nginx;
    
    worker_processes 2;
    
    events {
      worker_connections 1024;
      use epoll;
    }
    
    http {
      include mime.types;
      default_type application/octet-stream;
    
      upstream django{
            # server unix:///var/www/conf/uwsgi.sock;
            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 /var/www/conf/uwsgi.params;
              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] /]# uname -a
    Linux cb769cbf310d 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    

    通过 ssh 登陆容器,可以使用 Linux 命令直接对容器进行操作。记录下,操作这些操作命令,用于 Dockerfile 文件的编写,能显著提高构建镜像的效率。

    3.2 查看日志

    由于在 Nginx 的配置中,将日志目录设置在挂载目录中。可以在本地,直接查看日志调试。

    3.3 使用 Linux 作为开发主机

    Docker 对 Windows 的支持不够友好,本人使用的是 CentOS 作为开发系统环境,打包镜像。一方便可以避免一些 Windows 的坑,Windows 下也是通过虚拟机提供的 Linux 环境运行 Docker;另一方面,由于 Dockerfile 定义的镜像的基础镜像通常也是 Linux ,如果主机也是 Linux,可以方便脚本的编写和调试。