尚硅谷-2022新版docker笔记-高级篇

1 docker复杂安装详说
1.1 mysql主从复制
1.1.1 启动主节点3307
docker run -p 3307:3306 \
-v /bf/mysql-master/log:/var/log/mysql \
-v /bf/mysql-master/data:/var/lib/mysql \
-v /bf/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-master \
-d mysql:5.7

docker run -p 3308:3306 \
-v /bf/mysql-slave/log:/var/log/mysql \
-v /bf/mysql-slave/data:/var/lib/mysql \
-v /bf/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456  \
--name mysql-slave \
-d mysql:5.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


1.1.2 在主节点conf目录下编辑配置文件my.cnf
master节点编辑my.cnf配置文件

[mysqld]
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
1
2
3
4
5
6
7
8


1.1.3 修改配置文件后重启主节点


1.1.4 进入master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -p
1
2
1.1.5 主节点创建同步用户
create user 'slave'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'slave'@'%';
1
2
1.1.6 启动从节点3308


1.1.7从节点新建配置文件
从节点server_id = 102,注意不要重复


1.1.8 修改完配置重启slave实例
docker restart 59931682b155
docker ps
1
2
1.1.9 在主数据库中查看主从同步状态


1.1.10 进入mysql-slave容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p
1
2
1.1.11 从数据库配置主从同步
change master to master_host='192.168.17.128',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;
1


1.1.12 在从数据库查看主从同步状态
show slave status \G;
1
slave_io_running 和 slave_sql_running 为 NO


1.1.13 在从数据库开启主从同步


1.1.14 查看从数据库同步状态
slave_io_running 和 slave_sql_running 为 NO变为 YES


1.1.15 测试主从同步
操作数据库工具连接主库,并写入记录,切换到从库发现对应数据已经同步。

1.1.16 关于字符编码
经过测试,如果不按照初级篇修改对应编码,在centos上会出现乱码

所以我这里配置文件根据初级篇做了修改,完全版本如下所示。

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
1
2
3
4
5
6
7
8
9
10
11
12
13
2.1 安装redis集群
2.1.1 亿级数据缓存
哈希取余分区
缺点:扩缩容问题
一致性哈希算法分区
缺点:数据倾斜问题,节点太少时,节点分布不均匀,
哈希槽分区
yibaoti
数据 -> 槽 -> redis

2.1.2 启动6个redis容器实例
docker run -d \
--name redis-node-1 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-1:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6381

docker run -d \
--name redis-node-2 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-2:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6382

docker run -d \
--name redis-node-3 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-3:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6383

docker run -d \
--name redis-node-4 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-4:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6384

docker run -d \
--name redis-node-5 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-5:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6385

docker run -d \
--name redis-node-6 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-6:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6386

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59


2.1.3 配置主从
redis-cli --cluster create
192.168.17.128:6381
192.168.17.128:6382
192.168.17.128:6383
192.168.17.128:6384
192.168.17.128:6385
192.168.17.128:6386
 --cluster-replicas 1
1
2
3
4
5
6
7
8


redis-cli -p 6381
cluster nodes
1
2

挂载关系 1主5从,2主6从,3主4从

2.1.4 读写error说明
单机方式连接6381节点

k1和k4所占用槽位超过了6381所分配的 5460 范围,所以存储失败


2.1.5 集群读写路由增强
redis-cli -p 6381 -c
1


2.1.6 查看集群状态
redis-cli --cluster check 192.168.17.128:6381
1


2.2 主从切换
关闭1号节点,观察集群主从状态。


可以发现可以顺利取出之前存的4个key

将node1启动回来,发现主从关系没有重新改变,从节点升为海口椰城医院主节点,之前的主节点变为从节点


2.3 主从扩容
操作步骤

启动redis容器6387 6388
将6387节点加入集群
查看集群状态
重新分配槽号
第二次查看集群状态
为6387分配6388从节点
第三次查看集群状态
2.3.1 启动容器6387 6388
docker run -d \
--name redis-node-7 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-7:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6387

docker run -d \
--name redis-node-8 \
--net host \
--privileged=true \
-v /data/redis/share/redis-node-8:/data \
 redis:6.0.8 \
--cluster-enabled yes \
--appendonly yes \
--port 6388
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19


2.3.2 将6387master节点添加进集群
redis-cli --cluster add-node 192.168.17.128:6387 192.168.17.128:6381
1


