您现在的位置是:首页 >技术杂谈 >Docker 简介网站首页技术杂谈
Docker 简介
简介Docker 简介
文章目录
Docker 简介
1. 什么是 Docker
1. Docker 简介
- Docker 是一个开放平台,用于打包、分发与部署;粗略可以理解为一个轻量的虚拟机
- Docker 可以将应用程序与基础架构分离,以便快速交付软件
- Docker 基于 Go 语言开发实现,基于 Linux 内核,对进程进行封装隔离,属于操作系统层面的虚拟化技术
2. 打包、分发、部署
- 打包:把软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
- 分发:把安装包上传到一个镜像仓库,其他人可以非常方便的获取和安装(类似 Maven)
- 部署:使用安装包通过一个命令就可以运行应用,自动模拟出相同的运行环境,不管是在 Windows/Mac/Linux
3. Docker 优点
- Docker 容器比传统虚拟机更轻便、快捷
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程
- Docker 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟
- Docker 容器更便于开发
- 一致的运行环境:不管是在 Windows/Mac/Linux 均可使用 Docker 镜像提供除内核外完整的运行时环境;开发部署流程:开发、测试 --> 打包为 Docker 镜像 --> 各种服务器上均只需一个命令就部署好
- 更高效的利用系统资源:不需要虚拟硬件以及运行完整操作系统,应用执行速度、内存损耗或者文件存储速度,都更高效
- 更快速的启动:直接运行于宿主内核,无需启动完整的操作系统,可以做到秒级、甚至毫秒级的启动时间
- CI/CD:开发人员可以通过 Dockerfile 来进行镜像构建,并结合 CI/CD
- 更轻松的迁移、维护与扩展:Docker 确保了执行环境的一致性,使用了分层存储以及镜像的技术
4. Docker 通常用来做什么
- 本地编写代码并使用 Docker 容器,方便的共享给同事分发、部署应用
- 快速安装测试/学习软件,用完就丢(类似小程序),例如 Redis / MongoDB / ElasticSearch / ELK
- 多个版本软件共存,不污染系统,例如 Python2、Python3,Redis4.0,Redis5.0
- Windows 上体验/学习各种 Linux 系统
2. 三大组件
1. 镜像(Image)
- 打包出来的安装包,本质是文件、提供容器运行时所需的文件与配置参数的模板;它不包含任何动态数据,其内容在构建之后不会被改变
- 所需的文件包括:程序、库、资源、配置等
- 所需的配置参数包括:匿名卷、环境变量、用户等
- 分层存储:多层文件系统联合组成
- 镜像构建时,会一层层构建,前一层是后一层的基础
- 每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层
- 任何额外的东西应该在该层构建结束前清理掉
- 构建自己的镜像需要创建 Dockerfile,它的每条指令都会在镜像中创建一层
- 更改 Dockerfile 并重构镜像时,仅重建更改的那些层
2. 容器(Container)
- 镜像是静态的定义相当于类,容器是镜像运行时的实体相当于实例对象
- 容器可以被创建、启动、停止、删除、暂停
- 软件安装包安装后的状态,每个容器运行环境都是独立的、隔离的
- Docker 使用命名空间(namespaces)技术来提供容器的隔离层,容器的在单独的命名空间中运行,访问仅限于该命名空间
- 分层存储:以镜像为基础层,创建容器的存储层
- 容器存储层的生存周期和容器一样,任何保存于容器存储层的信息都会随容器死亡而丢失
- 按照 Docker 最佳实践的要求,容器存储层要保持无状态化
- 所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高
3. Registry 与 仓库(Repository)
- 一个 Docker Registry 包含多个仓库,一个仓库包含多个标签,一个标签对应一个镜像
- 一个仓库会包含同一个软件不同版本的镜像,标签就是版本,通过 <仓库名>:<标签> 的格式来指定具体软件,如果不给出标签,将以 latest 作为默认标签
- 公开的 Docker Registry 有:官方的默认 Docker Hub、Red Hat 的 Quay.io、Google 的 Google Container Registry 、GitHub 推出的 ghcr.io、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等
- 用户还可以在本地搭建私有 Docker Registry
3. Docker 架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-max6Dr5N-1684746416494)(:/af15fc98b9fa4dc594206426acef7eb0)]
- Docker 使用客户端-服务器架构
- Docker 客户端与 Docker 守护进程通信,Docker 守护进程负责构建,运行和分发 Docker 容器的繁重任
- Docker 客户端和守护程序可以在同一系统上运行,也可以在分布式系统中远程连接
- Docker 客户端和守护进程使用 REST API 通过 UNIX 套接字或网络接口进行通信
- Docker 客户端(docker)是用户与 Docker 交互的主要方式
- 使用 docker run 等 Docker API 命令时,客户端会将这些命令发送给 Docker 守护程序(dockerd)让它执行
- Docker 客户端可以与多个守护进程通信
- Docker 守护程序(dockerd)监听 Docker API 请求并管理 Docker 对象:镜像、容器、网络和数据卷
- 守护程序可以与其他守护程序通信以管理 Docker 服务
- Docker 桌面(Desktop)是一款易于安装在 Windows/Mac/Linux 的应用程序
- Docker Desktop 包括:Docker 守护进程、Docker 客户端、Docker Compose、Docker Content Trust、Kubernetes 和 Credential 助手等
4. Docker 客户端(docker)命令实例
docker pull
或docker run
命令:从配置的 Registry 中拉取所需的镜像docker push
命令:镜像将被推送到配置的 Registry
1. docker run 命令示例
- 以交互方式附加到本地命令行会话:
docker run -i -t ubuntu /bin/bash
- 如果本地没有
ubuntu
镜像,Docker 会从配置的 registry 中拉取,就像手动运行:docker pull ubuntu
- Docker 创建一个新容器,就像手动运行:
docker container create
- Docker 为容器分配一个读写文件系统,作为最终层:允许正在运行的容器在其本地文件系统中创建或修改文件和目录
- Docker 创建一个网络接口将容器连接到默认网络:为容器分配 IP 地址,容器使用主机机器的网络连接连接到外部网络
-i
和-t
标志:容器以交互方式运行并将输出记录到终端- Docker 启动容器并执行
/bin/bash
- 键入
exit
终止/bin/bash
命令时,容器将停止但不会删除
- 如果本地没有
参考:
https://docs.docker.com/get-started/overview/
https://vuepress.mirror.docker-practice.com/introduction/what/
https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。