docker概述
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化,容器是完全使用沙盒机制,
相互之间不会有任何接口(类似iphone的app) 几乎没有性能开销
docker是dotCloud公司开源的一个基于LXC的高级容器引擎,基于go语言并遵从Apache2.0协议开源
docker让开发者可以打包它们的应用以及依赖包到一个可移植的container中,然后发布到任意流行的linux机器中
特点
- 不依赖任何语言,框架或系统
- docker镜像一次编译,到处运行
沙盒
沙盒也叫沙箱,英文sandbox,在计算机领域值一种虚拟技术,且多用于计算机安全技术,安全软件可以先让他在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害
lxc
lxc为linux container的简写,linux container容器是一种内核虚拟化技术
可以通过轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性
lxc主要通过来自kwenel和namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量
namespace 实现container的进程网络消息文件系统和主机名的隔离
docker容器技术和虚拟机对比
- 相同点,docker容器技术和虚拟机技术,都是虚拟化技术
- docker相对于vm虚拟机,少了虚拟机操作系统这一层,所以docker效率比虚拟机高
docker架构
- 工作流程
服务器a上运行decker engine 服务,在deocker engine上启动很多容器container,
从外网docker HUB上把image操作系统镜像下载下来,放到container容器上运行,这样一个容器的实例就运行起来了
- 通过Docker client对docker容器虚拟化平台进行控制
- image和container的关系,image可以理解为一个系统镜像,container是image在运行时的一个状态
- docker HUB是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,
docker用于应用程序是最有用的, 但并不包含数据
日志,跟踪和数据库等,它们通常放在docker容器外,
一个容器的镜像通常很小,不适合存大量数据
存储可以通过外部挂载的方式使用,
比如使用nfs, ipsan, mfs, -v磁盘映射分区
总之说的直白点
docker只负责计算,存储交给别人
oracle不适合使用docker来运行,太大了,存储的数据太多