docker/k8s
2024-03-28 13:42:42   12  举报             
     
         
 AI智能生成
  docker/k8s 学习总结
    作者其他创作
 大纲/内容
  docker    
     docker是一个容器管理的软件(平台)  
     网络模式    
     Bridge默认模式,通过127.17.0.1作为默认网关,在iptables中做了DNAT规则
  
     host模式,也可以说是宿主级模式,与宿主级共用一个ip加上宿主机上的端口,网络性能最好,但是宿主级用了的端口,容器不能再用  
     container模式,新创建的容器与已存在的容器共用分配的ip和端口范围  
     none模式,没法跟外网通信,自己跟自己玩,安全性高,通过--network=none指定  
     overlay,不同主机容器通信  
     底层隔离机制    
     与虚拟机的区别之一  
     namespace    
     六大命名空间    
     network    
     网络相关
  
     进程命名空间    
     进程相关  
     IPC命名空间
    
     类似于管道作用  
     进程间通信  
     挂载命名空间
    
     文件系统相关  
     UTS命名空间    
     时间相关  
     用户命名空间  
     Control Groups
    
     对资源进行限制,例如:cpu,内存、磁盘等  
     cgroups
  
     kernel lxc    
     LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。  
     LXC可以在操作系统层次上为进程提供虚拟的执行环境,一个虚拟的执行环境就是一个容器。
可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,
限制可以使用的内存大小(包括内存和swap空间),提供device访问控制,提供独立的namespace。
    可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,
限制可以使用的内存大小(包括内存和swap空间),提供device访问控制,提供独立的namespace。
 LXC如何实现    
     Sourceforge上有LXC这个开源项目,
但是LXC项目本身只是一个为用户提供一个用户空间的工具集,
用来使用和管理LXC容器。
LXC真正的实现则是靠Linux内核的相关特性,LXC项目只是对此做了整合。
基于容器的虚拟化技术起源于所谓的资源容器和安全容器。
LXC在资源管理方面依赖于Linux内核的cgroups子系统,
cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,
可以为特定的进程组限定可以使用的资源。
LXC在隔离控制方面依赖于Linux内核的namespace特性,
具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。
    但是LXC项目本身只是一个为用户提供一个用户空间的工具集,
用来使用和管理LXC容器。
LXC真正的实现则是靠Linux内核的相关特性,LXC项目只是对此做了整合。
基于容器的虚拟化技术起源于所谓的资源容器和安全容器。
LXC在资源管理方面依赖于Linux内核的cgroups子系统,
cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,
可以为特定的进程组限定可以使用的资源。
LXC在隔离控制方面依赖于Linux内核的namespace特性,
具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。
 docker与虚拟机的区别    
     docker优点
    
     启动速度快  
     资源消耗小
    
     资源可以控制    
     cpu、内存、磁盘速度、iops等
  
     公用宿主机内核,基础镜像
    
     消耗内存小  
     扩展方便    
     HPA
  
     增加和减少容器
  
     容器的文件系统相互隔离,虚拟机的不是  
     docker缺点    
     隔离没有虚拟机彻底
  
     虚拟机    
     运行在虚拟机上的应用会通过虚拟机的系统调用,
通过虚拟内核再去真实物理机上去执行指令,容器是直接公用真实宿主机的内核
    通过虚拟内核再去真实物理机上去执行指令,容器是直接公用真实宿主机的内核
 虚拟机是做到了完全隔离,数据保密性比容器好  
     Dockerfile    
     Dockerfile 是制作镜像的配置文件--》配方文件 --》祖传秘方  
     镜像制作(Dockerfile)    
     范例    
     ==========
FROM python:3.9 --》指明基础镜像
WORKDIR /app --》指明容器运行起来后,进入容器,会进入到的目录,这个目录我们称呼为工作目录 --》docker exec 命令执行的时候,进入的目录
ADD . /app ---》 复制宿主机当前目录下的所有的文件和文件夹到容器里的/app -->背后使用了卷,实现数据共享
RUN pip install --trusted-host pypi.python.org -r requirements.txt --》run后面接linux里的命令,这个命令是在制作镜像的时候使用的,是给app.py文件里的需要使用的库,进行安装
EXPOSE 80 容器运行的时候暴露那个端口--》对外提供服务的端口
ENV NAME World 定义环境变量,容器在运行的时候,可以使用 NAME是变量名 World是值
ENV AUTHOR cali
CMD ["python","app.py"] 指定容器运行的时候,启动的第一个命令
=========
    FROM python:3.9 --》指明基础镜像
