Day04 Docker

Docker的理念

 docker的三大理念:build(构建)  ship(运输)  run(运行)

image-20240701093125336.png

应用场景:
1、web应用的自动化打包发布
2、自动化测试的集成、发布
3、在服务环境中部署调整其他的后台应用
4、从头编译或扩展现有平台搭建自己的PaaS环境


组成部分
Docker Host主机:一个物理机和虚拟机,用于运行Docker服务进程和容器,也成为宿主机
dockers server 服务端: docker 守护进程,运行docker 容器
dockers client 客户端: 客户端使用docker或其他工具调用docker api
registry 仓库 : 存放镜像的仓库
images 镜像 : 镜像可以理解为创建实例使用的模板,镜像是只读的,只能在容器里面写
container 容器: 从镜像成成对外提供服务的一个或一组服务

相较于虚拟机,docker容器资源利用率更高,一台机器可以运行几百个容器,但是只能几十个虚拟机
系统资源开销更小,不单独占用硬件资源并且启动速度更快,集成性更好,能够和cicd相关技术结合性更好,实现自动化管理

docker的本质

不断构建,不断拉取
docker 是属于半解耦的技术,通过namespace 将特定的全局系统资源用抽象的方法实现隔离
docker 创建一个容器,它会创建六种namespace实例
mount:提供磁盘挂载点和文件系统的隔离能力 调用参数:CLONE_NEWNS
Inter-Process-Communication : 提供进程间通信的隔离能力 参数:CLONE_NEWIPC
UNIX Timesharing System: 提供主机名隔离能力 参数:CLONE_NEWUTS
Process Identification:提供进程隔离能力 参数:CLONE_NEWNET
network:网路隔离能力 CLONE_NEWNET
user:用户隔离能力  CLONE_NEWUSER

Docker的组成

越往内 越接近内核,就越接近容器的技术  低容器运行时,容器技术
越往外,就越接近云计算,如openstack,一个虚拟机不够,两个三个,就形成了一个集群
大数据的框架都属于重运用
而k3s k0s都属于是轻量级应用
不到万不得已,不要把大数据往k8s上面迁移
无状态的应用,比如转发,代理这些,哪怕挂了也能很快起的,是可以放在docker里面的

image-20240701114538947.png

cgroup作用

控制程序对资源占用
具体描述:可以对进程组使用的资源总额进行限制
优先级限制:通过分配cpu时间片数量及磁盘IO带宽大小,实际上相当于控制子进程运行优先级
资源统计:统计系统资源使用量,比如cpu使用时间,内存使用量
进程控制,恢复执行进程


查看cpu权重
 cat /sys/fs/cgroup/cpu/cpu.shares  --->1024
 容器cpu
 docker run -tid centos
 cat /sys/fs/cgroup/cpu/cpu.shares --->1024  #前提是下载了cat 这个命令
 
 内存 cat /sys/fs/cgroup/memory/memory.limit_in_bytes
 交换空间 cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes
 
 默认不会对容器的内存做限制的,一般对容器使用的cpu和内存进行限制 20% cpu
 docker run -itd --name=test --cpu-quota 20000 centos:7 /bin/bash 容器id
 
 压力测试
 echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/00-system.conf
 
 内存限制的参数
 -m/-memory 可以指定容器使用的最大内存,如果设置了这个参数,运行容器最低的内存大小为4M(后期docker 设置最小为6M)
 docker run -itd --rm -m 4m ubuntu:18.04 bash

RUNC 标准化容器执行引擎

runc是docker中最为核心的部分,容器的创建运行销毁等操作都是调用runc来完成的
containerd runtime 容器运行时包括了容器管理和容器镜像
open container initiatice,OCI 是容器运行的工业标准
包含:1、 runtime-spec 运行时标准
2、 容器镜像标准 image-spec
runc是一个根据OCI标准创建并运行容器的CLI tool
是一个遵循OCI标准的用来运行容器的命令行工具,也是runtime的实现

image-20240701095530248.png

安装docker

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

image-20240701102913737.png

docker版本的话我们下载1.26

image-20240701103112192.png

搭建梯云纵

配置文件在配置中点击打开 C:\Users\jichao\.config\clash\profiles中一共两个文件
cd /usr/lib/systemd/system
 vim clash.service
[Unit]
Description=clash-core
[Service]
Type=simple
ExecStart=/opt/clash/clash -f /opt/clash/config.yml -d /opt/clash/
[Install]
WantedBy=multi-user.target


mkdir -p /opt/clash/
把config.yml Country.mmdb  clash传入进去/opt/clash
给这三个 chmod +x config.yml Country.mmdb  clash 执行权限
把自带脚本start-proxy.sh执行一下即可

二进制部署docker



https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/?spm=a2c6h.25603864.0.0.1a8615e8TkdXXL
下载对应版本的docker

tar -zxvf docker-27.0.2.tgz
tree docker
mv /docker/* /usr/bin

写docker的启动文件
cat > /usr/lib/systemd/system/docker.service << EOF

image-20240701153243548.png

编辑/etc/docker/daemon.json 文件

image-20240701153722458.png

systemctl docker restart
systemctl enable docker