当Azure build一个Niginx docker 镜像时,无法通过浏览器访问这个镜像,于是想到了把这个网站发布到互联网中,这样就能验证网站是否正确。
本问跳过如何创建Azure Ubantu的虚拟机以及安装docker,直奔主题,如何发布一个Nginx 网站到互联网。
1. 安装Nginx,
docker pull nginx
2.部署docker
docker run -d -p 80:80 --name nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
命令说明:
-
-p 80:80: 将容器的 80 端口映射到主机的 8082 端口。
-
--name nginx-test-web:将容器命名为 nginx-test-web。
-
-v ~/nginx/www:/usr/share/nginx/html:将我们自己创建的 www 目录挂载到容器的 /usr/share/nginx/html。
-
-v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf。
-
-v ~/nginx/logs:/var/log/nginx:将我们自己创建的 logs 挂载到容器的 /var/log/nginx。
~/nginx/www 为虚拟机路径,放置html文件的地址, /usr/share/nginx/html 为docker内部Nginx 默认的html文件映射地址。
~/nginx/conf/nginx.conf 为虚拟机nginx.conf 文件,可以修改此文件,然后运行上面命令则会将此文件映射到docker Nginx中。
~/nginx/logs 同理
如何验证上述docker 中关于Nginx路径是否正确呢?
运行docker ps, 获取此docker image id(比如 e86938b1f4c3), 然后运行下面命令进入docker 命令行中。
docker exec -it 9fbe362214a6 /bin/bash
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN(标准输入) 打开,以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
运行 上述命令后就可以进入docker环境的命令行中,检查各种配置或者文件是否正确了。
上面将网站已经发布到内网中,在命令行中使用 curl http://localhost:80 查看是否显示正确,如果显示正确进入下一步,发布到互联网中。
1.在Azure 新portal中,选择所有资源(All Resources),找到上面部署虚拟机的网络安全组,默认名字为 [虚拟机名-nsg].
2.进入网络安全组中,查看Inbound security rules,设置80端口,如下图。
3. 在同一页面中,设置子网Subnets,将默认的子网与虚拟机对应的虚拟网络关联起来,则可以顺利被外网访问。
4. 在本地电脑打开浏览器,查看 http://[虚拟机ip(SSH 输入的IP地址)],看是否页面正常访问。