WORKDIR /app --》指明容器运行起来后,进入容器,会进入到的目录,这个目录我们称呼为工作目录 --》docker exec 命令执行的时候,进入的目录
ADD . /app ---》 复制宿主机当前目录下的所有的文件和文件夹到容器里的/app -->背后使用了卷,实现数据共享
RUN pip install --trusted-host pypi.python.org -r requirements.txt --》run后面接linux里的命令,这个命令是在制作镜像的时候使用的,是给app.py文件里的需要使用的库,进行安装
EXPOSE 80 容器运行的时候暴露那个端口--》对外提供服务的端口
ENV NAME World 定义环境变量,容器在运行的时候,可以使用 NAME是变量名 World是值
ENV AUTHOR cali
CMD ["python","app.py"] 指定容器运行的时候,启动的第一个命令
=========
 FROM busybox 从docker hub下载一个叫busybox的镜像,作为我们自己制作的镜像的基础镜像  base image
COPY . / 将我们宿主机里的当前目录下所有的文件和目录都拷贝到容器里的/目录下
RUN cat /hello 是在制作镜像的时候执行的命令
ENTRYPOINT ["/while.sh"] 容器启动的时候会执行的命令,让容器启动的时候执行/while.sh脚本
    COPY . / 将我们宿主机里的当前目录下所有的文件和目录都拷贝到容器里的/目录下
RUN cat /hello 是在制作镜像的时候执行的命令
ENTRYPOINT ["/while.sh"] 容器启动的时候会执行的命令,让容器启动的时候执行/while.sh脚本
 常用命令    
     docker version    
     查看docker版本详情  
     docker images
    
     查看本机中的docker镜像  
     docker pull nginx    
     在官网中下载docker镜像,如果不指定版本会下载最新的版本  
     docker ps    
     查看运行在运行的docker容器有哪些  
     docker run -d -p 8080:80 --name fu_nginx nginx    
     创建一个docker容器,-d在后台运行,-p指定容器的端口映射  
     docker inspect fu_nginx    
     查看容器详细信息  
     docker stop    
     关闭容器  
     docker rm    
     删除容器  
     docker -exec -it fu_nginx  /bin/bash    
     进入容器内部  
     docker logs fu_nginx    
     查看容器日志  
     卷 volume: 数据持久化、数据共享  
     k8s    
     k8s是什么    
     不同机器上docker容器的管理和编排  
     组成    
     master上    
     控制平面组件(Control Plane Components)    
     实现k8s控制功能的软件,控制平面组件有很多个软件,
控制组件相当于管理层(党中央),对整个集群进行调度,
管理、控制、数据存储等,集群的全盘信息,都在控制平面组件里
    控制组件相当于管理层(党中央),对整个集群进行调度,
管理、控制、数据存储等,集群的全盘信息,都在控制平面组件里
 API Server(接口)    
     API 服务器是 Kubernetes 控制面的组件, 该组件公开了 Kubernetes API。 
API 服务器是 Kubernetes 控制面的前端。
其他的node服务器或者master访问的入口,可以通过API 获取整个集群的信息
    API 服务器是 Kubernetes 控制面的前端。
其他的node服务器或者master访问的入口,可以通过API 获取整个集群的信息
 Scheduler(资源调度)    
     scheduler :调度器,把什么东西调度到哪里?  
     Etcd    
     etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 --》etcd就是一个数据库  
     controller manager  
     node    
     kubelet(负责维护容器的生命周期)  
     k-proxy(网络相关)  
     Pod  
     资源    
     子主题  
     compose(容器编排工具)和k8s的区别?
    
      1.compose是docker,k8s是CNCF(google等)
2.compose只能在一台宿主机上编排容器,而k8s可以在很多台机器上编排容器
  
    2.compose只能在一台宿主机上编排容器,而k8s可以在很多台机器上编排容器
  收藏 
     
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多