用docker和nginx在本地搭建服务器

首先需要在本地安装一个虚拟器,我用的是virtualbox,再安装一个docker(https://docs.docker.com/engine/installation/),根据你的操作系统选择相应的版本。利用docker去安装ubantu系统(https://docs.docker.com/engine/installation/linux/ubuntu/#prerequisites) 

接下来安装Nginx,可以使用命令docker pull nginx安装(https://hub.docker.com/_/nginx/),输入下面的命令就可以启动一个名为mynginx的Nginx容器。

docker run --name mynginx -P -d nginx

执行docker ps,效果如下图,在主机里的浏览器里输入:localhost:32768即可访问。

上面的步骤只是简单的搭建一个Nginx服务器,接下来说说如何把自己的项目放到宿主机的Nginx服务里

1、首先要把主机里的文件copy到宿主机里,关键命令是scp,如下图所示,SCP后面的第一个参数是文件在主机里的位置,后面一个参数是你想要在宿主机里存放文件的路径,路径必须是绝对路径。

2、若是不知道宿主机的绝对路径,可以用pwd命令查看,使用docker-machine ssh dockerhost登录宿主机,执行pwd命令即可查看宿主机的绝对路径

3、执行前两个步骤后,用ls查看就可以看到根目录下有一个ssr文件夹,进入后,会有一个hacknews.zip文件。执行unzip hacknews.zip命令可以解压文件

4、编辑nginx配置文件,进入/etc/nginx/conf.d目录下,执行命令sudo vi hacknews.conf,创建并编辑hacknews.conf文件。如下图所示

5、hacknews.conf文件内容如下图所示,listen默认是80,这里我重新改了一个端口,在location /  {}里的root是项目的路径,这里我把之前拷入的hacknews放进去,所以就是/ssr/hacknews。

6、最后执行docker run -d -v /etc/nginx/conf.d:/etc/nginx/conf.d -v /home/docker/ssr:/ssr -p 8888:8881 nginx命令就可以启动一个Nginx容器,我在浏览器里输入192.168.99.100:8888终于可以成功访问了。/etc/nginx/conf.d:/etc/nginx/conf.d是把宿主机conf.d文件夹下的配置文件挂载到容器的conf.d文件夹下,/home/docker/ssr:/ssr是把宿主机下ssr目录下的文件挂载到容器的ssr下。

小结:

run:启动容器,ps: 查看容器,rm:删除容器,stop:停止容器,start:启动容器,kill:杀死一个容器,restart:重启容器

Volume:Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并重新启动通过该镜像启动时,之前的更改将会丢失。
为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。我们可以在运行时使用-v来声明Volume。

docker exec -it a10 bash:进入名为a10(此处a10不是全名)的容器

推荐阅读更多精彩内容