2.3.3 第一次查看集群状态
redis-cli --cluster check 192.168.17.128:6381
1


2.3.4 重新分派槽号
redis-cli --cluster reshard 192.168.17.128:6381
1

2.3.5第二次查看集群状态
redis-cli --cluster check 192.168.17.128:6381
1


2.3.6 为主节点6387分配从节点6388
redis-cli --cluster add-node 192.168.17.128:6388 192.168.17.128:6387 --cluster-slave --cluster-master-id a03199891da62047b7bbc3f6889acb655f468356
1


2.3.7第三次检查集群状态
redis-cli --cluster check 192.168.17.128:6381
1


2.4主从缩容
操作步骤

查看集群情况获得6388节点id
删除6388节点
将6387槽号重新分配
检查集群情况
将6387删除
检查集群情况
2.4.1获取节点id


2.4.2集群删除节点6388
redis-cli --cluster del-node 192.168.17.128:6388 90eecc6d32f52c19e460979eeb6c32194bcfeb8f
1


2.4.3重新分配slot
本例将6387的slot全部分给6382节点

redis-cli --cluster reshard 192.168.17.128:6381
1


2.4.4查看集群状态
发现6387节点已经没有slot


2.4.5 删除6387节点
查看集群状态

redis-cli --cluster del-node 192.168.17.128:6387 a03199891da62047b7bbc3f6889acb655f468356
1


2 DockerFile
2.1 DockerFile常用关键字
2.2 案例 使用DockerFile生成镜像 Centos+vim+java8+ifconfig
2.2.1下载windows下载jdk1.8,拷贝进目录,注意大小是否拷贝完全。


2.2.2 编写Dockerfile文件
一定要注意 $ 不要是#,否则java -version可能会出不来
一定要注意 $ 不要是#,否则java -version可能会出不来
一定要注意 $ 不要是#,否则java -version可能会出不来

FROM centos
MAINTAINER lzy<1033649766@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java 
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success ----- ok "
CMD /bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2.2.3 Dockerfile构建镜像
docker build -t centosjdk8:1.1 .
1

生成的新镜像


2.2.4 启动新镜像
docker run -it b6c2b0d80d28 /bin/bash
1
2.2.5 测试vim ifconfig java -version


2.2.6 坑
第一个坑 由于Dockerfile比照视频手打的,所以将 $ 打成了 # ,java -version配置失败

第二个坑 虚拟机复制的jdk文件大小只有 2.5M,而源文件有180M,因而报错,一定要查看复制过来的文件大小是否缺失。

 failed to copy files: Error processing tar file(exit status 1): unexpected EOF
1
2.3 虚悬镜像
通过Dockerfile产生一个虚悬镜像,虚悬镜像是错误的,理应删除

运行后产生虚悬镜像

虚悬镜像的查看和删除

docker image ls -f dangling=true
docker image prune
1
2


3. 微服务实战
3.1测试微服务接口
编写一个微服务,并使用maven打包成jar包,测试一下能否启动


3.2 jar包导入虚拟机
将Dockerfile和jar包放在同一目录下


3.3编写Dockerfile文件
Dockerfile文件内容

FROM java:8
MAINTAINER lzy
VOLUME /tmp
ADD mic-io-0.0.1-SNAPSHOT.jar a.jar
ENTRYPOINT ["java","-jar","a.jar"]
EXPOSE 8080
1
2
3
4
5
6


3.4构建镜像文件
docker build -t aaa:1.1 .
1


3.5后台启动容器 映射 8080
docker run -d -p 8080:8080 b73f7d27485e
1


3.6测试docker微服务接口


3.7坑
原因Dockerfile编写的时候多加了 ’

Docker Error :Invalid or corrupt jarfile .jar

产生原因: 虚拟机导入jar包大小不正确,导致缺失文件,重新导入后即可。


4 docker网络


4.1 docker网络基本命令
 docker network ls
1

4.2 docker网络能干嘛
4.3 docker网络模式
bridge
host
none
container

4.3.2 启动两个容器


u1的inspect

u2的inspect


4.3.3关闭u2,查看u3的ip变化


docker network inspect bridge
docker network inspect host
docker network inspect none
docker network inspect container
1
2
3
4
5 Docker Compose 容器编排
目的: 一键启动N个容器实例或关闭N个实例,配置不同容器间的调用关系。

5.1下载
compose file

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
1
2
3

————————————————
版权声明:本文为CSDN博主「且听風吟丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37151886/article/details/122564779

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值