1.容器与管理程序虚拟化
? ?? ?容器与管理程序虚拟化(Hypervisor Virtualization, HV)不同,HV通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间,因此被称为"操作系统级虚拟化",可以让多个独立用户空间运行在同一台宿主机上。
容器技术的缺点:
? ?? ?容器仅能运行与底层宿主机相同或相似的操作系统,不够灵活。
容器技术的应用场景:
? ?? ?容器在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不太高的隔离环境中得到广泛应用。
2.Docker简介
? ?? ?Docker能够把开发的应用程序自动部署到容器的开源引擎,是一个客户端/服务器(C/S)架构的程序,Docker的核心组件有:
① Docker客户端和服务器,即Docker引擎:
? ?? ?Docker客户端只需要向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。它提供了一个命令行工具docker以及一整天RESTFUL API来与守护进程交互。
② Docker镜像:
? ?? ?镜像是构建Docker世界的基石,用户基于镜像来运行自己的容器,是Docker生命周期中的构建和打包阶段。镜像体积很小,非?!北阈?,易于分享、存储和更新。
③ Registry:
? ?? ?Docker用Registry来保存用户构建的镜像,其分为公有和私有两种。公共Registry由Docker公司运营,叫做DockerHub,用户可注册账号并在其上分享并保存自己的镜像,同时支持保存自己的私有镜像。
④ Docker容器:
? ?? ?Docker可以帮用户构建和部署容器,其基于镜像启动,用户只需要把应用程序或服务打包放进容器即可。容器是Docker生命周期中的启动或执行阶段,总的来说,Docker容器就是:一个镜像格式、一系列标准操作、一个执行环境。
3. Docker基础指令
① docker run [options] ubuntu16.04 bin/bash
:通过Docker二进制执行文件docker
和run
指令结合创建并启动一个容器,指定镜像为ubuntu16.04
,同时在容器内执行bin/bash
指令启动shell??赏ü率隽礁雒钚胁问氯萜鞑拍芴峁┮桓鼋换ナ絪hell:
-
-i
:允许你对容器内的标准输入(STDIN)进行交互; -
-t
:在新容器内指定一个伪终端或终端; -
-d
:后台运行容器,创建守护式容器,并返回容器ID; -
--name
:容器命名,如docker run --name container ubuntu16.04 bin/bash
:创建一个名为container
的容器,合法容器名称只能包含以下字符:大小写字母a-z and A-Z、数字0-9、下划线、原点、横线([a-zA-Z0-9_.-]); -
-p
:指定容器运行时公开的网络端口号,可以通过主机端口:宿主端口
指定将主机某端口映射到容器中; -
--restart
:若容器因某种错误而停止运行,可以通过此标准让Docker自动重启该容器。它会检查容器的退出代码,以此判断是否重启容器:-
--restart=always
:总是自动重启该容器; -
--restart=on-failure
:仅当容器退出代码非0时自动重启,同时支持设置重启次数--restart=on-failure:5
;
-
注意: 若本地不存在ubuntu16.04
镜像,将会连接官方的Docker Hub Registry并查看是否有该镜像,若有则下载到本地。
② 启停操作
docker stop container
:停止名为container
的容器(也可用容器ID) ;
docker start container
:启动已被停止的容器container
;
docker restart container
:重新启动容器container
;
③ docker ps [options]
:列出正在运行的容器;
-
-a
:显示所有的容器,包括未运行的; -
-l
:显示最近一个创建的容器; -
-n
:列出最近创建的n个容器;
④docker attach container
:容器附着,根据容器名或容器ID重新附着到此容器会话上;
⑤docker logs [options]
:获取容器日志;
-
-f
:跟踪日志输出; -
--since
:显示从某时刻开始的所有日志; -
-t
:显示时间戳; -
-tail
:仅列出最新N条容器数据;
⑥性能监控
docker top container [ps options]
:查看容器container
中运行的进程信息,同时支持ps参数;
docker stats container
:查看容器container
的资源消耗,如CPU、内存、网络I/O及磁盘存储I/O等性能指标;
⑦docker exec [options] container command
:在运行中的容器container
上执行特定的command
命令;
-
-d
:运行一个后台进程; -
-i
:即使没有附加也保持STDIN 打开; -
-t
:分配一个伪终端;
⑧docker inspect container
:获取容器/镜像container
的配置信息,包括名称、命令、网络配置等;
⑨删除容器和镜像
docker rm
:删除容器;
docker rmi
:删除本地镜像;
⑩构建镜像
docker build
:使用Dockerfile创建镜像;
4.Docker镜像
? ?? ?Docker镜像是由文件系统叠加而成,最底端是引导文件系统bootfs,当容器启动后将被移到内存中,而bootfs则被卸载。Docker镜像的第二层就是root文件系统rootfs,它位于bootfs之上,由一个or多个操作系统组成。
? ?? ?在传统的Linux引导过程中,root文件系统先以只读方式加载,当引导结束并完成完整性检查后,被切换成读写模式。但是在Docker中,root文件系统永远处于只读状态,且Docker使用联合加载技术(一次加载多个文件系统,而对外仅可见到一个文件系统)在root文件系统层上加载更多的只读文件系统。联合加载将各文件系统叠加,形成一个包含所有底层文件和目录的终极文件系统。
? ?? ?Docker将上述只读文件系统称为镜像,一个镜像可叠放在另一个镜像的顶部,位于下面的镜像称为父镜像,最下面的称为基础镜像。最后,当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统,在此执行程序。
写时复制(copy on write)机制
? ?? ?当Docker第一次启动一个容器时,初始的读写层为空,当文件系统发生变化时,这些变化都会被应用到这一层。比如,若修改一个文件,首先是将其从只读层复制到读写层,在保留只读版本的情况下完成修改。
构建缓存
? ?? ?Docker在构建过程中会将每一步结果提交为镜像,并把构建所创建的镜像作为缓存,若构建过程中某一步发生了错误,新的构建将以当前缓存的镜像作为开始点??梢酝ü褂?code>docker build的--no-cache
标志在构建过程中不使用缓存,同时修改构建指令也将放弃使用缓存镜像