云原生 - 目录

第二部分:Docker 实战



1、Docker 架构


在这里插入图片描述

  • K8S:CRI(Container Runtime Interface)

  • Client: 客户端;操作docker服务器的客户端(命令行或者界面)

  • Docker_Host:Docker主机;安装Docker服务的主机

  • Docker_Daemon:后台进程;运行在Docker服务器的后台进程

  • Containers:容器;在Docker服务器中的容器(一个容器一般是一个应用实例,容器间互相隔离)

  • Images:镜像、映像、程序包;Image是只读模板,其中包含创建Docker容器的说明。容器是由Image运
    行而来,Image固定不变。

  • Registries:仓库;存储Docker Image的地方。官方远程仓库地址: https://hub.docker.com/search

    Docker 用 Go 编程语言编写,并利用 Linux 内核的多种功能来交付其功能。 Docker 使用一种称为名称空间的技术来提供容器的隔离工作区。 运行容器时,Docker 会为该容器创建一组名称空间。 这些名称空间提供了一层隔离。 容器的每个方面都在单独的名称空间中运行,并且对其的访问仅限于该名称空间。

    Docker面向对象
    镜像(Image)
    容器(Container)对象(实例)
  • 容器与虚拟机
    在这里插入图片描述


2、Docker 隔离原理


  • namespace 6项隔离 (资源隔离)

    namespace系统调用参数隔离内容
    UTSCLONE_NEWUTS主机和域名
    IPCCLONE_NEWIPC信号量、消息队列和共享内存
    PIDCLONE_NEWPID进程编号
    NetworkCLONE_NEWNET网络设备、网络栈、端口等
    MountCLONE_NEWNS挂载点(文件系统)
    UserCLONE_NEWUSER用户和用户组
  • cgroups 资源限制 (资源限制)
    cgroup 提供的主要功能如下:

    • 资源限制:限制任务使用的资源总额,并在超过这个配额时发出提示
    • 优先级分配:分配 CPU 时间片数量及磁盘 IO 带宽大小、控制任务运行的优先级
    • 资源统计:统计系统资源使用量,如 CPU 使用时长、内存用量等
    • 任务控制:对任务执行挂起、恢复等操作

    cgroup 资源控制系统,每种子系统独立地控制一种资源。功能如下

子系统功能
cpu使用调度程序控制任务对CPU的使用。
cpuacct(CPU Accounting)自动生成 cgroup 中任务对 CPU 资源使用情况的报告。
cpuset为cgroup 中的任务分配独立的 CPU (多处理器系统时)和内存。
devices开启或关闭 cgroup 中任务对设备的访问。
freezer挂起或恢复 cgroup 中的任务。
memory设定 cgroup 中任务对内存使用量的限定,并生成这些任务对内存资源使用情况的报告。
perf_event(Linux CPU性能探测器)使 cgroup 中的任务可以进行统一的性能测试。
net_cls(Docker未使用)通过等级识别符标记网络数据包,从而允许 Linux 流量监控程序(Traw ic Controller)识别从具体 cgroup 中生成的数据包。

3、Docker安装


以下以centos为例;
更多其他安装方式,详细参照官方文档: https://docs.docker.com/engine/install/centos/

3.1、移除旧版本

sudo yum remove docker*

3.2、设置docker yum源

sudo yum install -y yum-utils
sudo yum-config-manager \
	--add-repo \
	https://download.docker.com/linux/centos/docker-ce.repo

3.3、安装最新 docker engine

sudo yum install docker-ce docker-ce-cli containerd.io

4.4、安装指定版本 docker engine

4.4.1、在线安装

#找到所有可用docker版本列表
yum list docker-ce --showduplicates | sort -r

# 安装指定版本,用上面的版本号替换<VERSION_STRING>
sudo yum install docker-ce-<VERSION_STRING>.x86_64 docker-ce-cli- <VERSION_STRING>.x86_64 containerd.io

#例如:
#yum install docker-ce-3:20.10.5-3.el7.x86_64 docker-ce-cli-3:20.10.5- 3.el7.x86_64 containerd.io
#注意加上 .x86_64 大版本号

4.4.2、离线安装

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

rpm -ivh xxx.rpm
可以下载 tar
解压启动即可

https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux

5、启动服务

systemctl start docker
systemctl enable docker

6、镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#以后 docker 下载直接从阿里云拉取相关镜像

/etc/docker/daemon.json 是Docker的核心配置文件。

7、可视化界面 - Portainer

7.1、什么是 Portainer

https://documentation.portainer.io/

Portainer 社区版 2.0 拥有超过 50 万的普通用户,是功能强大的开源工具集,可让您轻松地在 Docker, Swarm,Kubernetes 和 Azure ACI 中构建和管理容器。 Portainer 的工作原理是在易于使用的 GUI 后面隐藏
使管理容器变得困难的复杂性。通过消除用户使用 CLI,编写 YAML 或理解清单的需求,Portainer 使部署应用程序和解决问题变得如此简单,任何人都可以做到。 Portainer开发团队在这里为您的 Docker 之旅提
供帮助;

7.2、安装

# 服务端部署
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v \
/var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
# 访问 9000 端口即可

#agent端部署
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v \
/var/run/docker.sock:/var/run/docker.sock -v \
/var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