容器与容器云

概述

  • 操作系统允许存在多个相互隔离用户空间实例其中用户实例称作容器
  • 操作系统级虚拟化,也称容器化
    • 将操作系统管理的计算机资源分组,然后交给不同的容器使用
    • 容器中的进程无法看到容器外的其他进程及其资源
  • 本质上容器时资源隔离、可限制的进程集合
  • 容器云,指以容器为资源分割和调度的基本单位,使用容器来封装应用软件及其所需的运行时环境(runtimes),为开发者和系统管理人员提供用于构建、发布、运行分布式应用的平台

重要技术

OpenVZ:基于Linux克源容器化技术
FreeBSD Jail:基于FreeBSD的容器化技术
Solaris Container:基于Solaris的容器化技术
LXC:Linux容器化实现的统称

容器和虚拟机比较

  • 都创建某种资源隔离环境
    • VM是虚拟化的硬件上的操作系统,客户机操作系统提供隔离环境
    • 容器是宿主机操作系统的用户实例,用户空间和使用配额提供隔离环境
  • VM开销大
  • 虚拟机通过VMM/Hypervisor访问主机资源

容器优点

  • 轻量化
  • 快速启动
  • 易于迁移
  • 简化部署
  • 多环境支持
  • 容器开销小
  • 多个容器共享主机OS

实施部署

  • 资源编排调度
  • 服务注册与发现
  • 容器监控及报警
  • 容器弹性伸缩

Docker

组件

  • Docker Engine(demon)核心组件
  • Docker Client用户接口
  • Docker Registry镜像管理
  • Docker Compose容器运行部署工具

基本概念

Image

只读模板(镜像)
  • 可以包含一个完整的centos,用来创建容器
  • 相当于类

Container

容器
  • 是从镜像创建来的实例,利用容器运行
  • 相当于实例

Repository

集中储存镜像文件
每个镜像有不同的tag

基本操作

notion image

Docker数据卷

  • 容器文件系统(rootfs)包含多个只读层和一个可读写容器层
    • 只读层多个容器之间共享
    • 有效节省镜像空间
  • 容器创建和修改的所有文件都保存在可读可写容器层
    • 容器不存在时数据会丢失,并且其他进程需要容器中数据时很难取出
    • 与宿主机紧密耦合,可移植性差
    • 写入容器和可写层时需要存储驱动,不如写入宿主机文件高效
  • 将容器数据持久化到宿主机文件系统的方法
    • 数据卷(volume)
      • 由Docker创建和管理
      • 实际上是一个目录
    • 绑定挂载bind mounts
      • 宿主机和容器间共享宿主机文件系统
      • 可以是任何目录

创建volume

  • docker volume create [options] [volume]
    • options
      • -d 指定volume driver,默认为local
      • -o driver指定的选项默认为map[]
      • 创建数据卷时,宿主机中创建目录并将数据卷内容保存在_data的子目录中
  • -v 创建并添加volume
    • docker run -it -v vol_test : /data ubuntu /bin/bash
  • --mount 挂载已创建的volume或bind宿主机目录
    • docker run -it --name c_test --mount type=volume,src=vol_test,target=/etc/vol ubuntu /bin/bash
  • 通过第三方数据卷驱动挂载远程主机的文件或目录
    • docker plugin install --grant-all-permissions vieux/sshfs
    • docker volume  --driver vieux/sshfs    -o sshcmd=192.168.1.1:/home/docker_user/\volume -o password="***"  volume_ssh_remote

查看volume

docker volume ls 查看/var/lib/docker/volumes目录中的volumes
docker volume inspect <volume_name> 查看指定的volume详细信息
docker inspect -f {{..Mounts}} <volume_name>

挂载volume

删除volume

docker volume rm <volume_name> 删除指定名字的数据卷
sudo docker rm -v <container_name> 删除容器同时删除所挂在的匿名数据卷
docker run -rm 容器停止运行时,删除容器及挂载的数据卷

Docker网络

网络架构

  • CNM
    • sandbox:隔离网络资源的虚拟环境
    • endpoint:连接sandbox网络
      • veth对、Open vSwich端口
    • 网络
      • endpoint互联形成的虚拟网络
  • 内置网络驱动
    • bridge:默认驱动
    • host
    • overlay
    • macvlan
    • null
  • 安装Docker
    • 初始默认创建三个网络:bridge、host和none
    • 使用的驱动分别为bridge、host和null
    • 宿主机中创建了名为docker0的虚拟设备,IP默认为172.17.0.1/24,与默认的bridge网络属于同一个子网
  • docker network ls 查看Docker中的网络
  • 不指定网络,则默认连接到bridge网络
  • 连接到同一网络的容器间可以相互通信
  • GATEWAY=0.0.0.0为直连

创建网络

docker network create [options] network-name
  • d:指定网络驱动,默认为bridge
  • -- gateway:指定网络的默认网关
  • --subnet:CIDR形式的网络IP地址(ip/0~32)

Docker Image

初始化中,以只读打开rootfs,然后将可读写文件系统挂载在只读rootfs,允许再将可读写文件系统设为只读并逐层叠加
  • 每个文件系统被称为一个FS层
  • Docker镜像就是只读FS层组成的结构
  • 大多数镜像是由基础镜像上创建而来
  • 分层好处
    • 资源共享
    • 利用复用

Dockerfile

  • 使用Dockerfile文件和docker build命令制作镜像
  • Dockerfile是构建Docker镜像的构建文件:一系列命令和参数构成的脚本
  • 流程
    • docker daemon从基础镜像创建并运行一个容器
    • 执行Dockerfile中的一条命令,对容器做出修改;
    • 执行类似docker commit的操作提交一个FS层/镜像层;
    • docker daemon基于刚提交的镜像运行一个容器,执行Dockerfile中的下一条指令;
    • 直到Dockerfile文件中的所有指令都执行完成。
  • docker [image] build <path> -t <name> 创建镜像并命名
  • Dockerfile中可用命令

run/cmd/entrypoint

  • RUN 为进度build镜像时使用的命令
    • RUN yum install -y vim
  • CMD用来设置容器启动后默认执行的命令(可以带参数),但有可能被docker run中的命令替换
  • ENTRYPOINT指定容器启动时运行的命令,docker run 中设定的命令会被追加执行,不会被覆盖
    • ENTRYPOINT <command>

Docker Compose

Kubernetes

Prev
并行计算
Next
实验
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++