Docker
快速了解
1 情景引入:
当你写了个web应用想发给同学看,那他就要运行该web应用的相关环境,再去下载麻烦,部署到服务器上也需要服务器有同样的环境。
可能会想到虚拟机,模拟虚拟操作系统,在上面安装环境,但是他是模拟硬件设备,需要把电脑硬件资源分配出来,虚拟出来的是一个完整电脑。
而Docker是更加轻量级的可以将web应用,和相关配置好,打包成一个包(Docker镜像),服务器上下载Docker,直接拉取打包好的镜像,直接run(容器)就行。
2 定义:
Docker 是一种开源的容器化平台,用于开发、交付和运行应用程序。通过 Docker,开发人员可以将应用程序及其依赖项打包到一个称为容器的标准化单元中,然后将这些容器部署到任何支持 Docker 的环境中,无论是开发人员的笔记本电脑、数据中心的服务器,还是云服务提供商的虚拟机中。
Docker 的核心思想是使用容器来封装应用程序及其所有运行时环境和依赖项,从而实现跨平台、跨环境的一致性。容器化技术使得开发、测试和部署应用程序变得更加简单、高效和可靠,同时提供了更好的资源利用率和更快的部署速度。
3 三个重要概念:
image/镜像
虚拟机快照,包含运行应用所需所有内容,由Dockerfile定义构建,可以创建多个容器
Dockerfile
一个文本文件,包含一系列指令和配置,用于创建镜像。通过执行Dockerfile中指令,可以自动化构建镜像,从而简化了镜像的创建和管理过程
容器
由镜像创建的运行实例,包含应用程序及依赖项,在一个隔离环境运行,容器可以启动删除停止暂停,使得部署管理更加灵活和简单。
4 常用命令
-
docker build
: 根据 Dockerfile 构建镜像。 -
docker run
: 运行容器。 -
docker pull
: 从 Docker 仓库中拉取镜像。 -
docker push
: 将镜像推送到 Docker 仓库。 -
docker images
: 列出本地所有的镜像。 -
docker ps
: 列出正在运行的容器。 -
docker ps -a
: 列出所有的容器,包括停止的容器。 -
docker stop
: 停止容器。 -
docker start
: 启动已停止的容器。 -
docker rm
: 删除容器。 -
docker rmi
: 删除镜像。 -
docker exec
: 在运行的容器中执行命令。 -
docker logs
: 查看容器的日志。 -
docker inspect
: 查看容器或镜像的详细信息。 -
docker-compose
: 使用 Docker Compose 管理多个容器的应用程序。
再了解
-
官方定义
- Docker 是一个开源的容器化平台,它使用容器来打包、分发和运行应用程序。容器是一种轻量级、独立的运行环境,包含了应用程序及其所有的依赖项,如库、配置文件、环境变量等,使得应用程序可以在不同的计算环境中快速、一致地运行。
-
主要特点
- 轻量级:容器相比于传统的虚拟机更加轻量级。容器共享宿主操作系统的内核,只需要将应用程序和相关依赖打包成一个独立的容器镜像,而不需要像虚拟机那样模拟整个操作系统,因此容器启动速度快,占用资源少。
- 隔离性:每个容器在运行时都与其他容器和宿主系统相互隔离,具有自己独立的文件系统、进程空间、网络接口等。这种隔离性可以保证容器内的应用程序不受其他容器或宿主系统的干扰,同时也提高了应用程序的安全性。
- 可移植性:容器可以将应用程序及其依赖打包成一个镜像,这个镜像可以在任何支持 Docker 的环境中运行,无论是在开发环境、测试环境还是生产环境。这使得应用程序的部署更加方便,能够快速地在不同的云平台、服务器或本地环境中进行迁移和部署。
- 版本控制方便:Docker 镜像可以通过版本标签进行管理,就像代码仓库中的代码版本管理一样。可以方便地对不同版本的应用程序镜像进行存储、分发和回滚,便于应用程序的升级和维护。
-
主要用途及作用
- 应用开发与测试:开发人员可以在本地使用 Docker 容器创建一个与生产环境高度相似的开发和测试环境。这样可以避免因为开发环境、测试环境和生产环境的差异而导致的 "在我机器上可以运行" 的问题,提高开发效率和软件质量。
- 应用部署:在部署应用程序时,将应用和其依赖打包成 Docker 容器,可以确保应用在不同的服务器上以相同的方式运行。可以快速地在云服务器、物理服务器等多种基础设施上部署应用,并且可以方便地进行扩展和收缩。
- 微服务架构:在微服务架构中,每个微服务可以被打包成一个独立的 Docker 容器。这些容器可以独立地进行开发、部署、扩展和升级,使得微服务之间的耦合度更低,便于团队协作和系统的维护。
-
主要原理
- 镜像与容器:Docker 的核心是镜像(Image)和容器(Container)。镜像是一个只读的模板,包含了运行应用程序所需的所有文件和配置信息。容器是镜像的运行实例,当启动一个容器时,Docker 会在镜像的基础上创建一个可写的文件系统层,用于存储容器运行过程中的数据变化。
- 分层存储:Docker 镜像是通过分层存储的方式构建的。每一层都包含了对文件系统的修改,例如安装软件包、添加配置文件等。这种分层存储的方式使得镜像的构建和共享更加高效。当拉取或推送镜像时,只需要传输发生变化的层,而不是整个镜像。
- 命名空间和控制组:Docker 利用 Linux 的命名空间(Namespace)技术来实现容器的隔离。例如,通过 PID 命名空间实现进程隔离,通过网络命名空间实现网络隔离等。同时,通过控制组(Cgroup)来限制容器对资源(如 CPU、内存、I/O 等)的使用,确保容器之间不会相互干扰。
-
主要流程
- 构建镜像 :通过编写 Dockerfile 来定义镜像的内容。Dockerfile 是一个文本文件,包含了一系列指令,如基础镜像的选择、软件包的安装、文件的复制、环境变量的设置等。使用
docker build
命令根据 Dockerfile 构建镜像。 - 拉取或推送镜像 :可以从 Docker Registry(如 Docker Hub 或企业内部的私有仓库)拉取已有的镜像,也可以将自己构建的镜像推送到仓库中。通过
docker pull
和docker push
命令来完成这些操作。 - 运行容器 :使用
docker run
命令来启动容器。在运行容器时,可以指定容器的名称、端口映射、挂载卷、环境变量等参数。容器启动后,就可以在容器内运行应用程序了。 - 容器管理 :可以使用
docker ps
命令查看正在运行的容器,使用docker stop
和docker start
命令来停止和启动容器,使用docker rm
命令来删除容器等。
- 构建镜像 :通过编写 Dockerfile 来定义镜像的内容。Dockerfile 是一个文本文件,包含了一系列指令,如基础镜像的选择、软件包的安装、文件的复制、环境变量的设置等。使用
-
与主流技术的相似性和区别
- 与虚拟机(VM)技术相似点和区别
- 相似点:都可以提供隔离的运行环境,使得应用程序可以在独立的环境中运行,不受其他应用程序或系统的干扰。
- 区别:虚拟机需要模拟整个操作系统,包括内核,因此比较 "重量级",启动速度慢,占用资源多。而 Docker 容器共享宿主操作系统的内核,更加轻量级,启动速度快,占用资源少。并且,虚拟机的迁移相对复杂,而 Docker 容器的可移植性更强。
- 与传统的软件安装和部署方式相似点和区别
- 相似点:都是为了将应用程序安装到服务器或本地环境中,使其能够正常运行。
- 区别:传统的软件安装和部署方式需要在目标环境中手动安装软件的依赖项,容易出现依赖冲突和环境不一致的问题。而 Docker 将应用程序和其依赖打包成一个整体,通过容器运行,保证了环境的一致性,避免了依赖冲突。
- 与虚拟机(VM)技术相似点和区别