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