Docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源, 从 17.03 版本之后分为 CE社区版 和 EE企业版。可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- DockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
DockerContainer容器
docker底层使用了LXC(Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。)来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能对各进程资源合理分配。在LXC的基础之上,docker提供了一系列更强大的功能。Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。
Docker最开始的出现说白了就是为了解决,在我的机器上是正常的,为什么到你的机器上就不正常了的问题。它是一个跨平台、可移植并且简单易用的容器解决方案。目前docker已经成为高可用服务集群持续交付、持续集成以及云原生的关键技术。
三个重要概念:
1)image镜像,docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下一个已经做好的镜像来直接使用
2)container容器,docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序
3)repostory仓库,仓库是集中存储镜像文件,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)仓库分为两种,公有仓库和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。
Docker的主要用途:实现了应用的封装、部署、运行的生命周期管理。应用的打包(把软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包)、分发(把打包好的安装包上传到一个镜像仓库,其他人可以非常方便的获取和安装)、部署(使用安装包就可以一个命令运行起来应用,自动模拟出一模一样的运行环境,不管是在什么操作系统)。
- 发布服务不用担心服务器的运行环境,所有的服务器都是自动分配docker,自动部署,自动安装,自动运行
- 不用担心其他服务引擎的磁盘问题,cpu问题,系统问题,也就是主机的环境问题。
- 编译、装载、运行、任何app在任意地点都能运行。就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下,都可以运行。
- 自动迁移,可以制作镜像,迁移使用自定义的镜像即可迁移,不会出现什么问题,管理更加方便。
为什么要使用Docker:
- 灵 活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:可以即时部署更新和升级。
- 便携式:可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:可以增加并自动分发容器副本。
- 可堆叠:可以垂直和即时堆叠服务。
Docker如何使用:
Docker可以安装在Windows、Linux、Mac等各个平台上。
Windows直接通过官网安装docker toolbox。
linux至少centos7版本,Docker 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求。
macOS 使用 Homebrew 来安装 Docker。
