docker/k8s
2024-03-28 13:42:42 10 举报
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 条评论
下一页