Docker高级学习笔记

mysql主从复制

  1. docker run -p 3307:3306 --name mysql-master
    -v /mydata/mysql-master/log:/var/log/mysql
    -v/mydata/mysql-master/data:/var/lib/mysql
    -v/mydata/mysql-master/conf:/etc/mysql
    -e MYSQL_ROOT_PASSWORD=root
    -d mysql:5.7

redis集群算法

  1. 哈希取余算法:通过hash(key)%n个机器数,让固定的一部分请求落到同一台机器上,扩容或缩容,映射关系需要重新计算。
  2. 一致性哈希算法:将节点通过hash函数计算后放在一个环上值为[0,2^32-1],值在hash计算后存储在顺时针的下一个节点,当这个节点宕机就存放到顺时针的下一个。在这里插入代码片
  3. 哈希槽算法:在数据存放在槽中,槽会分配给集群中的所有主节点,分配策略没有要求,可以指定哪些编号分配给那个主节点。集群会记录节点与槽之间的对应关系,对key求hash值,然后对16384求余,余数是几key就落入对应的槽里。slot=CRC16(key)%16384(内置16384个哈希槽)。以槽为单位移动数据,redis会根据节点数量大致均等的将哈希槽分配给不同的节点。

redis集群配置

  1. docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enable yes --appendonly yes --port 6381 (运行容器)
  2. redis-cli --cluster create 172.30.28.12:6381 172.30.28.12:6382 172.30.28.12:6383 172.30.28.12:6384 172.30.28.12:6385 172.30.28.12:6386 --cluster-replicas 1 (分配3主3从,分配均等的三个哈希槽)
    在这里插入图片描述
  3. cluster info (集群的基本信息)、cluster nodes (集群的节点)、redis-cli -p 6381 (单机环境连接redis)、redis-cli -p 6381 -c (集群环境连接redis)
  4. redis-cli --cluster check ip地址:端口 (集群环境)

redis主从容错

  1. 暂停一个redis主机,从机就会变成主机,从新启动后还是原来暂停的那个主机会变成从机

redis主从扩容

  1. docker exec -it redis-node-7 /bin/bash (进入redis)
  2. redis --cluster add-node 172.30.28.12:6387 172.30.28.12:6381 (6387作为master新增节点,6381作为原来节点的领路人)
  3. redis-cli --cluster check 172.30.28.12:6381 (查看不同节点分配到的哈希槽范围)
  4. redis-cli --cluster reshard 172.30.28.12:6381 (重新分配哈希槽)
  5. redis-cli --cluster add-node 172.30.28.12:6388 172.30.28.12:6387 --cluster-slave --cluster-master-id 0bab8e058fa0eb7d919256fb33ee9e3d32bb8973 (分配主机从机)

redis主从缩容

  1. redis-cli --cluster check 172.30.28.12:6381
  2. redis-cli --cluster del-node ip地址:6388 从机6388的节点id (删除从机6388节点)
  3. redis-cli --cluster reshard 172.30.28.12:6381 (重新分配哈希槽)
  4. 输入分配的哈希槽数量–>输入分配给那个节点–>输入缩容的节点–>输入done
  5. redis-cli --cluster del-node ip地址:6388 从机6388的节点id (删除主机6387节点)

DockerFile

dockerfile面向开发,docker镜像成为交付标准,docker容器则涉及部署和运维
  1. dockerfile是用来构建docker镜像的文本文件,是由一条条构建镜像的所需的指令和参数构成的脚本。
  2. 每条保留字指令都必须为大写字母且后面至少要跟随一个参数
  3. 指令按照从上到下顺序执行
  4. #表示注释
  5. 每条指令都会构建新的镜像层并对镜像进行提交

DockerFile常用保留字

  1. FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已存在的镜像作为模板,第一条必须是FROM
  2. MAINTAINER:镜像维护者的姓名和邮箱地址
  3. RUN:容器构建时需要运行的命令 (shell:RUN<命令行运行> 如 RUN yum -y install vim;
    第二种exec:RUN [“可执行文件”,”参数1“,”参数2“] 如RUN[“./test.php”,“dev”,“offline”]等价于RUN ./test.php dev offline)
  4. EXPOSE:当期容器对外暴漏的端口
  5. WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点(指定登录到容器终端的目录)
  6. USER:指定该镜像以什么样的用户去执行,如果不指定,默认是root
  7. ENV:这个环境变量可以在后续任何RUN指令中使用,这就如同在命令前面指定了环境变量的前缀一样:也可以在其它指令中直接使用这些环境变量(ENV MY_PATH /user/mytest;当使用WORKDIR $MY_PATH时指向/user/mytest)
  8. VOLUME:容器数据卷,用于数据保存和持久化工作(-v)
  9. ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
  10. COPY:类似ADD,拷贝文件和目录到镜像中。(将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内<目标路径>位置;如COPY src dest;COPY[“src”,“dest”];src指代源文件或目录,dest指代目标路径)
  11. CMD:指定容器启动后要干的事情和RUN指令一样有两种格式shell和exec,在指定ENTRYPOINT指令后用CMD指定具体参数。dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换(docker run -it -p 8080:8080 容器ID /bin/bash)。CMD是在docker run 时运行 , RUN 实在docker build时运行。
  12. ENTRYPOINT:启动容器时要运行的命令,但是ENTRYPOINT不会被docker run 后面的命令覆盖,而且这些命令参数会被当作参数传送给ENTRYPOINT指令指定的程序。
  13. 在这里插入图片描述

在这里插入图片描述
13. docker build -t 镜像名字:版本 (安装新的自定义镜像)
14. docker run -it 镜像名字:版本 /bin/bash

虚悬镜像

  1. 在构建或删除镜像时出现错误,导致镜像仓库名字和tag为
  2. docker image ls -f dangling=true (查找出全部虚悬镜像)
  3. docker rmi $(docker images -q -f dangling=true) (删除全部虚悬镜像)

Docker network

容器间的互联和通信以及端口映射,容器IP变动时侯可以通过服务名直接网络通信而不受到影响
  1. docker network ls (查看网络连接方式)
  2. docker network create aa_network (创建新的网络)
  3. docker network inspect xxx(查看网络源数据)
  4. docker network rm xxx (删除网络)

网络模式

  1. bridge: 为每一个容器分配、设置ip等,并将容器连接到docker0虚拟网桥,默认为该模式。docker服务默认会创建一个docker0网桥,该桥接网络名称为docker0,它在内核层连同了其他物理或虚拟网卡,这就是将所有容器和本地主机都放在同一物理网络。Docker默认制定了docker0接口和IP地址和子网掩码,让主机和容器间可以通过网桥相互通信。
    在这里插入图片描述

  2. host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口

  3. none:容器有独立的network namespace,但并没有对其进行任何的网络设置,如分配veth pair和网桥连接,IP等

  4. container:新创建的容器不会创建自己的网卡和配置的IP地址,而是和一个指定的容器共享IP、端口范围

  5. 自定义网络:docker network create zzyy_network;(创建自定义网络,默认桥接模式)docker network ls;
    (查询网络)docker run -d p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8;
    docker run -d p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8;(可以写死服务名,不能写死ip地址)

Docker-compose

compse是docker公司推出的工具软件,可以管理多个docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器间的调用关系。然后,只要一个命令,就能同时启动和关闭这些容器。(多服务部署工具)
  1. 核心概念:文件docker-compose.yml。服务:一个个应用容器实例,比如订单微服务、mysql容器等。工程:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
    在这里插入图片描述

Portainer(图像化工具)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值