diff --git a/notes/docker和kubernetes.md b/notes/docker和kubernetes.md new file mode 100644 index 00000000..4ee95716 --- /dev/null +++ b/notes/docker和kubernetes.md @@ -0,0 +1,318 @@ +# 发展历程 + +1. 早期的物理机 + +2. 虚拟化技术--虚拟机 + +3. 容器化docker -- 典型的C/S架构,Go语言开发(适合高并发),[hub.docker.com]() + + ![image-20231129092939522](C:\Users\h00284904\Desktop\image-20231129092939522--dockerArchitecture.png) + + ```sh + docker pull ** + docker push + + docker run -d --name my-tomcat -p 9999:8080 tomcat:8.0 + docker stop ** + + docker version + + docker images/docker ls + # 取别名 + docker tag + + docker ps + docker rmi -f + ``` + + # Image深入讨论 + + ![image-20231129093219217](C:\Users\h00284904\Desktop\image-20231129093219217--Image深入.png) + + 在docker中任何一个image:tomcat\redis\mysql,其最底层就是一个最小内核的linux kernel. + + github.com/docker-library + + dockerfile: + + > FROM debian: buster-slim + > + > RUN ... + > + > CMD [mysqld] + + docker build [dockerFinleName] . + + + +4. 自定义镜像怎么办? + + tomcat、redis、mysql、rocketmq等中间件都已有官方写好了的镜像 + + 根据image就可以创建出container + + 而且image是可以发给不同的人使用的,只要对应机器上安装了DockerEngine即可。 + + ``` dockerfile + FROM openjdk:8 + COPY dockerfile-demo-0.0.1-SNAPSHOT.jar jack-dockerfile-image.jar + CMD ["java","-jar","jack-dockerfile-image.jar"] + ``` + + + + springboot项目-->image-->container + + ``` shell + docker build -t jack-dockerfile-image . + ``` + + ```sh + docker run -d --name sb01 -p 6661:8080 jack-dockerfile-image + ``` + + ```sh + docker logs [容器名称] + ``` + + + +5. image共享给别人使用 + + * 需要创建一个镜像 + + * 上传到公共的仓库 + + * 当前本地需要登录一个公共仓 + + ```shell + sudo docker login -username=hqh registry.cn-hangzhou.aliyuncs.com + ``` + + + + * push到公共仓 + + ``` sh + docker push registry.cn-hangzhou.aliyuncs.com/jack-kubernetes/jack-dockerfile-image + ``` + + + + * 其它人拉取使用 + + ``` sh + docker pull registry.cn-hangzhou.aliyuncs.com/jack-kubernetes/jack-dockerfile-image + ``` + + + + * + + + + # Container深入探讨 + + ![ ](C:\Users\h00284904\Desktop\image-20231129110137511--container.png) + + ```sh + docker exec -it my-tomcat bash + cat /etc/issue + ``` + + 能否将已修改的container打包成新的镜像,打包分享给其他人使用----可以。 + + ```sh + docker commit [tomcat03] [gupao-customized-tomcat-image] + ``` + + * container常见操作 + + ```sh + docker ps -aq + docker rm -f conatiner + docker exec -it 容器名 + docker commit + # 查看docker占用CPU等资源情况 + docker stats + # 可以设置container使用资源的上限 + docker run -d --memory 300M --name jack-tomcat-memory-limit tomcat:8.0 + docker run -d --cup-shareds 10 --name jack-tomcat-cpu-limit tomcat:8.0 + ``` + + + + * + +6. 为了资源隔离 + + * Linux已提供的支持 + + ![image-20231129113551798](C:\Users\h00284904\Desktop\image-20231129113551798--linuxKernel.png) + + kernel.org/doc + + * 怎样降低开发或运维人员使用这些技术的门槛--Linux Container(LXC) + + linuxcontainers.org——依然有门槛,更多的还是针对 Linux运维人员,出发点:基于隔离出物理机的资源,为了快速搭建出一个物理机中的虚拟资源 + + ​ ——未面向app + + docker 在LXC基础上提出了针对具体的app进行隔离解决方案,image,contaner. + + bocker + + * + + # Doker数据持久化和网络 + + ```sh + docker volume ls + # 自定义 + docker volume create 自定义volume名 + docker volume inspect [volume名称] + docker volume rm -f * + ``` + + + + ## volume数据持久化 + + VOLUME /var/lib/mysql,有了VOLUME关键字之后,将容器的/var/lib/mysql实际在对应hosthost上建一个相应目录(在/var/lib/docker/volumes/*下)。 + + ```sh + docker run -d --name hqh-mysql -p 3301:3306 -v hqh-mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jack666 --privileged mysql:5.7 + ``` + + + +bind的概念 + +- -v ~/shop:/usr/local/tomcat/webapps/shop ,少民volume这个层次面试。bind mounting + +- 把目录和专门的服务器绑定。 + + ## docker中的网络 + + https://landscape.cncf.io/?category=container-runtime&grouping=category + + + +```sh +# 本地网卡信息 +ls /sys/class/net +ip a +ip link + +cd /etc/sysconfig/network-scripts +ip addr add ip dev eth0 +systemctl restart network +ipup eth0 +ipdown eth1 + +docker network ls +``` + +不同namespace下的网络 + +```sh +ip netns add ns1 + +ip netns add ns2 +ip netns add ns3 +ip netns list + +ip nets delete ns3 delete ns3 + +ip netns exec ns1 ip a +ip netns exec ns1 ifup lo + +# 创建了veth-ns1和veth-ns2,并成对 +ip link add veth-ns1 type veth peer name veth-ns2 +# 将各自关联到对应命名空间中 +ip link set veth-ns1 netns1 +ip link set veth-ns2 netns2 + +ip netns exec ns1 ip addr add 192.168.0.11/24 dev veth-ns1 +ip netns exec ns2 ip addr add 192.168.0.12/24 dev veth-ns2 + +ip netns exec ns1 ip link set veth-ns1 up +ip netns exec ns2 ip link set veth-ns2 up + +ip netns exec ns1 ping 192.168.0.12 +``` + +veth pair: virtual ethernet pair,一个虚拟 + +![image-20231129162902479](C:\Users\h00284904\Desktop\image-20231129162902479--veth.png) + +### docker网络之bridge + +![image-20231129164624972](C:\Users\h00284904\Desktop\image-20231129164624972--veth2.png) + +![image-20231129165011607](C:\Users\h00284904\Desktop\image-20231129165011607--veth4.png) + +通过veth-pair彼此之间的通信。 + +```sh +docker network ls +docker network inspect bridge +# 也可以自定义网侧面 +docker network create --subnet=172.18.0.0/24 tomcat-net-name +# 通过docker run命令 +docker run -d --name nginx01 -p 6061:80 --network tomcat-net-name + +# 将网络添加下 +docker network connect tomcat-name-net tomcat2 +``` + +其它模式:none\network ls + +各个namespace这间,是共享宿主机分配的带宽,还是分配固定的带宽?—— + + + +## 基于Docker搭建MySQL高可用集群 + +MySQL单机部署--会增加不可用风险, + +实现MySQL高可用,搭建MySQL集群,-->伴随要解决数据一致性问题。 + +### PXC + +Percona Xtradb Cluster,percona.com + +多主方案+同步复制-->强一制性, + +方法(1) 原生 pxc 依赖 一步步手动搭建 + +(2) docker image方式搭建 + + + +![image-20231129174636101](C:\Users\h00284904\Documents\ForWork\学习\docker\docker-mysql.pdf) + + + +```sh +# 获取pxc镜像,其实就相当于获取mysql镜像 +docker pull percona/percona-xtradb-cluster:5.7.21 + +# 设置网络 +docker network create -subnet=172.19.0.0/24 pxc-cluster-net bridge + +# 数据持久化(后续让容器进行关联) +docker volume create pxc-v1 +docker volume create pxc-v2 +docker volume create pxc-v3 + +# 创建容器 +docker tag percona/percona-xtradb-clustrer:5.7.21 pxc +docker run -d --name=node1 -p 3301:3306 pxc -e MYSQL_ROOT_PASSWORD=hqh666 -v pxc-v1:/var/lib/mysql -e CLUSTER_NAME=PXC --net=pxc-cluster-net -e XTRBACKUP_PASSWORD=hqh666 pxc + +docker run -d --name=node2 -p 3302:3306 pxc -e MYSQL_ROOT_PASSWORD=hqh666 -v pxc-v2:/var/lib/mysql -e CLUSTER_NAME=PXC --net=pxc-cluster-net -e XTRBACKUP_PASSWORD=hqh666 -e CLUSTER_JOIN=node1 pxc + + +docker run -d --name=node3 -p 3303:3306 pxc -e MYSQL_ROOT_PASSWORD=hqh666 -v pxc-v3:/var/lib/mysql -e CLUSTER_NAME=PXC --net=pxc-cluster-net -e XTRBACKUP_PASSWORD=hqh666 -e CLUSTER_JOIN=node1 pxc +``` +