Docker的基本介绍
什么是Docker ?
Docker 是一种容器化技术可以共享主机内核,轻量、隔离且高效,不像虚拟机需要完整的操作系统。他的具体结构如下 
- 上层 是多个容器(App A~F),每个容器独立运行一个应用。
- 中间层 是 Docker,负责管理这些容器。
- 底层 是主机操作系统(Host OS)和基础设施,为容器提供硬件和系统支持。
容器化技术通过将应用及其依赖打包在一起来保证在任何环境下都能一致运行, 从而容器化技术具有高移植性,跨平台性, 且启动速度快。 而具体的容器包含下面三个概念
- 镜像 (Image)
定义:镜像是一个只读的模板,包含了运行应用所需的所有内容:代码、运行时、库文件、环境变量和配置文件。
特点:
- 分层存储:镜像由多个层组成,每一层代表一次修改
- 只读性:镜像本身是只读的,不能直接修改
- 镜像是构建容器的基础,每个容器实例化时都会使用镜像(同一个镜像可以创建多个容器)。
- 不同容器使用同一个镜像时,容器中的文件系统层是独立的。
- 版本管理:通过标签(tag)进行版本管理
- 出问题的时候快速回到上个版本
- 可以同时运行不同版本的image进行对比
类比理解:镜像就像是一个安装程序或者模板,它定义了应用运行所需的一切,但本身不能直接运行。
- 容器 (Container)
定义:容器是镜像的运行实例,是一个轻量级、可移植的执行环境。
特点:
- 隔离性:每个容器都有自己的文件系统、网络和进程空间
- 临时性:容器可以被创建、启动、停止、删除
- 可写层:容器在镜像基础上添加了一个可写层
- 进程级:容器内通常运行一个主进程
类比理解:如果镜像是类,那么容器就是对象实例。一个镜像可以创建多个容器,就像一个类可以创建多个对象。
- 仓库 (Repository)
定义:仓库是存储和分发镜像的地方,可以包含一个镜像的多个版本。
分类:
- 公共仓库:如 Docker Hub,任何人都可以使用
- 私有仓库:企业内部搭建,用于存储私有镜像
- 官方仓库:由软件官方维护的镜像仓库
Registry vs Repository:
- Registry:仓库注册服务器,如 Docker Hub
- Repository:具体的镜像仓库,如 nginx、mysql
Docker 架构
Docker client :Docker 客户端是用户与 Docker 守护进程交互的命令行界面(CLI),用户通过 Docker CLI 发出命令到 Docker 守护进程,由守护进程执行相应的操作。
Docker 守护进程(Docker Daemon):守护进程通常以后台进程的方式运行,等待来自 Docker 客户端的 API 请求, 执行各种命令, 负责管理容器生命周期、构建镜像、分发镜像等任务。
Docker 容器(Docker Containers):容器是 Docker 的执行环境,它是轻量级、独立且可执行的软件包。容器是从 Docker 镜像启动的,包含了运行某个应用程序所需的一切——从操作系统库到应用程序代码。容器在运行时与其他容器和宿主机共享操作系统内核,但容器之间的文件系统和进程是隔离的。
1
docker run -d ubuntu
Docker 仓库(Docker Registries):存储 Docker 镜像并且提供镜像的上传和下载功能。
1
docker push <username>/<image_name>
Docker Compose: 用于定义和运行多个容器组成的应用。用户可以使用一个 docker-compose.yml 配置文件定义多个容器(服务),并可以通过一个命令启动这些容器
1
docker-compose up
Docker Swarm:Docker 提供的集群管理和调度工具。它允许将多个 Docker 主机(节点)组织成一个集群,并通过 Swarm 集群管理工具来调度和管理容器。
Docker 网络(Docker Networks): Docker 网络允许容器之间相互通信,并与外部世界进行连接。Docker 提供了多种网络模式来满足不同的需求,如 bridge 网络(默认)、host 网络和 overlay 网络等。
Docker 卷:Docker 卷是一种数据持久化机制,允许数据在容器之间共享,并且独立于容器的生命周期。与容器文件系统不同,卷的内容不会随着容器的销毁而丢失,适用于数据库等需要持久存储的应用。
1
2
docker volume create my_volume
docker run -d -v my_volume:/data ubuntu
