前言
在有docker环境和docker-compose的工具的机器上,快速搭建redis和mangodb的单机服务
目的
由于我在window上安装了docker,具体教程可看**windows上安装docker-ce**,以下命令都是在windows上操作
正文
安装redis
在cmd中执行以下命令下载redis镜像
1 | docker pull redis |
在redis服务需要启动的目录中新建redis.yml文件,里面写入如下内容
1 | version: '3.1' |
注意我们这里对于redis所在容器的ip进行了指定,当然也可以不用指定,可以服务开启后自己查看ip地址,另外容器ip不用172.21.0.1,不然会报错地址已被使用
进入redis.yml文件所在目录执行
1 | docker-compose -f redis.yml up -d |
截图如下
利用redis-client客户端连接(客户端下载地址 https://redisdesktop.com/download)
这里在window下有个问题,就是我这里重新又定义了一个网络,我发现我不能ping通172.21.0.2这个容器ip,所以只能通过127.0.0.1:16379连接
不过之前定义的consuls的网络是可以ping通的,后来发现ping通的不是docker中的,而是电信网关连接的其他网络,我们现在将网络改为consuls桥接的网络看看
1 | version: '3.1' |
这里只是展示一下docker-compose使用已有网络的写法,虽然改了能够ping通,但不是这个网络,这个和linux上有差别
linux上docker新建桥接网络,是可以互通的,但是windows上不行
我注意到docker 的setting中有network这个选项
然后我们查看一下window的路由链路
1 | route print |
这里我们发现10.0.75.0/24的子网的网关为10.0.75.1和docker setting配置一样,正好对上了,但是并没有172.20.0.5的子网,虽然docker中已经有了,这也正说明windows上的docker和linux上的docker不一样,因为linux上只要新建了网络,就有链路了
所以我们这里新建一个匹配的桥接网络
1 | docker network create -d bridge --subnet=10.0.75.0/24 --gateway=10.0.75.1 usable_net |
1 | version: '3.1' |
结果我发现这样做之后redis都连接不上了,于是还原回去利用最开始的方法,自己自定义网络,
但是我们发现我们自定义的网络中连网关都没有
扩展
这部分是在Linux作为宿主机的测试,centos7在线安装docker + linux上安装docker-compose(centos7.5+docker18.09+docker-composev1.22.0)
因为可以ping通,所以我在linux宿主机上既可以通过本地的16379也可以用docker的ip(172.21.0.2)+6379访问,但是在windows上我只能用16379,因为docker机器我无法ping通
这里遗留了两个问题:
1 | windows上network配置有什么用? |
但是我们还是无法ping通,我们手动添加路由试试
1 | route add 192.172.0.0 mask 255.255.0.0 192.168.5.105 |
https://download.studio3t.com/studio-3t/windows/2018.5.1/studio-3t-x64.zip
参考资料
1.docker-compose v3 [https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address]
2.docker-compose networks [https://docs.docker.com/compose/networking/#configure-the-default-network]