1. 虚拟化技术
在说 Docker 之前先说一下虚拟化技术, 因为 Docker 的容器化技术是虚拟化的一种体现形式,因此我们要学习容器化技术之前,需要先了解一下什么是虚拟化技术。
所谓的虚拟化其实就是一种资源管理技术,是将计算机的各种实体资源进行虚拟化。
虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等,目的就是:提高我们计算机的使用率。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用。
虚拟化常用架构的有:全虚拟化架构、OS层虚拟化架构、硬件层虚拟化。
2. Docker
Docker是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker的用途
通过该技术可以快速搭建环境,比如本地测试他人的软件、持续集成的时候提供单元测试和构建的环境,也可以提供弹性的云服务以及组建微服务架构。
举个简单的例子,假设用户试图基于最常见的LAMP(Linux + Apache + MySQL + PHP)组合来运维一个网站。按照传统的做法,首先需要安装Apache,MySQL和PHP以及各自运行依赖的环境,然后可以对他们进行配置(包括创建合适的用户,配置参数等);经过这一系列操作以后,还需要进行功能测试,看一看是否能够正常工作,如果不能正常工作,则意味着更多的时间代价和不可控的风险。更麻烦的是,如果服务器需要进行迁移(比如从AWS迁移到Azure),往往需要重新部署和调试。这些重复性的工作将会降低工作效率。
而Docker提供了一种更加聪明的方式,即通过容器来打包应用,意味着迁移只需要在新的服务器上启动需要的容器就可以了。同时,也能够降低部署的风险。
Docker的优势
在开发和运维的工作中,Docker具有如下优势。
- 更快的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员也可以使用相同的环境了来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试和部署的时间。
- 更加高效的资源利用。Docker容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager,VMM,以及hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能。
- 更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化且高效的容器管理。
- 更轻松的迁移和扩展。Docker容器几乎可以在所有的平台上运行,包括物理机,虚拟机,公有云,私有云,个人电脑,服务器等。
Docker和传统虚拟机的比较
作为一种轻量级的虚拟化方式,Docker在运行应用上和传统的虚拟机方式相比具有显著优势:
- Docker 容器能够实现秒级的启动和停止,这相比传统的虚拟机要快得多。
- Docker 容器对系统资源需求量较小,一台主机可以同时运行数千个Docker容器。
- Docker 通过类似Gitde
Docker的安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到,下面的介绍都针对社区版。
Docker CE 的具体安装请参考官方文档:Docker 官方文档
安装完成后,运行下面的命令,验证是否安装成功
$ docker -v
# 或者
$ docker version
# 或者
$ docker info
如果显示 Docker 的版本,那么即是安装成功了。
dp_user@rqalnx***:/usr/sap/wwpFile> sudo docker -v
Docker version 18.09.4, build c3516c4
image文件
image 文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例,同一个 image 文件,可以生成多个同时运行的容器实例。
image 是二进制文件,实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成,举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
image和Docker的区别在于,image从顶层到底层,每一层都是只读层,即这些层不能修改编辑。而Docker的顶层则是可读可写层,即在已有的镜像基础上可以添加新的设置。
Docker的使用
Docker 的使用其实很简单,就是获取镜像(docker pull),通过镜像创建带环境的系统(docker run)。
Docker常用命令:
docker pull 获取镜像(image)
docker images 列出镜像(image)
docker rmi 删除镜像(image)
docker container ls 列出本机正在运行的容器
docker container kill containerID/NAMES 停止运行的容器
docker stop containerID/NAMES 停止运行的容器
docker run 运行container (container在docker中可以理解为装好环境的系统)
--name 自定义容器名称
-d 容器后台运行
-p 当前系统端口:容器端口 端口映射(容器内部端口映射外部)
-v 当前系统目录:容器目录 目录映射
docker ps 列出本机正在运行的容器
开启和容器交互终端(进入容器)
docker exec -i -t 通过docker ps查看的name名 /bin/bash
docker container rm containerID/NAMES 删除容器文件
至此,我们对于docker具有了初步的认识,不过这还远远不够。
在以后的章节里,我们将从镜像、容器、仓库、数据管理、网络配置、Dockerfile以及具体的实战案例进行描述。
网友评论