Please enable Javascript to view the contents

从零开始使用 Docker 打包 Django 开发环境 (5) Nginx

 ·  ☕ 2 分钟

1. 目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
├── 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

1
2
3
4
5
6
7
8
9
[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/
      # links:
      #  - uwsgi
      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 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,查看当前主机上的镜像信息。

1
2
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 登陆 :

1
2
3
4
docker run -it --rm  djangodevops_nginx  /bin/bash

[root@cb769cbf310d /]# 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,可以方便脚本的编写和调试。


微信公众号
作者
微信公众号