1、什么是Docker?
Docker是有go语言开发的一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
1.1、Docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
2.1、Docker 容器虚拟化的好处
方便项目迁移,需要迁移时只需要重启容器就好,不用担心两个设备之间的环境差异。
2.2、Docker 在开发和运维中的好处
- 快速部署和交付:使用Docker 可以搭建一套标准的开发环境,开发和测试都可以模拟真实的环境进行开发和测试,以防止环境不同带来的不必要问题。同时Docker 可以快速的删除和创建,快速迭代产品,节省开发,测试,部署的时间。
- 充分高效的利用有限资源:Docker是内核级别的虚拟化,不需要额外的虚拟化程序支持,需要硬件资源更少,性能更高。
- 方便迁移和扩展:Docker几乎可以在任意平台上运行。包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性让用户可以在任意平台间相互迁移。
- 更新更加方便:使用Dockerfile 可以实现项目的自动化打包部署,并且只需要很小的简单配置,就可以完成大量的更新工作。从而实现简单高效的容器管理和自动化部署工作。
2.3、Docker 与 虚拟机的比较
优势:
- Docker 容器很快,启动和停止基本上可以在秒级实现,比传统虚拟机要快得多。
- Docker 需要的系统资源很少,基本上是MB级别,一台主机可以同时运行上千个Docker容器。
- Docker 通过类似Git的操作来方便用户获取、分发、更新用户镜像,指令简明,学习成本低。
- Docker 可以通过Dockerfile配置文件可以灵活的自动化常见、部署应用,提高工作效率
缺点:
- 隔离性不如虚拟机:传统虚拟机多了一层额外的隔离,是完全隔离的。Docker则利用Linux上的多种防护机制实现的安全隔离,从Dokcer 1.3 版本开始,Dokcer引入了安全选项和镜像签名机制,极大的提高了使用Docker的安全行。
2.4、Docker 容器技术与传统虚拟机技术的特性比较
3、虚拟化与Docker
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。
虚拟化的核心是对资源进行抽象,目标是为了在同一主机上运行多个系统或应用,从而提高资源的利用率、降低成本、方便管理和容错容灾等好处。
3.1、虚拟化分类
- 基于硬件虚拟化:不多见,如少数网卡中的单根多IO虚拟化等技术。
- 基于软件虚拟化:分为应用虚拟化(一般是一些模拟设备或wine这样的软件)和平台虚拟化(如虚拟机技术)
3.2、平台虚拟化
- 完全虚拟化:虚拟机模拟完成的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。如VMware Workstation、VirtualBox等虚拟机。
- 硬件辅助虚拟化:利用硬件(主要是CPU)辅助支持(目前X86体系结构上可用的硬件辅助虚拟化技术包括I'ntel-VT和AMD-V)处理敏感指令来实现完全虚拟化的功能。客户操作系统无需进行修改。如:VMware Workstation 、Xen、KVM等。
- 部分虚拟化:只针对部分硬件资源进行虚拟化,客户操作系统需要修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化。
- 超虚拟化:部分硬件接口以软件的形式提供给客户机操作系统。客户操作系统需要进行修改,如早期的Xen
- 操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器技术就是这个层次的虚拟化技术。
Docker和常见的虚拟机虚拟化技术的的区别:
- 传统方式是在硬件层面的虚拟化,需要额外的虚拟管理应用和虚拟机操作系统层
- Docker 是在操作系统层面上的虚拟化,直接服用宿主的操作系统,因此更加轻量级。
4、Docker 几个重要概念
-
Docker 镜像:类似于虚拟机镜像,可以理解为一个面向Docker 引擎的只读模板,包含了文件系统。
-
Docker 容器:类似与一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。可以把容器看作是一个简单的Linux环境。镜像是只读的,容器从镜像启动的时候,Docker会在容器的最上层创建一个可写层,镜像本身保持不变。
-
Docker 仓库:类似于代码仓库,是Docker集中存放镜像文件的场所。
5、Docker 安装
CentOS 7 中 Docker 的安装
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:
- [root@localhost ~]# yum install docker
启动 Docker 服务
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
- [root@localhost ~]# service docker start
- [root@localhost ~]# chkconfig docker on
(LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
- [root@localhost ~]# systemctl start docker.service
- [root@localhost ~]# systemctl enable docker.service
)
下载官方的 CentOS 镜像到本地
-
[root@localhost ~]# docker pull centos
-
Pulling repository centos
-
192178b11d36:Download complete
-
70441cac1ed5:Download complete
-
ae0c2d0bdc10:Download complete
-
511136ea3c5a:Download complete
-
5b12ef8fd570:Download complete
确认 CentOS 镜像已经被获取:
-
[root@localhost ~]# docker images centos
-
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
-
centos centos5 192178b11d362 weeks ago 466.9 MB
-
centos centos6 70441cac1ed52 weeks ago 215.8 MB
-
centos centos7 ae0c2d0bdc10 2 weeks ago 224 MB
-
centos latest ae0c2d0bdc10 2 weeks ago 224 MB
运行一个 Docker 容器:
-
[root@localhost ~]# docker run -i -t centos /bin/bash
-
[root@dbf66395436d /]#
我们可以看到,CentOS 容器已经被启动,并且我们得到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。若要断开与容器的连接,输入 exit。
-
[root@cd05639b3f5c /]# cat /etc/RedHat-release
-
CentOSLinux release 7.0.1406(Core)
-
[root@cd05639b3f5c /]#exit
-
exit
-
[root@localhost ~]#
我们还可以搜索基于 Fedora 和 Ubuntu 操作系统的容器。
-
[root@localhost ~]# docker search ubuntu
-
[root@localhost ~]# docker search fedora
显示当前正在运行容器的列表
[
root@localhost
~]# docker ps 或 docker ps -a // 显示所有