Create docker和kubernetes.md
添加docker和kubernetes.md文件
This commit is contained in:
parent
e2f88970e7
commit
5d94e09d3e
318
notes/docker和kubernetes.md
Normal file
318
notes/docker和kubernetes.md
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
# 发展历程
|
||||||
|
|
||||||
|
1. 早期的物理机
|
||||||
|
|
||||||
|
2. 虚拟化技术--虚拟机
|
||||||
|
|
||||||
|
3. 容器化docker -- 典型的C/S架构,Go语言开发(适合高并发),[hub.docker.com]()
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
```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深入讨论
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在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深入探讨
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
```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已提供的支持
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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,一个虚拟
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### docker网络之bridge
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
通过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方式搭建
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user