目录
一、什么是Docker
Docker是一种开源的容器化平台,用于将应用程序及其依赖项打包成一个可移植的容器。Docker的主要目标是简化应用程序的部署和管理,并提供更高的灵活性、可移植性和可重复性。
Docker的一些关键概念和特点:
-
容器: Docker容器是一个独立运行的执行单元,包含应用程序和其依赖项。容器是轻量级的,由Docker引擎负责管理其生命周期。容器是镜像的运行实例,容器包括了运行应用程序所需的所有内容,以及一个独立的文件系统。容器是动态的,可以启动、停止、删除,并且可以在不同的环境中移植。
-
镜像: 镜像是用于创建Docker容器的模板。它包含了一个应用程序运行所需的所有文件、代码、库和依赖项。镜像是不可变的,一旦创建就不能被修改。容器是通过镜像来启动和运行的。镜像是不可变的,一旦创建就不能被修改。任何对镜像的修改都会生成一个新的镜像。镜像是静态的,通常被认为是应用程序的“打包”形式,类似于虚拟机中的镜像。
-
Docker引擎: Docker引擎是Docker的核心组件,负责管理容器的创建、运行和停止。它还提供了一组命令行工具和API,用于与Docker进行交互。
-
容器编排(Docker Compose、K8s): Docker Compose是一个工具,允许定义和运行多个Docker容器的配置。通过一个简单的YAML文件,可以定义应用程序的各个组件、服务和它们之间的关系。
-
仓库(Docker Hub): Docker Hub是一个用于存储和共享Docker镜像的公共仓库。开发者可以在Docker Hub上找到各种各样的官方和社区创建的镜像,也可以将自己的镜像上传到这个平台。
使用Docker的好处包括:
-
环境一致性: 通过容器化,开发和生产环境可以保持一致,减少了“在我的机器上可以运行”的问题。
-
轻量级: 容器相对于虚拟机更轻量,启动速度更快,占用更少的资源。
-
可移植性: Docker容器可以在任何支持Docker的环境中运行,无论是开发者的笔记本、测试服务器还是生产环境。
-
易于部署和扩展: Docker简化了应用程序的部署过程,并支持横向扩展,使应用程序可以更容易地适应不同的负载。
二、Docker和虚拟机技术的不同
-
虚拟化层次:
- Docker: 使用容器虚拟化技术,容器直接运行在宿主操作系统的内核上。容器共享主机操作系统的内核,并在其上添加一个额外的用户空间。这使得容器更为轻量,启动更快。
- 虚拟机: 使用全虚拟化或半虚拟化技术,虚拟机在宿主操作系统上运行一个完整的操作系统(称为Guest OS),通过Hypervisor进行管理。全虚拟化会模拟硬件,而半虚拟化需要对Guest OS进行修改以提高性能。
-
资源占用和性能:
- Docker: 容器共享主机的内核,减少了资源开销,因此更为轻量,启动更快。容器的性能较接近于宿主系统。
- 虚拟机: 虚拟机需要独立的Guest OS,因此占用更多的资源,启动时间较慢。虚拟机性能相对于容器有更多的开销。
-
隔离性:
- Docker: 容器在同一主机上共享操作系统内核,但使用Linux命名空间和控制组(cgroups)等技术提供一定程度的隔离性。容器之间能够共享一些系统资源。
- 虚拟机: 虚拟机在Hypervisor上运行,具有更强的隔离性,因为它们运行在独立的Guest OS中,相互之间不共享内核。
-
镜像和部署:
- Docker: 镜像是轻量、可重复且易于分享的。Docker容器的部署更加简单,可以在几秒钟内完成。
- 虚拟机: 虚拟机镜像较为庞大,部署相对较慢,通常需要几分钟。
简而言之,传统虚拟机,需要虚拟各种硬件,来运行一个完整的操作系统,然后在这个虚拟出来的系统上安装和运行软件。而容器内的应用直接运行在宿主机上,容器并没有自己的内核,也没有虚拟的硬件,所以更轻便。
三、Docker的安装
Docker官方文档:在 Linux 上安装 Docker Desktop |Docker 文档https://docs.docker.com/desktop/install/linux-install/
我使用的环境是Ubuntu20.04.6 LTS
-
更新包列表:
sudo apt update
-
安装Docker依赖: 安装Docker所需的一些软件包,包括使用HTTPS传输的软件包以及CA证书:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
-
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
设置稳定版本的Docker存储库:
下载并添加Docker官方的GPG密钥,以验证软件包的完整性:
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
安装Docker Engine: 更新软件包列表,并安装Docker Engine:
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io
-
启动Docker服务: 安装完成后,启动Docker服务:
sudo systemctl start docker
将Docker设置为开机自启动:
sudo systemctl enable docker
-
验证安装是否成功:
sudo docker --version
这将显示已安装的Docker版本信息。
-
Docker!启动!
sudo docker run hello-world
请注意,上述步骤中的一些命令可能需要使用
sudo
进行管理员权限。在安装docker时许多系统通常会自动创建一个名为docker的用户组,这个组用于管理Docker的访问权限,以便允许特定用户执行Docker命令而无需使用sudo。将当前用户添加到docker组:sudo usermod -aG docker $USER
四、Docker仓库镜像加速
因为某些原因,从Docker仓库拉取镜像时会非常慢,需要在云服务器上进行配置。
我使用的是华为云服务器,华为云的官方文档:设置镜像加速器_容器镜像服务 SWR_用户指南_镜像管理_华为云 (huaweicloud.com)https://support.huaweicloud.com/usermanual-swr/swr_01_0045.html
- 以root用户登录容器引擎所在的虚拟机。
- 修改“/etc/docker/daemon.json”文件(如果没有,可以手动创建),在该文件内添加如下内容:
vi /etc/docker/daemon.json
{ "registry-mirrors": ["加速器地址"] }
- 配置完成后,执行systemctl restart docker重启容器引擎。
- 执行docker info,当Registry Mirrors字段的地址为加速器的地址时,说明加速器已经配置成功。
五、Docker运行流程以及原理
run的运行流程图
Docker是如何工作的:
首先要了解的是:
Docker 是一种容器化平台,它使用客户端-服务器(Client-Server,CS)架构。Docker 采用了分布式的设计,其中客户端和服务器可以运行在同一台主机上,也可以分布在不同的主机上。用户通过 Docker 客户端与 Docker 服务器进行通信,从而管理容器的创建、运行和部署。
在 Docker 中:
Docker Daemon(守护进程): 这是运行在服务器上的后台进程,负责管理容器的创建、运行和停止等操作。Docker Daemon是 Docker 引擎的服务器组件。
Docker 客户端: 这是用户与 Docker 引擎交互的接口,可以是命令行工具或图形用户界面。Docker 客户端是客户端部分,用于向服务器发送指令。
-
连接到 Docker 引擎: 用户通过使用 Docker 客户端的命令行工具连接到 Docker 引擎。
docker version
上述命令通常用于检查 Docker 客户端与 Docker 引擎的连接是否正常。
-
获取 Docker 镜像: 用户可以从 Docker Hub 或其他 Docker 镜像仓库中获取容器镜像。
-
运行 Docker 容器: 通过
docker run
命令,用户可以启动一个容器实例。