Nginx 安装与使用(Docker)
Nginx 安装与使用(Docker)。
Nginx 安装与配置
$ docker pull nginx
$ docker run --name nginx -p 80:80 -p 443:443 -e TZ=Asia/Shanghai -d nginx
# 复制证书及配置文件
$ su - renlm
$ mkdir -p nginx/conf.d/SSL
$ docker cp nginx/conf.d/. nginx:/etc/nginx/conf.d/
# 中科大镜像源(如遇失败,请重启容器)
# https://mirrors.ustc.edu.cn/help/index.html
$ docker exec -it nginx /bin/bash
root@77c7487dbbf2:/# cat /etc/os-release
cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
apt-get update
apt-get install -y vim
# vi中文乱码问题
root@77c7487dbbf2:/# vi /etc/vim/vimrc
# 最后加三行
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc
# 修改mime.types配置(xsd直接在线预览)
root@77c7487dbbf2:/# vi /etc/nginx/mime.types
types {
text/xml xml xsd;
}
# 修改nginx.conf配置
root@77c7487dbbf2:/# vi /etc/nginx/nginx.conf
# 在http块内开启高效的文件传输模式
# 开启sendfile
sendfile on;
# 开启tcp_nopush
# 会先将数据缓存到缓存区,存满后发送,主要用来提升网络包的传输效率,仅在sendfile开启时有效
tcp_nopush on;
# 开启tcp_nodelay
# 仅在keepalive状态下才能生效,有数据就发送
tcp_nodelay on;
# tcp_nopush和tcp_nodelay看起来是互斥的,一个是缓存后发送,一个是有数据就发送。但是在linux2.5.9以后这两者可以兼容
# 1、确保数据包在发送给客户之前是已满的
# 2、对于最后一个数据包,tcp_nopush将被删除,允许TCP立即发送,没有延迟
# 开启gzip
# 在http块内或者在单个server块里添加后重启nginx(./nginx -s reload)
gzip on;
# 低于1kb的资源不压缩
gzip_min_length 1k;
# 压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。
gzip_comp_level 5;
# 需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
# 配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_disable "MSIE [1-6]\.";
# 是否添加“Vary: Accept-Encoding”响应头
gzip_vary on;
# 重启并查看
root@77c7487dbbf2:/# exit
$ docker restart nginx
# https://renlm.cn
保存镜像
$ docker login --username=renlm@21cn.com registry.cn-hangzhou.aliyuncs.com
# https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
# docker commit -a "作者" -m "描述信息" 容器id 目标镜像名:[镜像版本号]
# docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/rlm/nginx:[镜像版本号]
# docker push registry.cn-hangzhou.aliyuncs.com/rlm/nginx:[镜像版本号]
$ docker commit -a "renlm.cn" -m "nginx" b1d7e6740cc2 rlm/nginx
$ docker tag e87195903344 registry.cn-hangzhou.aliyuncs.com/rlm/nginx:latest
$ docker push registry.cn-hangzhou.aliyuncs.com/rlm/nginx:latest
拉取镜像
$ docker login --username=renlm@21cn.com registry.cn-hangzhou.aliyuncs.com
docker pull registry.cn-hangzhou.aliyuncs.com/rlm/nginx
创建本地目录并启动
$ sudo mkdir -p /docker/nginx/{log,conf.d,html}
# nginx-临时启动生成配置文件(--rm 停止即删除容器文件)
$ docker run --rm --name nginx -p 80:80 -p 443:443 -d registry.cn-hangzhou.aliyuncs.com/rlm/nginx
sudo docker cp nginx:/usr/share/nginx/html/. /docker/nginx/html/
sudo docker cp nginx:/etc/nginx/conf.d/. /docker/nginx/conf.d/
sudo docker cp nginx:/etc/nginx/nginx.conf /docker/nginx/
sudo docker cp nginx:/etc/nginx/mime.types /docker/nginx/
docker stop nginx
$ docker run --restart=on-failure --name nginx \
-p 80:80 \
-p 443:443 \
-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/mime.types:/etc/nginx/mime.types \
-v /docker/nginx/html:/usr/share/nginx/html \
-v /docker/nginx/log:/var/log/nginx \
-e TZ=Asia/Shanghai \
-d registry.cn-hangzhou.aliyuncs.com/rlm/nginx