用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端口.