docker安装mangodb和redis

前言

在有docker环境和docker-compose的工具的机器上,快速搭建redis和mangodb的单机服务

目的

由于我在window上安装了docker,具体教程可看**windows上安装docker-ce**,以下命令都是在windows上操作

正文

安装redis

在cmd中执行以下命令下载redis镜像

1
docker pull redis

在redis服务需要启动的目录中新建redis.yml文件,里面写入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3.1'

services:

redis:
image: redis:latest
container_name: redis
hostname: redis
restart: always
networks:
static-network:
ipv4_address: 172.21.0.2
ports:
- "16379:6379"

networks:
static-network:
ipam:
config:
- subnet: 172.21.0.0/16

注意我们这里对于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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.1'

services:

redis:
image: redis:latest
container_name: redis
hostname: redis
restart: always
networks:
consuls_static-network:
ipv4_address: 172.20.0.5
ports:
- "16379:6379"

networks:
consuls_static-network:
external: true

这里只是展示一下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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3.1'

services:

redis:
image: redis:latest
container_name: redis
hostname: redis
restart: always
networks:
usable_net:
ipv4_address: 10.0.75.5
ports:
- "16379:6379"

networks:
usable_net:
external: true
#或者如下
networks:
usable_net:
ipam:
config:
- subnet: 10.0.75.0/24

结果我发现这样做之后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
2
windows上network配置有什么用?
为什么windows作为宿主机无法ping通自定义桥接网络的容器ip?

但是我们还是无法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]

Cream Bing wechat
subscribe to my blog by scanning my public wechat account