# Nginx
Nginx 是一个功能强大的开源反向代理服务器,支持 HTTP、HTTPS、SMTP、POP3、IMAP 等协议。它也可以做负载均衡器、HTTP 缓存或 Web 服务器。
Nginx 特性:
- 热部署:采用 master 管理进程与 worker 工作进程的分离设计,支持热部署。在不间断服务的前提下,可以直接升级版本。也可以在不停止服务的情况下修改配置文件,更换日志文件等
- 高并发连接:Nginx 可以轻松支持超过 100K 的并发,理论上支持的并发连接上限取决于机器内存
- 低内存消耗:在一般的情况下,10K 个非活跃的 HTTP keep-alive 连接在 Nginx 中仅消耗 2.5MB 的内存,这也是 Nginx 支持高并发连接的基础
- 响应快:在正常情况下,单次请求会得到更快的相应。在高峰期,Nginx 可以比其它 Web 服务器更快地响应请求
- 高可靠性:Nginx 是一个高可靠性的 Web 服务器,这也是用户为什么选择 Nginx 的基本条件,现在很多网站都在使用 Nginx,足以说明 Nginx 的可靠性。高可靠性来自其核心框架代码的优秀设计和实现
可以使用 docker run 指令直接运行官方 nginx 镜像
[root@sarly docker]# docker run -d -p 80:80 --name nginx nginx | |
0f850eb7c1d7db3d558905511af20a7e1cd071602faeae54aebdc9f8be725e4f | |
[root@sarly docker]# docker ps | |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | |
0f850eb7c1d7 nginx "/docker-entrypoin..." 2 seconds ago Up 1 second 0.0.0.0:80->80/tcp nginx |
目前 Nginx 容器已经在 0.0.0.0:80 启动并映射了 80 端口,此时可以打开浏览器访问此地址,就可以看到 Nginx 输出的页面
# 自定义 Web 页面
首先,新建 index.html 文件,自定义内容
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Nginx Web</title> | |
</head> | |
<body> | |
<div> | |
Hello Nginx! | |
</div> | |
</body> | |
</html> |
启动 Nginx 并挂载文件目录到容器
[root@sarly nginx]# docker run -d --name nginx -p 80:80 -v /root/docker/nginx:/usr/share/nginx/html:ro --privileged=true nginx | |
2d7b7e2ac6ccb91a882e7c1091fa5e7c7215eef50a242827758c17443b415b2d |
也可以使用自定义 Dockerfile
# 设置继承自创建的sshd镜像 | |
FROM sshd:dockerfile | |
# 创建着基本信息 | |
MAINTAINER docker_user (user@docker.com) | |
# 安装nginx,设置nginx已非daemon方式启动 | |
RUN \ | |
apt-get install -y nginx && \ | |
rm -rf /var/lib/apt/lists/* && \ | |
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \ | |
chown -R www-data:www-data /var/lib/nginx | |
RUN echo "Asia/Shanghai" > /etc/timezone && \ | |
dpkg-reconfigure -f noninteractive tzdata | |
# 注意这里是更改系统的时区设置,因为在Web应用中经常会用到时区这个系统变量 | |
# 添加用户的脚本,并设置权限 | |
ADD run.sh /run.sh | |
RUN chmod 755 /*.sh | |
# 定义可以被挂载的目录,分别是虚拟主机的挂载目录、证书目录、配置目录和日志目录 | |
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx"] | |
# 定义工作目录 | |
WORKDIR /root/docker/nginx | |
# 定义输出命令 | |
CMD ["/run.sh"] | |
# 定义输出端口 | |
EXPOSE 80 | |
EXPOSE 443 |
run.sh 脚本文件内容
#! /bin/bash | |
/usr/sbin/sshd & | |
/usr/sbin/nginx |
创建镜像,使用 docker build,创建 nginx:stable
[root@sarly nginx]# docker build -t nginx:stable . |
启动容器,查看内部的 80 端口被映射到本地的 32770 端口
[root@sarly nginx]# docker ps | |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | |
88d07c44b263 nginx:stable "/run.sh" 58 minutes ago Up 58 minutes 0.0.0.0:32771->22/tcp, 0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp, 0.0.0.0:32768->5000/tcp agitated_khorana | |
12350822a21f nginx "/docker-entrypoin..." About an hour ago Up About an hour 0.0.0.0:80->80/tcp |