docker的介绍
简介
- Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache协议开源。
- Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
应用场景
- web应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他后台应用。
- 从头编译或者扩展现有的平台环境
docker的优点
- 简化程序:Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,便可以实现虚拟化,Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。
- 避免选择恐惧症:如果你有选择恐惧症,Docker帮你打包你的纠结。比如Docker镜像;Docker镜像中包含了运行环境和配置,所以Docker可以简化部署多种应用实例工作。比如web应用、后台应用、数据库应用、大数据应用、比如hadoop集群、消息队列等等都可以打包成一个镜像部署。
- 节省开支:一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高架格的思维定式。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
docker系统架构
- Docker使用客户端-服务端(cs)架构模式,使用远程API来管理和创建Docker容器,Docker容器通过Docker镜像来创建。
- 容器与镜像的关系类似于面向对象编程中的对象与类
- 相关概念
标题 | 说明 |
---|---|
镜像(images) | Docker镜像是用于创建Docker容器的模板 |
容器(Container) | 容器是独立运行的一个或一组应用 |
客户端(Client) | Docker客户端通过命令行或者其他工具使用Docker API与Docker守护进程通信 |
主机(Host) | 一个物理或者虚拟的机器用于执行Docker守护进程和容器 |
仓库(Regisrty) | Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。DockerHub提供了庞大的镜像集合供使用。 |
Docker Machine | Docker Machine 是一个简化Docker安装的命令工具,通过一个简单的命令行即可在响应的平台上安装Docker |
相关概念
数据卷(数据持久化)
- 数据卷是一个可以提供一个或多个容器使用的特殊目录。
- 可以达到以下目的:
- 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步)
- 绕过“拷贝写”系统,有些文件不需要在docker commit 打包镜像文件,
- 在多个容器间共享目录
- 在宿主和容器间共享一个文件。
- 数据卷可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便。
- 对数据卷内容数据的修改会立马生效,无论是容器内操作还是本地操作
- 对数据卷的更新不会影响镜像,解耦开应用和数据
- 卷会一直存在,知道没有容器使用,可以安全地卸载它。
端口映射与容器互联
端口映射实现容器访问
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p参数来指定端口映射。
互联机制实现便捷互访
容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到容器,而不用指定具体的IP地址。
–name
-
容器互联
使用 --link 参数可以让容器之间安全地进行交互
docker run -d --name db mysql
docker run -d -p --name web --link db:db webapp
此时,db容器和web容器建立互联关系。
–link参数的格式为–link name:alias,其中name是要链接的容器的名称,alias是别名
Docker相当于在两个互联网的容器之间创建了一个虚拟机通道,而且不用映射他们的端口到宿主主机上。
Docker-compose
- Docker Componse是一种用于通过使用单个命令创建和启动Docker应用程序的工具。我们可以使用它来配置应用程序的服务。
- 它是开发,测试和升级环境的利器。
- 它提供以下命令来管理应用程序的整个生命周期:
- 启动,停止和重建服务
- 查看运行服务的状态
- 流式运行服务的日志输出
- 在服务上运行一次性命令
- 要实现docker compose,需要包括以下步骤
- 将应用程序环境变量放在Docker文件中以公开访问。
- 在docker-compose.yml 文件中提供配置服务名称,以便他们可以在隔离的环境中一起运行。
- 运行docker-compose ,compose将启动并运行整个应用程序。