Docker是一个能够把开发的应用程序自动部署到容器的开源引擎,它基于Apache2.0开源授权协议发行,以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和管理员设计的,用于构建、发布和运行分布式应用的平台,其本质是宿主机上的进程,它通过namespace(Linux内核实现namespace的主要目的之一就是实现轻量级虚拟化(容器)服务)实现了资源隔离,通过cgroups实现了资源限制,通过写时复制(copy-on-write)实现了高效的文件操作。
Docker极其简洁,它所需的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制文件最小限的宿主机。
Docker的目标:
1. 提供一个简单、轻量的建模方式
2. 职责的逻辑分离: 使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器
3. 快速、高效的开发生命周期
4. 鼓励使用面向服务的架构: Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型。
Docker的组件:
1. Docker客户端和服务器
2. Docker镜像: 镜像是构建Docker世界的基石。用户基于镜像来运行自己的容器
。
3. Registry: Docker用Registry来保存用户构建的镜像。Registry分为两种: 公共(例如Docker Hub的)和私有(可以创建自己的私有的Registry,私有Registry可以收到防火墙的保护)。
4. 容器: 镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。
Docker能干什么:
1. 加速本地开发和构建流程,使其更加高效、更加轻量化。
2. 能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
3. 用Docker创建隔离的环境来进行测试。
4. Docker可以让开发者先在本机上构建一个复杂的程序或架构来进行测试,而不是一开始就在生产环境部署、测试。
5. 构建一个多用户的平台即服务(Paas)基础设施。
6. 为开发、测试提供一个轻量级的独立沙盒环境,或者将独立的沙盒环境用于技术教学。
7. 提供软件即服务(SaaS)应用程序,如Memcached即服务。
8. 高性能、超大规模的宿主机部署。
大致了解了Docker后,下面开始安装使用一下:
Linux系统下安装Docker比较方便,但是需满足如下几个条件:
1. 运行64位CPU架构的计算机,如x86_64和amd64
2. Linux内核版本大于3.8
3. Linux内核必须支持一种适合的存储驱动,如:
- Device Manager
- AUFS
- VFS
- BTRFS
- Device Mapper - 默认的存储驱动
CentOS7系统下进行安装:
1. 检查CPU位数和Linux版本,满足条件1和2:
2. 检查存储驱动,满足条件3:
如果没有出现device-mapper的信息,需要执行如下命令:sudo modprobe dm_mod来加载dm_mod模块。
3. 在CentOS7及以上版本,Docker已内置在extras源内,可以直接使用yum来进行安装
4. 查看是否安装成功了:sudo docker info
docker安装成功,使用ifconfig看一下ip信息:
发现多了一个docker0的网络接口设备,在docker启动时,docker会在宿主机器上创建一个名为docker0的虚拟网络接口,它会从RFC 1918
定义的私有地址中随机选择一个主机不用的地址和子网掩码,并将它分配给docker0。例如启动docker几分钟后它选择了172.17.0.1,一个16位的子网掩码为主机和它的容器提供了65,534个ip地址。
但docker0并不是正常的网络接口,它只是一个在绑定到这上面的其他网卡间自动转发数据包的虚拟以太网桥。它可以使容器与主机相互通信。
每次docker创建一个容器,它就会创建一对对等接口(peer interface),类似于一个管子的两端,在这边可以收到另一边发送的数据包。Docker会将对等接口中的一个做为eth0接口连接到容器上,并使用类似于vethAQI2QT这样的惟一名称来持有另一个,该名称取决于主机的命名空间。通过将所有veth*接口绑定到docker0桥接网卡上,Docker在主机和所有Docker容器间创建一个共享的虚拟子网。
5. 查看docker守护进程状态,如没启动,运行命令:sudo systemctl start docker
6. 可以看看docker的操作参数:
Docker安装好了,在下一篇,就通过docker客户端来与docker daemon进行通信,使用docker。