Nginx是大规模互联网服务的最佳前端服务器,在Web服务、正向代理、反向代理、负载均衡等方面大量应用。Docker容器技术这两年超级火爆,可以实现快速的应用服务器部署。下面介绍通过Docker快速部署Nginx服务的方法,既可以用于大规模集群,也可以用于小规模服务、内部网站和个人网站的服务发布。
快速开始
运行下面的脚本:
docker run --name nginx -d -p 80:80 tutum/nginx
然后到浏览器输入http://localhost ,即可看到缺省的结果。
--name nginx
,该参数命名容器实例的名字,便于使用 docker rm -f nginx
直接删除。
现在,我们进去看一下容器里面的配置,运行:
docker exec -it nginx /bin/bash
缺省的Nginx安装在var/lib/nginx下,配置在etc/nginx下面,包括nginx.conf主配置文件,conf.d和site-enabled是附加的配置文件。后面,我们将会该目录映射到宿主机目录,以便于修改和管理。
网站开发
在宿主机建立一个目录app,然后将其映射到容器nginx的/app目录。/app目录在容器的缺省配置文件 /etc/nginx/site-enabled 中已经将/app设为缺省的网站根目录了。
运行如下命令:
docker run --name nginx -d -p 80:80 \
-v /home/username/app /app \
tutum/nginx
然后到/home/username/app下创建一个index.htm文件,随便写点啥(vim index.htm)。再去刷新浏览器,可以看到刚才写入的内容了。如果没有看到,试试 docker logs nginx,看看日志。
修改配置文件
在宿主机建立sites-enabled,然后映射到容器的/etc/nginx/sites-enabled/。注意下面的命令要使用绝对路径,将/.../sites-enabled/换成自己的绝对路径。 进目录/.../sites-enabled/,建立default配置文件。内容为标准的nginx配置文件,如:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /app;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}
上面这个文件是tutum/nginx里面的/etc/nginx/sites-enabled/default文件内容。
然后,运行如下命令:
docker run --name nginx -d -p 80:80 \
-v /.../sites-enabled/:/etc/nginx/sites-enabled/
-v /home/username/app:/app \
tutum/nginx
使用Dockerfile
上面是使用命令行运行,下面将这些参数放到Dockerfile里面,然后运行docker build就可以生成自己的衍生镜像,放到自己的Docker Registry仓库里面运行。
FROM tutum/nginx
ADD sites-enabled/ /etc/nginx/sites-enabled/
ADD app/ /app/
EXPOSE 80
注意:
- 这里将sites-enabled/和app/目录里的内容打包到docker镜像里面去了,因此从任何其它机器可以直接拉取镜像就可以运行,非常方便。
- 但这也会带来安全性的隐患,比如将数据(如密码)传送到了运行机器,因此,切勿将这样的【打包镜像】传到公共的镜像仓库中。
- 构建器源码Dockerfile:https://github.com/openthings/nginx