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