1.、简介

docker是基于go语言并遵从apache2.0协议开源的lxc高级容器技术(也即软件虚拟化),lxc是一种内核虚拟化的技术,可以提供轻量级的虚拟化,以便隔离进程和资源。
容器技术:有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。提供封装好的运行环境,一次构建,随处运行。
优点:启动秒级、更高的性能和效率,更轻松的迁移和扩展等


dcoker组件:
docker client
docker server
docker 仓库
docker images
image.png



镜像、容器、仓库 https://hub.docker.com/

2、安装:

rpm包下载:可直接配置yum源
语雀内容
配置阿里云镜像加速器:
语雀内容


docker run —name tomcat -p 8080:8080 -d tomcat

基础命令

Docker info
docker run
docker pull
docker exec
docker ps
docker images
Docker rmi
Docker rm

3、镜像特性

创建容器时需要镜像,相当于模板,有点类似与java类与对象。
唯一标识:registry/username/Image:tag
默认tag:latest版本

镜像分层存储,最多128层。通过联合文件系统(UFS)将各层镜像叠加在一起。镜像层只能只读,创建容器时会在最顶层添加一层可写层。多个容器可以共用相同镜像。节省磁盘空间。
构建自定义的镜像?
dockerfile:
FROM
ENV
VOLUME
RUN
ADD/COPY
CMD
EXPOSE
docker build -t redis:1.0 .

Dockerfile: 用于描述镜像的生成规则。 Dockerfile中的每一条命令,都在Docker镜像中以一个独立镜像层的形式存在。
Image: 由Dockerfile生成, 呈现层级结构, 每层镜像包含:镜像文件以及镜像json元数据信息。
Container: Container 是Image 的动态运行结果,概括而言,就是在Docker镜像之上,运行进程。
image.png


镜像仓库:
docker login —username=wo子敬不做大都督 registry.cn-beijing.aliyuncs.com
docker tag redis:1.0 registry.cn-beijing.aliyuncs.com/lms-sgcc/redis:1.0
docker push registry.cn-beijing.aliyuncs.com/lms-sgcc/redis:1.0
docker pull registry.cn-beijing.aliyuncs.com/lms-sgcc/redis:1.0

4、容器通信:


image.png
语雀内容

/

5、数据卷特性:


UFS:
轻量级的高性能分层文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加,并且可以将不同目录挂载到同一个虚拟文件系统下。
Linux启动到运行需要两个FileSystem,BootFS 和RootFS.BootFS 主要包含BootLoader 和Kernel, BootLoader主要是引导加载Kernel, RootFS包含的就是典型 Linux 系统中的 /dev、/proc、/bin 等标准目录和文件。
Linux在启动后,首先将RootFS 置为 Readonly,进行一系列检查后将其切换为Readwrite供用户使用。
Docker中,也是利用该技术,然后利用Union Mount在Readonly的RootFS文件系统之上挂载Readwrite文件系统。并且向上叠加, 使得一组Readonly和一个Readwrite的结构构成一个Container的运行目录、每一个被称作一个文件系统Layer。
在Docker中,将Readonly的层称作“image” 镜像.容器启动后,会添加一个可写层,也即容器层。其他的都为只读层。
注:Dockerfile中只允许最后一个CMD或ENTRYPOINT生效,也与之对应,Dockerfile中其他命令生成的layer为Read-only的,CMD或ENTRYPOINT生成的layer是R/W的。


image.png
容器删除数据丢失。
需要进行数据持久化:
不利于宿主机的访问
容器间数据共享不方便


数据卷:
两个卷,bind volume 、manage volume
将本地宿主机的目录挂载到容器中对应的目录。

数据卷的数据不在容器层。

image.png

docker run -d —name redis -p 8002:6379 -v /data/redis:/data/redis redis

存储驱动overlay:
image.png



Mrdir /data/overlay
mkdir low upper work merged
mount -t overlay overlay -olowerdir=./low,upperdir=./upper,workdir=./work ./merged


6、docker底层技术:

  1. namespace<br />cgroups<br />UFS(union file system)<br />linux虚拟网络支持:本地和容器内创建虚拟接口<br /> <br />namespace:<br />mount:隔离文件系统,为容器挂载到指定位置,在本地主机上形成独立的文件系统。Linux 2.4.19<br />PID:隔离进程,每个容器都有各自的pid表,不同容器内的pid可以相同。 Linux 2.6.24<br />network:隔离网络,每个容器都有独立的网络协议栈、路由表、防火墙规则等。 Linux 2.6.29<br />IPC:隔离进程,进程间通信。进程之间通信通过共享内存、信号量、消息队列等。 Linux 2.6.19<br />UTS:每个容器都有独立主机名和域名,使docker容器不仅仅是宿主机上的一个进程 Linux 2.6.19<br />user:隔离用户和组 Linux 3.8 <br />cgroups:隔离资源,防止每一个应用占用太多资源影响其他应用。<br />容器通过 cgroups 来得到所能够管理资源的分配和使用。因此容器所获得资源仅为所有系统资源的一个部分 <br />资源限制:限制资源的使用。比如内存使用上限以及文件系统的缓存限制<br />优先级:通过优先级让一些组得到更多 CPU 等资源。 比如:CPU利用和磁盘IO吞吐。<br />资源审计:用来统计系统上实际把多少资源用到适合的目的上,主要目的是为了计费。<br />控制:挂起、恢复和启动等操作。<br />隔离:为组隔离名字空间 , 这样一个组不会看到其他组的进程,网络连接和文件系统<br /> <br />Docker stats 查看容器的使用资源 可以自己设置。防止容器占用太多资源导致OOM异常等<br />