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容器外部了。这样当容器重启或者删除的时候, 数据信息也不会丢失了, 确保了数据的持久化。

猜你喜欢

转载自blog.csdn.net/yang1fei2/article/details/132055483