Docker学习2----数据卷

docker数据卷

  • 数据卷可在容器之间共享或数据重用
  • 卷中更改可以实时生效,任何一个更改都会同步到另一个
  • 容器stop后,宿主机的修改待容器启动后也能看到
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用为止

命令

docker -itd -v 宿主机目录:容器目录:ro --privileged=true
# 宿主机目录如果没有会自动创建
# ro readonly  只读权限,即容器内不能写  默认rw,既能读也能写

docker impect 容器id
# Mounts 查看挂载

卷的继承和共享

docker -itd --privileged=true --volumes-from 容器1id
#继承容器1的挂载规则,即时容器1stop,也不影响

mysql

  • mysql乱码

    修改配置conf解决,重启

  • 数据卷映射

简单版

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

完整版

docker run -d -p 3306:3306 --privileged=true \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

Redis

  • daemonize no ,该配置和 docker run 中 -d 参数冲突,会导致一直启动失败
  • appendonly yes,开启redis持久化

简单版

docker run -d -p 6379:6379 redis:6.0.8

完整版

docker run -d -p 6379:6379 --name myredis --privileged=true \
-v /opt/redis/redis.conf:/etc/redis/redis.conf \
-v /opt/redis/data:/data \
redis:6.0.8 redis-server /etc/redis/redis.conf

mysql主从复制

mysql-master

  • docker 命令
docker run -p 3307:3306 --name mysql-master \
-v /opt/mysql-master/log:/var/log/mysql \
-v /opt/mysql-master/data:/var/lib/mysql \
-v /opt/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • mysql配置
[mysqld]
server_id=101  ## 设置server_id,同一局网需要唯一
binlog-ignore-db=mysql  ## 指定不需要同步的数据库
log-bin=mall-mysql-bin ## 开启二进制日志功能
binlog-cache_size=1M ## 设置二进制日志使用内存大小
binlog_format=mixed ## 设置使用的二进制日志格式(mixed statement row)
expire_logs_days=7 ## 二进制日志过期清理时间。默认值为0,表示不自动清理
slave_skip_errors=1062 ## 跳过主从复制中遇到的所有错误或者指定类型的错误,避免slave端复制中断,1062指一些主键重复,1032指主从数据库不一致
  • mysql创建主从复制用户

    # 创建用户
    CREATE USER 'slave'@'%'IDENTIFIED BY '123456';
    # 授权
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*TO 'slave'@'%';
    # 查看主数据库主从同步状态
    show master staus;
    

mysql-slave

  • docker 命令

    docker run -p 3308:3306 --name mysql-slave \
    -v /opt/mysql-slave/log:/var/log/mysql \
    -v /opt/mysql-slave/data:/var/lib/mysql \
    -v /opt/mysql-slave/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7 
    
  • mysql 配置

    [mysqld]
    server_id=102  ## 设置server_id,同一局网需要唯一
    binlog-ignore-db=mysql  ## 指定不需要同步的数据库
    log-bin=mall-mysql-slave1-bin ## 开启二进制日志功能
    binlog-cache_size=1M ## 设置二进制日志使用内存大小
    binlog_format=mixed ## 设置使用的二进制日志格式(mixed statement row)
    expire_logs_days=7 ## 二进制日志过期清理时间。默认值为0,表示不自动清理
    slave_skip_errors=1062 ## 跳过主从复制中遇到的所有错误或者指定类型的错误,避免slave端复制中断,1062指一些主键重复,1032指主从数据库不一致
    relay_log=mall-mysql-relay-bin ## relay_log 配置中继日志
    log_slave_updates=1 ## log_slave_updates表示slave将复制事件写进自己的二进制文件
    read_only=1 ## slave设置为只读(具有super权限的用户除外)
    
  • 在从数据库修改主从复制

    change master to \
    master_host='宿主机ip' \
    ,master_user='slave' \
    ,master_password='123456' \
    ,master_port=3307 \
    ,master_log_file='mall-mysql-bin.000001' \ # 指定从数据库要复制数据的日志文件,通过查看主数据库的状态,获取File参数
    ,master_log_pos=617 \ # 指定从数据库从哪个位置开始复制数据,通过查看主数据库的状态,获取Position参数
    ,master_connect_retry=30 # 连接失败重试的时间间隔,单位秒
    
  • 在从数据库中开启主从数据同步

    start slave;
    
  • 从数据库查看主从同步状态

    # 查看从数据库主从同步状态
    show slave status \G;
    ## 主要看 Slave_IO_Running,Slave_SQL_Running 是否为Yes
    
posted @   shog808  阅读(7)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示