网站设计风格分析,专业建站推荐,wordpress按钮支付,用户上传网站用什么做运行mysql容器-理解容器数据卷 1.什么是容器数据卷2.如何使用容器数据卷2.1 数据卷挂载命令2.2 容器数据卷的继承2.3 数据卷的读写权限2.4 容器数据卷的小实验#xff08;加深理解#xff09;2.4.1 启动挂载数据卷的centos容器2.4.2 启动后#xff0c;在宿主机的data目录下会… 运行mysql容器-理解容器数据卷 1.什么是容器数据卷2.如何使用容器数据卷2.1 数据卷挂载命令2.2 容器数据卷的继承2.3 数据卷的读写权限2.4 容器数据卷的小实验加深理解2.4.1 启动挂载数据卷的centos容器2.4.2 启动后在宿主机的data目录下会出现一个test的目录2.4.3 在宿主机的test目录下新建一个a.go的文件2.4.4 在docker容器内部的home目录下可以看到同步出现了a.go2.4.5在docker容器内部的home目录下新建一个b.go文件2.4.6在宿主机的data/test目录下可以看到出现一个b.go文件2.4.7 在容器的home目录下删除b.go,可以看到宿主的test目录下b.go文件也被同步删除了2.4.8 使用docker inspect 查询挂载的数据卷 2.5 小结 3. 容器运行MySQL实战3.1 安装前的思考3.2 制作MySQL的配置文件3.3 运行MySQL容器3.4 验证3.4.1 创建数据 3.4.2 验证容器重启后数据不会丢失3.4.3 验证删除后重启运行数据不会丢失3.4.3.1 删除容器3.4.3.2 重新运行容器3.4.3.3 验证 4.注意 1.什么是容器数据卷
将应用和环境打包成一个镜像如果数据都在容器一旦容器删除了数据就会丢失了。要解决这个问题就必须要进行数据的持久化。 容器之间可以有一个数据共享的技术。Docker容器中产生的数据同步到宿主机这就是卷技术。目录的挂载将我们容器内的目录挂载到Linux上面 所谓容器卷就是容器的持久化和同步操作容器间也是可以数据共享的
2.如何使用容器数据卷
2.1 数据卷挂载命令
直接使用命令来挂载 -v
docker run -it --privilegedtrue -v 宿主机绝对路目录:/容器内目录 镜像名这里我们看到加了一个privilegedtrue的参数这是为了解决Docker挂载主机目录如果出现cannot open directory.:Permission denied 如果是centos7安全模块会比之前系统版本加强不安全的会禁止所以目录挂载的情况被默认为不安全的行为。在SELinux里面挂载目录被禁止掉了如果要开启我们一般使用–privilegedtrue命令扩大容器的权限解决挂载目录没有权限的问题也即使用该参数container内的root拥有真正的root权限否则container内的root只是外部的一个普通用户权限。
2.2 容器数据卷的继承
这里所谓的继承其实就是让一个容器使用另外一个容器的数据卷配置
docker run -it --privilegedtrue --volumes- from 父类容器 --name 新容器名称 镜像2.3 数据卷的读写权限
这里所说的读写权限指的是容器对数据卷的读写权限千万别以为是宿主机 默认可读可写rw
docker run -it --privilegedtrue -v 宿主机绝对路目录:/容器内目录:rw 镜像名只读权限
docker run -it --privilegedtrue -v 宿主机绝对路目录:/容器内目录:ro 镜像名2.4 容器数据卷的小实验加深理解
2.4.1 启动挂载数据卷的centos容器
docker run --name mycentos -it -v /data/test:/home centos /bin/bash2.4.2 启动后在宿主机的data目录下会出现一个test的目录 2.4.3 在宿主机的test目录下新建一个a.go的文件 2.4.4 在docker容器内部的home目录下可以看到同步出现了a.go 2.4.5在docker容器内部的home目录下新建一个b.go文件 2.4.6在宿主机的data/test目录下可以看到出现一个b.go文件 2.4.7 在容器的home目录下删除b.go,可以看到宿主的test目录下b.go文件也被同步删除了
rm -rf b.go2.4.8 使用docker inspect 查询挂载的数据卷
docker inspect --format{{.Mounts}} mycentos2.5 小结
通过上面的小实验我们看到使用容器数据卷我们只需要在本地修改即可容器内会自动同步。
3. 容器运行MySQL实战
3.1 安装前的思考
我们知道容器如果不对数据做持久化挂载数据卷那么容器一旦重启或者删除数据也就消失。所以我们要对MySQ数据做持久化也就是挂载数据卷之前在物理机上安装过MySQL的小伙伴都知道安装完成后我们要修改基本的配置主要是编码。而如果要在容器内修改那么容器删除后配置也就消失了并且在容器内写配置也不是很方便所以我们这里要挂载数据卷实现配置的共享和宿主机。
3.2 制作MySQL的配置文件
vim my.cnf
[mysql]
default-character-set utf8mb4[mysqld]
character-set-client-handshake FALSE
character-set-server utf8mb4
collation-server utf8mb4_unicode_ci
init_connect‘SET NAMES utf8mb4’
并把这个文件放到/data/mysql/conf下。
3.3 运行MySQL容器
docker run -d -p 3306:3306 --privilegedtrue -v /data/mysql/log:/var/log/msql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORDroot --name mysql5.7 mysql:5.7.443.4 验证
3.4.1 创建数据 上面我创建了一个mmp的数据库并且也创建了表sys_user
3.4.2 验证容器重启后数据不会丢失
下面我重启这个容器看容器会不会丢失。
docker restart mysql5.7验证配置是否丢失 我们看到这还是之前容器的配置没有改变。 验证数据是否丢失 数据也没有丢失。 所以挂载容器数据卷后容器重启后数据不会丢失配置也不会消失。
3.4.3 验证删除后重启运行数据不会丢失
3.4.3.1 删除容器
docker rm -f mysql5.73.4.3.2 重新运行容器
docker run -d -p 3306:3306 --privilegedtrue -v /data/mysql/log:/var/log/msql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORDroot --name mysql5.7 mysql:5.7.443.4.3.3 验证
验证配置是否丢失 我们看到这还是之前容器的配置没有改变。 验证数据是否丢失 数据也没有丢失。 所以挂载容器数据卷后容器重启后数据不会丢失配置也不会消失。
4.注意
注意这里运行的MySQL容器仅供自己学习使用不能用于生产因为配置太简单并且也没有做基本的主从复制。