喵の窝

我可能遇上了假主机 - docker使用小记 (贰)

Nginx

nginx在Docker hub中有官方镜像。使用

1
$ docker pull nginx

就能安装。装好以后使用

1
$ docker run nginx

就能启动一个nginx的容器了。

端口映射以及后台运行

这时,如果访问localhost会发现并没有看到nginx的欢迎界面。这是因为nginx监听的是docker内的80端口,而并不是宿主机的80端口。除此之外,用这个命令启动的nginx是在前台运行,启动完nginx以后我们就不能在终端输入其他命令了。于是,我们修改一下启动命令。

1
$ docker run -p 80:80 -d nginx

这时,输入完成docker以后终端只输出了docker的id,我们可以继续输入其他命令。而且,这时如果访问localhost应该也可以看到nginx的欢迎界面了。比较一下,这个命令比上个命令多了两个选项,`-p’和`-d’。-p的作用是映射docker端口到宿主机。格式是

-p 宿主机端口:docker端口

上面命令中`-p 80:80’就是把docker的80端口映射到宿主机的80端口。如果需要使用https协议,还需要映射443端口。

1
$ docker run -p 443:443 -p 80:80 -d nginx

-d的作用是让nginx在后台运行,以便在终端中继续输入命令。

数据卷

下面,我们使用自己的主页来替换掉默认的欢迎页面。和linux系统的mount一样,docker可以把宿主机的一部分文件系统mount到容器内部。这样,docker容器就能访问到宿主机的文件了。

1
2
3
$ docker run -p 80:80 -d \
-v /Your/Index/Path/index.html:/usr/share/nginx/html/index.html \
nginx

上面这个命令使用-v选项把宿主机内的/Your/Index/Path/index.html文件映射成容器内部的/usr/share/nginx/html/index.html文件。容器内原来的文件则被宿主机内的文件覆盖。这样一来,访问localhost就能看到我们自己的主页了。(你问我怎么知道nginx欢迎页面在容器内的路径?因为官方文档里面有写啊。)
使用同样的方法,我们也可以映射宿主机内的一个目录到容器内。如果原容器内对应目录有文件,则会被宿主机覆盖。

虚拟服务器

又是从官方文档中得知,nginx镜像会读取容器内部/etc/nginx/conf.d/目录下,以*.conf结尾的配置文件。所以,我们可以把虚拟主机的配置文件放在宿主机的一个目录内,再把这个目录映射到docker容器内部的/etc/nginx/conf.d目录中。

1
2
3
4
5
$ docker run -p 80:80 -d \
-v /Your/Index/Path/index.html:/usr/share/nginx/html/index.html \
-v /Your/Conf/Directory/:/etc/nginx/conf.d/ \
-v /Your/Other/Site/In/Virtual/Host:/Some/Path/ \
nginx


至此,一个基本的nginx服务器已经配置完成。接下来的教程中会介绍两个容器之间如何互相通信,以及如何配置phpfpm。

> TO BE CONTINUED …