惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
月光博客
月光博客
博客园 - 聂微东
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
U
Unit 42
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
S
SegmentFault 最新的问题
F
Fortinet All Blogs
H
Help Net Security
J
Java Code Geeks
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
L
LangChain Blog
Martin Fowler
Martin Fowler
N
Netflix TechBlog - Medium

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
从零开始使用 Docker 打包 Django 开发环境 (5) Nginx
微信公众号 · 2017-09-24 · via 陈少文的网站

Please enable Javascript to view the contents

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


微信公众号