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

2023年 1月 4日 42.0k 0

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

[[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,可以方便脚本的编写和调试。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论