本文为博主原创,未经允许不得转载:
Docker是基于Go语言实现的云开源项目,Docker的主要目标是 Build ,Ship and Run Any App,Anywhere,也就是通过对应用组件的封装,分发,部署,运行等生命周期的管理,使用户的app及其运行环境能够做到“一次封装,到处运行”
Docker容器在任何操作系统上都是一致的,这就实现了跨平台,跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
docker解决了运行环境和配置软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
虚拟机就是带环境安装的一种解决方案,它可以在一种操作系统里面运行另一种操作系统,比如windows系统里面运行linux系统,应用程序对此毫无感知,因为虚拟机上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变
虚拟机缺点:
1.资源占用多 2.冗余步骤多 3.启动慢
Why Docker?
更轻量:基于容器的虚拟化,仅包含业务运行所需的runtime环境
更高效:无操作系统虚拟化开销
更敏捷,更灵活:分层的存储和包管理,devops理念,支持多种网络配置
linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,有了容器,就可以将软件所需的所有资源打包到一个隔离的容器中,
容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的资源和配置,系统因此而变得高效轻量,并保证部署在任何环境
中的软件都能始终如一的运行
docker和虚拟机的不同
1.传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上在运行所需应用进程
2.而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,因此容器要比传统虚拟机更轻便
3.每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
Docker 的架构:
Docker daemon( Docker守护进程)
是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
Client( Docker客户端)
是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。
Images( Docker镜像)
docker镜像都是只读的,镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内存,包括代码,运行时,库,环境变量和配置文件
Container(容器)
容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
可以把容器看做是一个简易版的linux环境(包括root用户权限,进程空间,用户空间,网络空间)和运行在其中的应用程序。
Registry
Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助 Docker Registry来避免镜像的手动复制。
docker三大特征:容器,镜像,仓库
Docker镜像image就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建多个容器,它可以被启动,开始,停止,删除,每个容器都是互相隔离的,保证安全的平台。
仓库(Repository)是集中存放镜像文件的场所
仓库和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
仓库分为公开仓库和私有仓库两种形式
最大的公开仓库是Docker Hub(https://hub.docker.com),存放了数量庞大的镜像供用户下载,国内的公开仓库包括阿里云,网易云等;
阿里云镜像加速配置:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://3q5mnu1c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker