Docker部署Nginx

什么是Nginx

​ Nginx(发音为“engine-x”)是用于HTTP,HTTPS,SMTP,POP3和IMAP协议的开源反向代理服务器,以及负载均衡器,HTTP缓存和Web服务器(源服务器)。nginx项目首先关注高并发性,高性能和低内存使用率。它根据类似BSD的2条款许可,可在Linux,BSD变体,Mac OS X,Solaris,AIX,HP-UX以及其他* nix版本上运行。它还具有Microsoft Windows的概念验证端口。

下载Nginx镜像

关于docker的命令就不介绍了,可以参考Docker的使用一文

1
2
3
4
5
6
7
8
[root@bogon ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
27833a3ba0a5: Pull complete
ea005e36e544: Pull complete
d172c7f0578d: Pull complete
Digest: sha256:e71b1bf4281f25533cf15e6e5f9be4dac74d2328152edf7ecde23abc54e16c1c
Status: Downloaded newer image for nginx:latest
1
2
3
4
5
6
7
8
9
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 27a188018e18 39 hours ago 109MB
registry.docker-cn.com/library/mongo latest 10dce532716f 3 months ago 393MB
redis latest ce25c7293564 4 months ago 95MB
mysql latest f991c20cb508 5 months ago 486MB
registry.docker-cn.com/library/rabbitmq 3-management d69a5113ceae 5 months ago 149MB
registry.docker-cn.com/library/zookeeper latest f336949ce7a1 5 months ago 148MB
registry.docker-cn.com/library/elasticsearch latest 5acf0e8da90b 6 months ago 486MB

可以看到,已经成功下载了Nginx镜像

启动

具体启动命令可以前往Docker Hub查询

简单启动

1
2
[root@bogon ~]# docker run -d --name nginx-master -p 80:80 nginx
e54ae797add2b080aa6834bb8a3f8a63debcf53010c343c0c23a03573a988ebc
1
2
3
[root@bogon ~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e54ae797add2 nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-master

效果图

这时我们访问宿主机的80端口或者直接访问虚拟机的IP,看到以下页面说明启动成功了

图1

默认的静态页面存放路径

进入nginx镜像

1
2
3
[root@bogon ~]# docker exec -it nginx-master /bin/bash
或者
[root@bogon ~]# docker exec -it nginx-master bash

进入/usr/share/ngin/html,发现有如下两个页面,这个文件夹就是默认的存放路径

1
2
3
root@e54ae797add2:/# cd /usr/share/nginx/html
root@e54ae797add2:/usr/share/nginx/html# ls
50x.html index.html

如何添加静态页面

使用cp、mv等命令将静态页面添加到默认路径下

1
[root@bogon ~]# docker cp hello.html nginx-master://usr/share/nginx/html

通过主机目录映射到容器的默认路径

在运行nginx镜像时,我们需要使用-v参数

1
[root@bogon ~]# docker run -d -v $PWD/html:usr/share/nginx/html --name nginx-master -p 80:80 nginx

-v $PWD/html:usr/share/nginx/html 代表把当前路径下html目录映射为usr/share/nginx/html

也就是说主机下的html就是容器下的usr/share/nginx/html
html内的文件修改和添加就等同于容器usr/share/nginx/html文件操作
外网访问就可以访问得到,就不用再登录容器操作文件了

这里记录一下linux在防火墙开启的状态下打开一个端口

1
2
3
echo "enter the port: "
read port
firewall-cmd --add-port=$port/tcp

调整默认配置

正在运行的nginx容器中执行以下命令

1
2
$ docker run --name tmp-nginx-container -d nginx
$ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf