Docker容器映射Redis和MySQL到本地

Docker容器因其快速、轻量级、可移植性、隔离性和安全性、可弹性扩展等诸多特性,在程序交付和部署的时候使用非常广泛。但是容器中数据无法持久化,当容器关闭或者删除的时候其中的数据就会丢失。所以很多时候我们会将Docker中的数据目录挂载到本地, 实现程序数据的持久化存储。

这里就介绍一下如何把Docker镜像中的MySQL和Redis数据挂载到本地目录。MySQL和Redis在Docker镜像中的相关目录信息如下:

MySQL:  
日志目录:/var/log/mysql/   
配置文件目录:/etc/mysql/   
数据目录:/var/lib/mysql/   

Redis:
日志目录:/var/log/redis/  
配置文件目录:/etc/redis/  
数据目录:/var/lib/redis/  

我们需要做的就是把docker容器中的对应的目录映射到本地,实现数据的本地化。
这里将mysql的数据映射到本地/local/mysql目录下, 将redis的数据映射到本地/local/redis目录下。

下面介绍一下详细步骤:

  1. 拷贝文件
    首先我们要将docker镜像中对应目录的数据信息拷贝到本地,确保镜像内外的内容保持一致。
# 拷贝MySQL相关目录到本地
docker cp [容器ID:/var/log/mysql/]   ./local/mysql/log/
docker cp [容器ID:/etc/mysql/]   ./local/mysql/conf/
docker cp [容器ID:/var/lib/mysql/]   ./local/mysql/data/

# 拷贝Redis相关目录到本地
docker cp [容器ID:/var/log/redis/]   ./local/redis/log/
docker cp [容器ID:/etc/redis/]   ./local/redis/conf/
docker cp [容器ID:/var/lib/redis/]   ./local/redis/data/
  1. 修改文件夹权限和所有者
    由于docker镜像中MySQL和Redis对应目录创建者和权限与本地的用户和权限不一样, 这样就会导致docker容器挂载数据目录的时候异常。所以我们需要修改一下目录的权限和所有者:
# docker中的用户默认是root
sudo chown -R root:root ./local/redis/
sudo chown -R root:root ./local/mysql/

# 权限改为777 均可读写
sudo chmod -R 777 ./local/redis/
sudo chmod -R 777 ./local/mysql/
  1. 在创建容器的时候映射对应的目录
# 1.通过docker run的命令创建容器(-p 映射端口 -v挂载目录)
docker run -d -p 8080:80 -p 8554:554  \
-v $(dirname `readlink -f $0`)/local/mysql/conf/:/etc/mysql -v $(dirname `readlink -f $0`)/local/redis/conf/:/etc/redis \
-v $(dirname `readlink -f $0`)/local/mysql/data/:/var/lib/mysql -v $(dirname `readlink -f $0`)/local/redis/data/:/var/lib/redis \
-v $(dirname `readlink -f $0`)/local/mysql/log/:/var/log/mysql -v $(dirname `readlink -f $0`)/local/redis/log/:/var/log/redis \
--name my_docker  official:master \

# 2.通过docker create命令创建容器
sudo docker create -it --privileged=true -p 8080:80 -p 8554:554 \
-v $(dirname `readlink -f $0`)/local/mysql/conf/:/etc/mysql -v $(dirname `readlink -f $0`)/local/redis/conf/:/etc/redis \
-v $(dirname `readlink -f $0`)/local/mysql/data/:/var/lib/mysql -v $(dirname `readlink -f $0`)/local/redis/data/:/var/lib/redis \
-v $(dirname `readlink -f $0`)/local/mysql/log/:/var/log/mysql -v $(dirname `readlink -f $0`)/local/redis/log/:/var/log/redis \
--name my_docker  official:master 

# 启动对应的容器
docker start container_id

通过上面的命令就可以将MySQL和Redis的数据目录挂载到Docker容器外部了。这样当容器重启或者删除的时候, 数据信息也不会丢失了, 确保了数据的持久化。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值