1. docker简介
1. 什么是docker?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone的app),更重要的是容器性能开销极低。
2. 为什么用docker
1、 简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如web 应用、后台应用、数据库应用、大数据应用比如 Hadoop集群、消息队列等等都可以打包成一个镜像部署。
3、 节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式
4、持续交付和部署
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署。而且使用Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像
5、更轻松的迂移
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况
3. Docker的应用场景
web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShitt 或 Cloud Foundry 平台来搭建自己的 Paas 环境。
4. Docker架构
- Docker 使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
- Docker容器通过 Docker镜像来创建。
- 容器与镜像的关系类似于面向对象编程中的对象与类。
5. 基本概念
1、镜像(Image)
Docker 镜像是一个只读的模板,用于创建容器。它包含了运行某个应用所需的所有内容:代码、运行时、系统工具、库、环境变量和配置文件等。
特点:
分层结构:镜像由多个只读层(Layer)叠加而成,每层代表一次文件系统的变更(如安装一个软件、添加一个文件)。这种设计让镜像构建、分发和存储更加高效。
只读性:一旦创建,镜像内容不可修改。如果需要在镜像基础上做改动,会创建一个新的层,而不是直接修改原有层。
可复用:多个镜像可以共享相同的底层(如 Ubuntu 基础镜像),节省磁盘空间和网络传输时间。
类比:
可以理解为程序安装包(如 .exe 或 .dmg),但它不仅是可执行文件,还包含了整个运行环境。当你“安装”这个安装包(即运行镜像),就会得到运行的实例——容器。
2. 容器(Container)
Docker容器 容器是独立运行的一个或一组应用。容器是镜像的可运行实例,是一个轻量级、独立的执行环境。它通过给镜像添加一个可写层(容器层)来实现进程隔离和资源分配。
特点:
基于镜像启动:容器从镜像创建,运行时在镜像的只读层上加一层可写层。所有对容器的修改(如新建文件、修改配置)只影响这个可写层,不影响原镜像。
有生命周期:容器可以被创建、启动、停止、删除。停止的容器仍存在磁盘上(除非删除),数据保留在可写层;删除容器则同时删除可写层。
隔离性:容器之间、容器与宿主机之间通过 Linux Namespace 和 Cgroups 实现资源隔离和限制(如进程、网络、文件系统、CPU/内存等)。
标准化:同一份镜像在不同宿主机上启动的容器行为一致,保证“一次构建,到处运行”。
类比:
镜像是类(Class),容器就是对象(Instance)。或者更直观:镜像是光盘(只读模板),容器就是正在运行的光驱+光盘,你可以在运行中写入临时数据(但光盘本身不变)。
3. 仓库(Repository)
仓库是存储和分发 Docker 镜像的地方。一个仓库通常包含同一个应用的不同版本(通过标签 tag 区分,如 nginx:latest、nginx:1.21)。Docker 默认的公共中央仓库是 Docker Hub( https://hub.docker.com/ ),也可以搭建私有仓库(如 Harbor、Docker Registry)。
特点:
集中化存储:方便分享镜像,无需手动传输镜像文件。
标签机制:通过 name:tag 标识具体镜像版本,若不指定 tag 默认为 latest。
推送/拉取:使用 docker push 将本地镜像上传到仓库,使用 docker pull 从仓库下载镜像到本地。
公有/私有:公开仓库任何人都可拉取,私有仓库需要权限认证。
类比:
仓库相当于代码仓库(如 GitHub),镜像相当于项目代码。你可以从仓库“克隆”(pull)一个镜像到本地,修改后“推送”(push)回仓库。