diff --git a/Tech/operating-system/Docker/基础/基础概念.md b/Tech/operating-system/Docker/基础/基础概念.md new file mode 100644 index 00000000..9c20989d --- /dev/null +++ b/Tech/operating-system/Docker/基础/基础概念.md @@ -0,0 +1,38 @@ +--- +title: 基础概念 +description: Docker 的基础概念 +keywords: + - Docker + - 基础概念 +tags: + - Docker/基础 +author: 仲平 +date: 2024-02-20 +--- + +Docker 是一个开源的容器化平台,它允许开发者打包应用及其依赖到一个可移植的容器中,然后在任何支持 Docker 的系统上运行这个容器。容器化技术使得应用从环境配置中解脱出来,增强了应用的可移植性、效率和安全性。 + +## Docker 核心概念 + +- **容器(Containers)**:容器是 Docker 的核心,可以被理解为一个轻量级、可执行的软件包,包含了运行某个应用所需的全部内容——代码、运行时环境、库、环境变量和配置文件等。你可以把容器想象成一个独立的小型计算机,它在一个隔离的环境中运行应用。 +- **镜像(Images)**:镜像是创建 Docker 容器的模板。镜像是静态的,包含了运行应用所需的代码、库、环境变量和配置文件。可以把镜像想象成容器的“蓝图”。创建容器时,Docker 会从镜像中读取这些信息。 +- **仓库(Repositories)**:仓库是集中存放镜像的地方。Docker Hub 是最著名的公共仓库,但用户也可以创建私有仓库来存储和管理自己的镜像。 +- **Dockerfile**:Dockerfile 是一个文本文件,包含了一系列的指令和参数,用于自动化构建 Docker 镜像的过程。通过编写 Dockerfile,开发者可以定义如何构建镜像,包括添加文件、运行命令和配置环境等。 +- **Docker Compose**:Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件,你可以配置应用服务所需的所有容器,然后使用一个命令同时创建和启动所有这些容器。 + +## Docker 工作原理 + +Docker 使用容器来运行应用,容器运行在 Docker 引擎之上。Docker 引擎负责管理容器的生命周期,包括容器的创建、启动、停止、移动和删除。容器与虚拟机相比,占用的资源更少,启动更快,因为容器共享宿主机的内核,而不需要模拟整个操作系统。 + +![](https://static.7wate.com/2024/02/20/3dff18d6e840374447cb5b2a1bfab3e4-docker-workflow.gif) + +## Docker 设计架构 + +**Docker 的架构主要基于客户端 - 服务器(Client-Server)模型**,涉及几个关键组件:Docker 客户端、Docker 服务器(也称为守护进程)、Docker 镜像、容器、仓库等。 + +- **Docker 客户端(Client)**:Docker 客户端是用户与 Docker 交互的主要方式。用户通过运行 Docker 客户端命令来告诉 Docker 守护进程需要做什么。例如,构建镜像、运行容器、停止容器等操作都是通过客户端发起的。 +- **Docker 服务器(守护进程,Daemon)**:Docker 守护进程运行在宿主机上,处理客户端发来的请求,如创建、运行、监控容器,构建和存储镜像等。守护进程与其他 Docker 守护进程通信,管理 Docker 服务。 + +Docker 客户端和守护进程可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。 Docker 客户端和守护进程使用 REST API 通过 UNIX 套接字或网络接口进行通信。 + +![](https://static.7wate.com/2024/02/20/e41a6be58cc8343414a8632c578ab2cc-docker-architecture.webp) diff --git a/Tech/operating-system/Docker/基础/安装配置.md b/Tech/operating-system/Docker/基础/安装配置.md new file mode 100644 index 00000000..631716b2 --- /dev/null +++ b/Tech/operating-system/Docker/基础/安装配置.md @@ -0,0 +1,75 @@ +--- +title: 安装配置 +description: Docker 的安装配置 +keywords: + - Docker + - 安装配置 +tags: + - Docker/基础 +author: 仲平 +date: 2024-02-20 +--- + +## 官方手册 + +- Get Docker:https://docs.docker.com/get-docker/ + +## 安装脚本 + +### 正式版本 + +```shell +curl -fsSL https://get.docker.com -o get-docker.sh +sh get-docker.sh +``` + +### 测试版本 + +```shell +curl -fsSL https://test.docker.com -o test-docker.sh +sh test-docker.sh +``` + +## 启动测试 + +```shell +# 默认启动 +sudo systemctl enable docker +sudo systemctl start docker + +# 验证是否正确安装 +docker run --rm hello-world +``` + +## 镜像加速 + +国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内各大云服务商(腾讯云、阿里云、百度云)均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。 + +请首先执行以下命令,查看是否在 `docker.service` 文件中配置过镜像地址。 + +``` +$ systemctl cat docker | grep '\-\-registry\-mirror' +``` + +如果该命令有输出,那么请执行 `$ systemctl cat docker` 查看 `ExecStart=` 出现的位置,修改对应的文件内容去掉 `--registry-mirror` 参数及其值,并按接下来的步骤进行配置。 + +如果以上命令没有任何输出,那么就可以在 `/etc/docker/daemon.json` 中写入如下内容(如果文件不存在请新建该文件): + +```json +{ + "registry-mirrors": [ + "https://hub-mirror.c.163.com", + "https://mirror.baidubce.com" + ] +} +``` + +> 注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。 + +最后重新启动服务。 + +```shell +sudo systemctl daemon-reload + +sudo systemctl restart docker +``` diff --git a/Tech/operating-system/Docker/基础/简介.md b/Tech/operating-system/Docker/基础/简介.md new file mode 100644 index 00000000..24501f8b --- /dev/null +++ b/Tech/operating-system/Docker/基础/简介.md @@ -0,0 +1,83 @@ +--- +title: 简介 +description: Docker 的基础简介 +keywords: + - Docker + - 简介 +tags: + - Docker/基础 +author: 仲平 +date: 2024-02-20 +--- + +## 概述 + +Docker 是一种开源的容器化技术,它允许开发者将应用及其运行环境打包在一个轻量级、可移植的容器中。这个容器可以在任何支持 Docker 的系统上运行,确保了应用在不同环境之间的一致性。可以把 Docker 容器看作是一个简化版的虚拟机,但与传统的虚拟机相比,它更为轻量和高效,因为**容器直接运行在宿主机的操作系统内核上**,而不需要额外的操作系统层。 + +想象一下,如果你是一位厨师,Docker 就像是你的食材和调料被一起打包在一个便携式的盒子里。无论你去到哪个厨房(服务器),只要那里有 Docker(相当于一个标准的炉子),你就能够使用那个盒子里的东西(应用和环境)来准备你的菜肴(运行你的应用)。 + +我们还可以把 Docker 想象成一种创新的快递服务。它不仅提供了一个标准化的包裹盒(容器),而且还确保了无论包裹被送到哪里(无论是开发、测试还是生产环境),里面的物品(应用和环境)都能够完好无损地到达。 + +## 历史 + +![](https://static.7wate.com/2024/02/20/3427dbb6bfbf5b14c54971102ffc382d-Docker%20History.svg) + +**2013 年:Docker 的诞生** + +Docker 最初是由 Solomon Hykes 在 dotCloud 公司(后来改名为 Docker Inc.)开发的一个内部项目,旨在简化应用的部署过程。它基于 Linux 容器(LXC)技术,并在 2013 年 3 月以开源项目的形式发布。 + +**2014 年:Docker 1.0 发布** + +Docker 迅速获得开发者社区的关注和支持。2014 年 6 月,Docker 1.0 正式发布,标志着 Docker 成为生产环境准备就绪的技术。 + +**2015 年:Docker Compose 和 Docker Swarm 的推出** + +随着 Docker 的普及,用户开始寻求更好的工具来管理多个容器。Docker Compose 作为定义和运行多容器 Docker 应用的工具在 2015 年初推出。同年,Docker Swarm 也被引入作为 Docker 的原生集群管理工具。 + +**2016 年:Docker 成为 Moby 项目** + +2016 年,Docker Inc.宣布将 Docker 核心分割为多个独立的组件,核心 Docker 平台被重命名为 Moby Project。这一变化旨在促进社区贡献,并提高项目的模块化。 + +**2017 年:Docker 宣布支持 Kubernetes** + +随着 Kubernetes 成为容器编排领域的领导者,Docker Inc.在 2017 年宣布原生支持 Kubernetes,允许用户在 Docker 平台上直接使用 Kubernetes 进行容器编排。 + +**2019 年:Docker 企业业务被 Mirantis 收购** + +2019 年 11 月,Docker Inc.宣布将其企业业务出售给云计算公司 Mirantis,同时 Docker Inc.将专注于发展 Docker Desktop 和 Docker Hub。 + +**2020 年及以后:Docker 的持续发展** + +即使在企业业务被出售后,Docker 仍然是开发和运行容器化应用最流行的平台之一。Docker 继续推出新版本,增加新特性,并优化用户体验。同时,社区和生态系统也在不断壮大,为 Docker 的未来发展提供了坚实的基础。 + +Docker 的发展历史体现了容器技术在软件开发和部署中的革命性变化。从一个小型内部项目到成为全球广泛采用的开源平台,Docker 不仅改变了我们构建和部署应用的方式,也促进了 DevOps 文化和微服务架构的发展。 + +## 优势 + +Docker 提供了许多优势,包括但不限于: + +1. **一致性和可移植性**:无论开发者的本地机器使用什么操作系统,Docker 容器都能确保应用可以在任何支持 Docker 的环境中以相同的方式运行。 +2. **快速部署**:由于容器不需要启动一个完整的操作系统,它们可以在几秒钟内启动和停止,这大大加快了部署和扩展应用的速度。 +3. **资源高效**:容器共享宿主机的核心,不需要额外的操作系统负担,这使得它们比虚拟机更加资源高效。 +4. **隔离**:每个容器都在自己的环境中运行,与其他容器隔离。这提高了安全性,因为它防止了应用之间的干扰。 + +## 应用场景 + +Docker 可以用于多种场景,包括: + +- **开发环境的一致性**:确保开发、测试和生产环境完全一致,减少了“在我这里运行得好好的”问题。 +- **微服务架构**:每个微服务运行在自己的容器中,便于管理和扩展。 +- **持续集成/持续部署(CI/CD)**:Docker 容器可以用于自动化测试和生产部署,提高软件交付的速度和质量。 +- **应用的快速部署和扩展**:在云平台和虚拟化环境中快速部署和扩展应用。 + +## 同类产品对比 + +| 特性/产品 | Docker | Kubernetes | Podman | +| -------------- | -------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| **定义** | 开源容器化平台,允许开发者打包、分发和运行应用。 | 开源的容器编排平台,用于自动化容器的部署、扩展和管理。 | 开源容器化工具,允许开发者构建、运行和管理容器和容器镜像。 | +| **设计目标** | 简化应用的打包和部署流程。 | 在集群中自动化部署、扩展和操作容器化的应用程序。 | 提供一个与 Docker 兼容的命令行界面,但不依赖于守护进程,更加注重安全性。 | +| **运行环境** | 单机或 Swarm 模式下的多机环境。 | 集群环境,可以跨多个主机运行容器。 | 单机,支持通过 Podman 或 Kubernetes 进行编排。 | +| **安全性** | 通过 Docker 守护进程运行,需要考虑守护进程的安全性。 | 设计用于多租户场景,提供严格的安全策略。 | 不需要守护进程,每个容器都是在用户空间中作为独立进程运行,提供更高的安全性。 | +| **使用场景** | 开发、测试和生产环境中的应用容器化和微服务架构。 | 大规模容器管理和自动化部署、管理和扩展容器化应用。 | 适用于希望避免使用守护进程或寻求更高安全性的开发者和系统管理员。 | +| **社区和生态** | 庞大的社区支持和丰富的容器镜像库。 | 强大的社区支持,是云原生计算基金会(CNCF)的一部分,拥有广泛的生态系统。 | 正在快速增长的社区,与 Docker 镜像和容器生态系统兼容。 | +| **主要优势** | 用户友好的界面和命令行工具,广泛的采用和支持。 | 强大的容器编排和管理能力,适合大规模部署。 | 更适合安全敏感的环境,无需守护进程,支持 rootless 运行。 |