Merge pull request #27 from HuaHero/HuaHero-patch-25
Create docker和kubernetes.md
This commit is contained in:
commit
4084c1fb14
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