Docker专题学习之相关概述
前言
其实第一次听说Docker还是好几年前,但是一直满足于当前的技术栈,无法突破自己的舒适圈,导致技术栈有些落后。今天正式开启一个新的专题学习,Docker容器技术~
什么是容器技术?
容器技术是一种虚拟化技术,旨在简化应用程序的部署、运行和扩展。容器将应用程序及其依赖项、运行时环境和系统库打包在一起,形成一个独立、可移植的运行单元。这种打包使应用程序在不同的环境中能够以相同的方式运行,无论是在开发者的笔记本电脑、测试服务器还是生产环境。
容器技术的主要组成部分包括以下几个方面:
-
容器引擎(Container Engine): 负责在主机上创建和运行容器的运行时环境。Docker 是目前最为流行的容器引擎之一,其他还有 containerd、Podman 等。
-
容器镜像(Container Image): 容器的基础,是一个轻量、可执行的软件包,包含应用程序、运行时环境、系统库等。容器通过这些镜像启动和运行。
-
容器编排工具(Container Orchestration): 用于自动化、管理和编排大规模容器化应用程序的工具。Kubernetes 是目前最流行的容器编排工具之一,它可以自动部署、扩展和管理容器化应用。
容器技术的优势包括:
-
轻量级: 与传统的虚拟机相比,容器更加轻量,因为它们共享主机操作系统的内核,而不需要每个容器都运行一个完整的操作系统。
-
快速启动: 容器可以在几秒内启动,使得应用程序可以更迅速地部署和扩展。
-
一致性: 由于容器包含了应用程序及其所有依赖项,因此可以确保在不同环境中具有相同的运行方式,减少了“在我的机器上可以运行”的问题。
-
易于管理: 容器可以在各种环境中进行移植,而无需担心环境的不同。容器编排工具进一步简化了应用程序的管理和部署。
什么是Docker?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker如何工作
Docker 是一种开源的容器化平台,用于构建、分享和运行容器。以下是 Docker 的工作流程的三个主要阶段:
- 构建(Build):
在构建阶段,开发者使用 Docker 工具构建容器镜像。容器镜像是包含应用程序、运行时环境和依赖项的打包文件。构建过程通常包括以下步骤:
-
编写 Dockerfile: Dockerfile 是一个文本文件,其中包含构建容器镜像所需的指令。这些指令描述了从基础镜像(Base Image)开始,逐步添加应用程序和依赖项的步骤。
-
执行 Docker Build: 开发者在包含 Dockerfile 的目录中运行 docker build 命令,Docker 根据 Dockerfile 中的指令自动构建容器镜像。
-
生成容器镜像: 构建成功后,生成一个可执行的容器镜像,该镜像包含了应用程序及其运行时所需的一切。
- 分享(Share):
构建完成后,容器镜像可以分享给其他开发者或部署到不同的环境中。分享容器镜像的主要方式是通过 Docker Hub 或其他容器镜像仓库。
-
推送到仓库: 开发者使用 docker push 命令将构建好的容器镜像推送到容器镜像仓库。Docker Hub 是一个常用的公共仓库,也可以使用私有仓库。
-
拉取镜像: 其他开发者或系统管理员可以使用 docker pull 命令从仓库中拉取已构建好的容器镜像。
- 运行(Run):
在运行阶段,容器镜像被实例化成为容器,并在宿主系统上运行。运行容器的主要步骤包括:
-
执行 Docker Run: 使用 docker run 命令启动容器。此命令可以包含一系列选项,例如端口映射、环境变量设置等。
-
容器启动: Docker 根据容器镜像创建一个运行中的容器实例。容器拥有自己的文件系统、进程空间和网络接口,但与宿主系统共享内核。
-
应用程序运行: 容器启动后,其中的应用程序开始在隔离的环境中运行,与宿主系统和其他容器相互隔离。
Docker 的这三个阶段使得应用程序的构建、分享和运行变得更加便捷、可重复和一致。容器技术的优势在于提供了一种轻量级、可移植的部署方式,使得应用程序能够更容易地在不同环境中运行。
Docker 架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
以下是Docker架构图:
Docker解决了什么问题
-
解决了环境配置难题。相信很多开发人员都被需要配置多套环境配置而烦恼(以我为例:jdk、mysql、redis、nginx等,想想就让人头大。🤯)
-
限定最大的cpu使用内存硬盘。这样就起到了隔离的作用,避免产生一块代码产生死循环,把磁盘占满了,其它程序也挂了的情况。
-
提供弹性的云服务。docker的标准化让快速扩展,弹性伸缩变得简单。