十年河东,十年河西,莫欺少年穷
学无止境,精益求精
接着上篇博客继续,上篇博客:netcore 3.1 项目部署到docker 及遇到的各种坑 和 对应解决方案
上篇博客中,成功将webApi项目部署到了docker,且可以通过swagger进行访问,由于项目中使用了redis,因此,我们需要在docker上部署redis,部署redis后,我们还必须实现webapi容器可以访问redis容器
目前,我们通过一个webApp镜像,生成了3个webApp 容器,分别为:webApp01、webApp02、webApp03
如下:
下面,我们先从部署Redis到Docker开始
部署redis到docker
1.获取 redis 镜像
docker pull redis
2.查看本地镜像
docker images
3. 下载redis.conf 配置文件
到http://www.redis.cn/download.html下载redis的压缩包,获取里面的redis.conf文件
下载的文件是tar.gz的文件,直接在Windows系统解压,目录如下:
4.配置redis.conf配置文件
打开此文件,进行修改,主要修改部分如下:
#bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问 protected-mode no #默认yes,开启保护模式,限制为本地访问。若不设置,无法远程 requirepass 密码 #给redis设置密码,若不设置则不用改 appendonly yes#redis持久化 默认是no 【开启AOF持久化功能】
5.创建本地映射的目录
以/tmp为根目录进行说明。创建目录:
cd /tmp mkdir redis mkdir redis/data
创建后把修改好的redis.conf文件拷贝到虚拟机的/tmp/redis目录下。
6.启动redis
docker run -p 6379:6379 --name redis01 --restart=always -v /tmp/redis/redis.conf:/etc/redis/redis.conf -v /tmp/redis/data:/data --net mynet -d redis redis-server /etc/redis/redis.conf
说明:
-p 暴露linux 6379端口,并 和 容器内6379端口映射
--name redis 容器名称
--restart=always 是指 容器随着docker的启动而启动,这样就无须再手动开启
-v 路径挂载, 一个挂载redis的配置文件,一个挂载redis的持久化data数据,防止容器删除后,redis数据丢失,达到数据可还原的目的,关于目录文件挂载可参考:https://www.cnblogs.com/chenwolong/p/16107903.html
--net 这里使用自定义的网络 mynet 关于自定义网络,可参考:docker 自定义网络 不使用 --link 也能实现容器间网络互通
-d 代表后台运行 redis
redis-server /etc/redis/redis.conf:按配置启动
此时,Redis 已经在运行了
docker容器的默认路径为:ls /var/lib/docker/containers
ls /var/lib/docker/containers
7、访问REdis
查看Ip地址:
ip addr
C:\Redis-x64-5.0.9>redis-cli -h 192.168.136.135 -p 6379 192.168.136.135:6379> set k1 v1 OK 192.168.136.135:6379> keys * 1) "k1" 192.168.136.135:6379>
说明,redis 可以正常访问了
镜像启动web
然后,我们设置:webApp01、 容器拥有访问 mynet 网络的权限,可参考:docker 自定义网络 不使用 --link 也能实现容器间网络互通
[root@localhost data]# docker network connect mynet webapp01 -- 允许webapp01 访问mynet网络,因为redis 使用的是mynet网络,因此就实现了webapp01容器 访问 redis 容器的权限
有了访问权限,我们就可以通过 容器名称进行网络互连了。
因此,我们修改netCore配置文件如下【因为我们采用的默认端口,6379 可以不加】:
"RedisOptions": { "RedisConnectionString": "redis01", // redis01:6379 是我的容器名称 "RedisDbNum": 2, //REdis 数据库 "IotRedisDbNum": 1 //物联网--REdis 数据库 }
这样我们就可以访问redis 了
最后,说下
docker 容器默认所在的主机目录为: /var/lib/docker/containers
cd /var/lib/docker/containers
@天才卧龙的博客