利用docker部署nginx

用docker部署mysql,mongodb,redis等

建议移步 菜鸟教程

我感觉学习docker,菜鸟教程也会介绍的很详细,我下面重点介绍一下nginx,因为你学习完以后会发现,所有的部署你不用懂,安装菜鸟教程上的命令都能启动,不要太简单,但是到了nginx就不能直接去用了,因为会有些小问题.

第一步,肯定是先下载镜像对吧

docker pull nginx

第二步,查看镜像

docker images nginx

说明也没问题

第三步,启动容器

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx  

这时候就会报错了


[root@bogon overlay2]# docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx  
13bdd883e2d3854231ea92aee362592d2b3cfefbd5b71b7001a4289ddeb57470
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting \\\"/var/lib/docker/overlay2/conf/nginx.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged\\\" at \\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged/etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\""
: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

这是为什么呢,我们来分析一下

  • -p 80:80:将容器的80端口映射到主机的80端口

    扫描二维码关注公众号,回复: 4455211 查看本文章
  • --name mynginx:将容器命名为mynginx

  • -v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www

  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf

  • -v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs

主要是因为conf文件的问题,ok,我们先删除该容器,避免重名

 sudo docker rm myginx

再来一次,先不挂载nginx.con配置文件

docker run -p 80:80 --name mynginx -v $PWD/www:/www  -v $PWD/logs:/wwwlogs  -d nginx

然后使用如下命令进入交互式终端:

sudo docker exec -it mynginx /bin/bash

然后使用如下命令找到nginx.conf 配置文件 

root@ab77dcbfcb81:/# cd /etc/nginx/ 
root@ab77dcbfcb81:/etc/nginx# ls
conf.d    fastcgi_params    koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params    uwsgi_params  win-utf

最后使用exit命令退出交互式终端,使用如下命令进行配置文件的拷贝,将其粘贴到/root/conf/nginx.con.

注意:1)最后加/就是文件夹,不加/就是文件如下命令所示,前面的nginx.conf 和后面的nginx.conf 都是文件,所以没有以/结尾。

   2 ) ab77dcbfcb81与上面的root@ab77dcbfcb81要对应

docker cp ab77dcbfcb81:/etc/nginx/nginx.conf $PWD/conf/nginx.conf #使用id或names【mynginx】

此时已经成功配置使用ip+80端口即可访问。但是在修改/root/conf/nginx.conf文件实现负载均衡的时候不起作用。你就发现还没完成任务需要使用docker rm mynginx重新删除nginx容器,再次使用第一次使用的命令重新新建nginx容器:

ocker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx

这时候就可以了访问了.

如果想配置其他端口(下面是我自己的,将容器的80端口映射到主机的8081端口,当前用户下的demo文件夹,docker名为mynginx2)

sudo docker run -p 8081:80 --name mynginx2 -v $PWD/www:/www  -v $PWD/demo:/usr/share/nginx/html  -d nginx

需要注意的是,使用其他端口时,要关闭80端口的容器,80代表所有的,要避免产生冲突,而且如果不能启动,请在阿里云服务器的管理控制台开启相关的tcp端口.

猜你喜欢

转载自blog.csdn.net/qq_40513881/article/details/84945275