Docker 与 k8s
虚拟机技术,使得程序能够有个相对独立的运行环境和资源,但是用过虚拟机的都知道,虚拟机镜像太大,动则几个 GB、几十 GB,运行启动也比较缓慢。
随着技术的发展,另一个虚拟技术出现了就是 docker , docker 由 go 语言开发并开源的虚拟化容器技术。跟虚拟机功能相同,但相比于虚拟机,容器较小,只有几十 MB , 启动速度较快。
容器 vs 虚拟机
1. 容器是一个应用程序,运行在主机操作系统上,是基于应用层面的虚拟化;
2. VM 是基于物理层面的虚拟,共享物理资源,每个VM 有自己的操作系统;
3. 每个容器都作为一个独立的进程运行在用户空间;
4. hypervisor 技术使得一个机器运行多个 VM 成为了可能;
5. 容器比较小,通常大小在几十 MB,占用资源较少,一个 VM 或主机上可以运行几十甚至上百个容器。
6. VM 比较大,通常在几十 GB, 占用资源较少,通常一个办公电脑运行几个虚拟机就已经要爆掉了。
Docker
概念
镜像:通过提前编写的 dockerfile 文件构建出来一个文件,里面包含了你程序运行的所有环境和依赖包。
远程仓库:docker hub 是官方提供的开放仓库,你可以将自己的镜像 push 上去,供异地使用。当然公司内部也可以搭建自己的镜像仓库。
容器:镜像(本地生成的或者从仓库 pull 下来的)启动后,就会生成一个容器,并且容器的状态是启动的。
镜像和容器的关系可以理解为程序和进程的关系。
基本命令
docker build -t name:tag .
docker exec --user root -it container /bin/bash
docker run -d --privileged=true --name=xxx -p 80:80 -p 3307:3306 dev/mysql:latest
docker update --restart=always 【container_id】
docker ps -a -q
docker stop container
docker rm container
docker ps -a|awk '{print $1}'|grep -v CONTAINER |xargs docker rm
docker network inspect net1
docker inspect container
docker network connect net1 container
docker container stats $(docker container ps --format={{.Names}})
容器编排 K8S
当你的服务比较多的时候,单个的管理每个容器就会带来很大的工作量,这个时候就需要容器编排工具来替你管理。官方提供的编排工具是 swarm , 但是用起来不是很好用,于是又有好心人开发了 Kubernets, 简称 k8s。
容器编排工具提供了很多功能,比如 故障切换、热部署、快速伸缩、自动回滚等。
本地搭建 k8s 单机群命令:
minikube start
minikube dashboard
kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
kubectl get deployments
kubectl get pods
kubectl get events
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
kubectl get services
minikube service hello-node
kubectl scale -n default deployment nginx-deployment --replicas=2
容器编排可视化
通过手写 yaml 文件来进行编排比较繁琐,而且面对大规模的部署会比较容易出错,官方提供了 dashboard , 但是功能比较简单,于是又有好心人开发了可视化的编排工具: kuboard 。
有了这个神器, 运维变得刚简单高效。
原创不易,如果觉得有用,请随手 分享、在看~