Docker基础篇之入门使用

文章目录

    • [1. Docker的基本组成](#1. Docker的基本组成)
    • [2. Docker平台架构](#2. Docker平台架构)
    • [3. 阿里云镜像加速](#3. 阿里云镜像加速)
    • [4. Docker的Hello World入门案例](#4. Docker的Hello World入门案例)
    • [5. 总结](#5. 总结)

1. Docker的基本组成

Docker的基本组成主要是有四部分,分别是镜像、容器和仓库。

  • 镜像:Docker镜像就是一个只读的模版,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统,比如官方镜像centos7就包含了完整的一套centos7的最小系统的root文件系统。镜像又相当于容器的源代码,docker镜像文件类似于java的类模版,而docker容器类似于java中new出来的实例对象。
  • 容器: Docker利用容器独立运行一个或一组应用,应用程序或服务运行在容器中,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例,就像是java中的类和实例对象的关系一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境。另一方面,容器可以看成一个简单的Linux环境和运行在其中的应用程序。
  • 仓库:仓库时集中存放镜像文件的场所。仓库可以分为私有仓库和公开仓库两种形式。Docker Hub就是最大的公有仓库。

基于前面介绍的docker的三大要素,docker的工作流程可以描述于下:

Docker是一个CS结构的系统,Docker守护进程工作在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器,容器是一个运行时环境,就是我们前面说的集装箱。

2. Docker平台架构

前面说到,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。Docker的运行流程如下所示:

  • 首先,用户使用Docker Client于Docker Daemon建立通信,并发送请求给后者
  • Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求
  • Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式存在
  • Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动Graph Driver将下载的镜像以Graph的形式存储
  • 当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境
  • 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成
  • Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是Libcontainer来实现具体对容器进行的操作

3. 阿里云镜像加速

从阿里云上找到镜像加速地址,如下图所示:

由于我的机器是m1,所以我这里就演示m1如何配置加速镜像。我的mac上的docker客户端是Docker for Mac。下面演示如何配置镜像:

  1. 首先找到设置中的Docker Engine
  1. 然后将镜像加速地址配置到registry-mirrors数组中,然后重启就配置完成了

4. Docker的Hello World入门案例

执行下面命令运行入门程序:

shell 复制代码
docker run hello-world

运行结果如下所示:

它的运行原理如下所示:

5. 总结

再次分析一下前面的核心问题:Docker为什么比传统的虚拟机快?

  • docker有着比虚拟机更少的抽象层

由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显的优势。

  • docker利用的是宿主机的内核,而不需要加载操作系统OS内核

当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引用寻址、加载操作系统内核返回等比较费费资源的过程,当新建立一个虚拟机时,虚拟机软件需要加载OS,返回新建过程时分钟级别的,而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建立一个docker只需要几秒钟的时间。

相关推荐
半旧夜夏3 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
宇明一不急5 小时前
k8s HPA storageclass configmap
云原生·容器·kubernetes
ZzzZZzzzZZZzzzz…7 小时前
Docker + K8s集群搭建实战:1 Master+2 Node,含Harbor私有仓库与软路由
docker·云原生·容器·kubernetes·容器编排·集群部署·cri-dockerd
xier_ran8 小时前
【infra之路】模块三:Kubernetes (下) — 阶段一毕业项目:在集群里跑 PyTorch 训练
pytorch·容器·kubernetes
Waay8 小时前
K8s新手实操|emptyDir卷超详细实战(附完整命令+核心理解)
云原生·容器·kubernetes
liux35289 小时前
K8s 核心接口:CNI、CSI、CRI、LB 一篇讲透
云原生·容器·kubernetes
香气袭人知骤暖9 小时前
人大金仓(KingbaseES)Docker 容器自动备份方案
运维·docker·容器
大熊程序猿10 小时前
MarkItDown Docker安装
运维·docker·容器
Hello_worlds10 小时前
Kafka InconsistentClusterIdException 导致容器无限重启,磁盘打满排查与修复
docker·kafka·磁盘·排障
wgc2k10 小时前
Nest.js基础-6:关于Claude Code
人工智能·docker·node.js