大家好,我是IT小灵通;
下面我来全面详解下Docker容器;
大家可以留个关注,后续会给大家分享所有IT小知识。
介绍
Docker是云原生非常核心的组件,也是大厂经常考察的内容,下面我就全面来详解Docker容器
容器技术
容器是一种标准的软件单元,它将代码及其所有依赖项,打包在一起,以确保应用程序在不同计算环境中的一致性运行。
容器类似于集装箱,每个集装箱都是一个独立的单位,可以装载不同种类的货物,集装箱之间互不影响。
如下图所示:
同理,每个容器都是一个独立的运行环境,包含:应用程序、及其所有依赖项。
容器在运行时是隔离的,每个容器有自己的文件系统、网络接口....等,保证应用程序的安全性、和独立性。
并且,容器简化了应用程序的部署、和管理。
开发者可以在本地开发和测试容器,然后将其部署到生产环境中,确保应用程序在不同环境中的一致性。
Docker容器
Docker 本质就是容器技术的一种实现而已,它提供了容器的构建、分发和运行工具。
Docker 通过:Docker 镜像、和 Docker 容器,来实现应用程序的容器化。
如下图所示:
1. Docker 镜像
Docker 镜像(Docker Image):是构建、分发、和运行容器的基础。
Docker 镜像是一个只读模板,它包含了运行容器所需的所有内容。
比如,包括:代码、运行时、库、环境变量、和配置文件....等。
镜像可以通过编写一个Dockerfile文件来创建,该文件定义了如何构建镜像,例如:基础镜像、复制文件、运行命令等。
docker build
Docker 镜像,采用分层文件系统,每一层都是前一层的增量更新,这使得镜像更加高效,因为相同的层可以被多个镜像共享。
2. Docker 容器
Docker 容器:是镜像的运行实例,它是一个独立的、可执行的包,包含了:运行应用程序所需的所有内容。
每个容器,都有自己的文件系统、网络接口和进程空间。
与其他容器和宿主系统隔离,这种隔离性使得容器内的应用程序运行更加安全和独立。
这里的实现,主要会涉及到:命名空间(Namespaces)。
命名空间,是 Linux 内核的一种特性,它可以隔离不同容器的进程、网络、挂载点、UTS、IPC 和用户。
通过命名空间,容器中的进程看不到也无法影响其他容器的进程。
3. Docker 仓库
Docker 仓库:是用于存储、和分发 Docker 镜像的服务。
比如:最流行的公共 Docker 镜像仓库,提供了大量的官方镜像、和社区镜像。
如下图所示:
Docker Hub 上有大量的公共镜像,这些镜像覆盖了各种应用和服务,可以极大地简化开发、和部署过程。
例如:官方的操作系统镜像,(比如:Ubuntu)、数据库镜像(如 MySQL、PostgreSQL......等)、以及编程语言运行时镜像(如 Java、PHP、Python......)等。
三者之间的,工作流程如下:
第一步:构建(Build)
首先,通过 Dockerfile 定义镜像的构建过程,使用 docker build 命令创建镜像。
第二步:分发(Ship)
其次,将构建好的镜像,推送到镜像仓库(比如:Docker Hub 、或私有仓库),使用 docker push 命令进行分发。
第三步:运行(Run)
从镜像创建,并启动容器,使用 docker run 命令运行容器。
容器与虚拟机的区别
Docker 容器,不包含操作系统内核,而是共享宿主操作系统的内核。
而虚拟机,包含:一个独立的操作系统实例,包括:内核,所以,虚拟机就比较重。
虚拟机,适用于需要运行不同操作系统、或需要强隔离的场景。
而容器,只包含应用程序及其运行时所需的依赖项(如:代码、库文件、系统工具...等)。
容器适用于需要快速部署、高密度、和一致性环境的场景,如:微服务架构、CI/CD 流水线......等。