如何部署Docker Nginx?

Docker

1 基础知识

– Nginx即英文“engine-x”的发音
– Nginx是用于HTTP、HTTPS、SMTP、POP3和IMAP协议的开源反向代理、负载均衡器、HTTP缓存和Web服务器
– Nginx项目关注高并发、高性能和低内存使用率
– Nginx可运行于Linux、BSD变体、Mac OS X、Solaris、AIX、HP-UX和其他*nix
– Nginx还具有Microsoft Windows的概念验证端口

2 最佳实践

2.1 环境配置

2.1.1 系统环境配置

IP Address = 10.168.0.71
Host Name = any
OS = CentOS 7.6 x86_64

2.1.2 软件环境配置

如果你尚未部署Docker,请按照如下文档部署,
https://www.cmdschool.org/archives/2183

2.2 准备映像

2.2.1 下载Nginx服务器Docker映像

docker pull nginx:1.16.1

其他版本请参阅以下链接,
https://hub.docker.com/_/nginx?tab=tags

2.2.2 查看下载的映像

docker image ls

可见如下显示,

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
nginx                                   1.16.1              41e97992fcd8        3 weeks ago         126MB

2.3 托管简单的静态内容

2.3.1 准备静态页面的目录

mkdir -p /var/www/html

2.3.2 创建静态页面

echo www.cmdschool.org > /var/www/html/index.html

2.3.3 运行nginx实例

docker run --name www.cmdschool.org -v /var/www/html/:/usr/share/nginx/html:ro -d nginx:1.16.1

参数“-v”将目录“/var/www/html/”挂载到实例的“/usr/share/nginx/html”目录,使用“ro”参数声明只读,
运行可见如下信息,

1eda3c2776ce9bdf26580a778289d8367225c585b1afb47fd767a4119065622b

2.3.4 查询实例IP

docker inspect www.cmdschool.org

可见如下显示,

[...]
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "e3134a755397c4841912004d8ecff4bf918f6484e9873e3da815946062e87940",
                    "EndpointID": "2685914c67beec16810e9f3704062d49cd028b6b0de8f2e508d08610a3531326",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
[...]

如上所示,请注意“IPAddress”的值

2.3.5 测试服务

curl http://172.17.0.3

可见如下显示,

www.cmdschool.org

2.4 代理端口到外部

2.4.1 停止并删除服务

docker stop www.cmdschool.org
docker rm www.cmdschool.org

2.4.2 增加端口代理定义

docker run --name www.cmdschool.org -v /var/www/html/:/usr/share/nginx/html:ro -p 8080:80 -d nginx:1.16.1

留意“-p”参数的定义

2.4.3 确认代理端口倾听

netstat -antp | grep docker

可见如下显示,

tcp6       0      0 :::8080                 :::*                    LISTEN      112339/docker-proxy

2.4.4 测试端口代理配置

curl http://10.168.0.71:8080

可见如下显示,

www.cmdschool.org

另外,旧的服务一样可以访问,

curl http://172.17.0.3

可见如下显示,

www.cmdschool.org

2.4 数据与配置持久化配置(适合生产环境)

2.4.1 创建配置文件目录

mkdir -p /data/docker/etc/nginx/

2.4.2 复制实例的配置到配置文件目录

docker cp www.cmdschool.org:/etc/nginx/ /data/docker/etc/

2.4.3 停止并删除服务

docker stop www.cmdschool.org
docker rm www.cmdschool.org

2.4.4 增加端口代理定义

docker run --name www.cmdschool.org \
           -v /var/www/html:/usr/share/nginx/html \
           -v /data/docker/etc/nginx:/etc/nginx \
           -p 8080:80 \
           -d nginx:1.16.1

2.4.5 测试实例的服务

curl http://10.168.0.71:8080

可见如下显示,

www.cmdschool.org

使用如下命令修改页面的内容,

echo nginx.cmdschool.org > /var/www/html/index.html

再次测试实例的服务,

curl http://10.168.0.71:8080

可见如下显示,

nginx.cmdschool.org

参阅文档
===============
https://hub.docker.com/_/nginx

没有评论

发表评论

Nginx
如何解决Nginx代理传大文件不同步问题?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境遇到用户透过反向代理上传大文件提示用户已经完成 …

Nginx
如何实现Nginx根据路径分配代理?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境遇到需要根据URI路径选择走哪个代理服务器的案 …

Nginx
如何实现Nginx返回字符串或变量值?

1 前言 一个问题,一篇文章,一出故事。 笔者测试环境中经常需要返回Nginx变量的具体值,于是整理 …