一、 centos系统
# uname -r
3.10.0-514.26.2.el7.x86_64
# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
# df -h
# ifconfig
二、静态网页部署
#yum install -y nginx
#vim /etc/nginx/conf.d/www.conf
server{
listen 80;
server_name www.qwe.com
root /root/server/public我的项目包server,里面有一个静态网页包pubilc
index index.html
}
#systemctl start nginx
访问查看:
问题:2.nginx部署报403错误
解决:/etc/nginx/nginx.conf 上方将user改为root
或者请看,我的其他解决方法:http://blog.csdn.net/vanilla_he/article/details/79205091
重启systemctl restart nginx
浏览器访问查看:www.qwe.com
三、 docker安装及相关镜像制作,server.zip是项目开发包
[root@localhost ~]#yum install -y docker
[root@localhost ~]#systemctl start docker.service
[root@localhost ~]#systemctl enable docker.service
制作mymongo镜像时基础镜像
[root@localhost ~]#docker pull docker.io/centos
制作mynode镜像时需要的基础镜像
[root@localhost ~]#docker pull docker.io/google/nodejs
查看镜像
# docker images
REPOSITORY
docker.io/google/nodejs
docker.io/centos
四、 mongo容器的创建和启动
[root@localhost mongodb]# pwd
/root/mongodb
[root@localhost mongodb]#docker build -t mymongo . //要看到successful
[root@localhost mongodb]#docker run -dit -p 27017:27017 -v /root/mongodb/backup:/usr/local/mongodb/data/db --name mongodb mymongo
ps:
--name后的mongodb与项目中的开发代码指定的名字一样。
# docker ps //看到mongodb容器已经启动
=========*****-----------
可能遇到的过程问题:无法启动
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker logs mongodb
chown: cannot read directory'/data/db': Permission denied
# docker rm mongodb
答:容器里的数据目录加上绝对路径
========****----------
五、 nodejs容器启动
cd进入项目server目录下
[root@localhost server]# ls
Dockerfile index.js model node_modules package.json
做mynode镜像
[root@localhost server]#docker build -t mynode .
运行
[root@localhost server]#docker run -dit -p3000:3000 --name webnode --link mongodb:mongodb mynode
# docker images ----###查看刚刚创建的镜像
查看容器运行
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1d10aef298d mynode "npm start" 8 weeks ago Up 5 weeks 80/tcp, 0.0.0.0:3000->3000/tcp webnode
f149acf61e43 mymongo "/bin/bash" 11 weeks ago Up 5 weeks 0.0.0.0:27017->27017/tcp mongodb
[root@localhost ~]#
进入mongo容器启动mongodb并查看是否可以连接本机的27017端口
[root@iemes ~]#docker exec -it mongodb /bin/bash root@9d297853365c/]# mongod -f /usr/local/mongodb/mongodb.cnf &
root@44d36a56f2f3:/# mongo
root@44d36a56f2f3:/# mongo172.17.0.1:27017
root@44d36a56f2f3:/# mongo 1.2.3.1:27017
ok的,我做的mymongo镜像不完美,倒是直接可以docker pull mongo:5.4
以上三个命令若都出现下图则说明mongo启动和端口开放是ok的
Exit退出
Mongo准备完毕
关于四个WARNING:
第一个.提醒你,最好使用xfs或者ext4文件系统,尤其是xfs文件系统。
第二个的意思是未对数据库启用访问控制,对数据库的访问和控制不受限制(危险)
答:never那个只需在主机主机中执行,不可以在容器中做,重启数据库就ok了
其他只要加权限就ok
mongo无法连到主机。关闭放火墙ok了,但是web服务却启动不起来
解决方案1:清空防火墙规则#iptables -F
解决方案2:关闭firewalld,重建docker0网络(重建过程如下)
解决方案3:写一个防火墙规则,过程如下:
我用的是centos7系统,所以默认防火墙是firewalld
配置文件
#vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
*****======添加以下内容
<service name="ssh"/>
<port protocol="tcp" port="27017"/>
<rule family="ipv4">
<source invert="True" address="172.17.0.2"/>
<protocol value="icmp"/>
<accept/>
</rule>
***========添加以上内容
</zone>
#firewall-cmd --reload
试一下看数据库是否能访问宿主机。不能就进行下方操作
这时你会发现还是连接不上,甚至停掉容器,重新启动还会报错,报错如下:
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3000 -j DNAT --to-destination 172.17.0.2:3000 ! -i docker0: iptables: No chain/target/match by that name.
这时我的状态是:防火墙开着,容器起不来或者已经起的容器没办法何主机交互。
我只要重建下我的docker0的网卡就ok啦。(参考解决方案2)
总结方案3:写个防火墙规则,重建docker0网卡,容器都重起一下(重建后容器都停了,也不算重起)
PS我的内心活动(防火墙规则不应该在配置文件里写吧,直接写在配置文件里就需要重新加载防火墙,重新加载防火墙就需要重建docker0,就需要重起容器。firewalld是动态防火墙,修改规则是不需要重新的加载的,我应该在界面用命令行写入)
六、 测试
浏览器输入www.qwe.com访问成功
填入数据:
mongodb数据库查看
进入mongodb容器:输入mongo
Web端没有输入数据
Web端输入数据:程序里写了在admin数据库里自动生成cooperation表
哈哈哈哈