Docker完整版(一)

本文详细介绍了Docker的基础概念,包括Docker的用途、容器与虚拟机的区别、系统架构以及镜像和容器的区别。Docker提供了一个统一的运行环境,简化了应用迁移和维护,其轻量级特性使其启动迅速,资源利用率高。文章还讨论了Docker的Dockerd、Containerd、Runc等核心组件,并介绍了Docker的安装、镜像加速器的配置。此外,文章详述了镜像的分层、摘要、多架构特性以及容器的创建、启动、管理和日志查看等操作。
摘要由CSDN通过智能技术生成

Docker完整版(二)

一、Docker概述

官网 http://www.docker.com
中文官网 https://docker.p2hp.com || https://dockerdocs.cn
仓库(镜像网站) https://hub.docker.com

1.1、Docker简介

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux、windows机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。

1.2、Docker的用途

  • 1、提供统一的运行环境

    • 在生产环境中,很多时候的开发、测试及上线环境都是不一样的,从而导致项目在不同阶段出现很多其他阶段所不存在的奇怪的问题。
    • Docker容器除了可以提供相同的应用外,还提供了该应用的统一运行环境,确保在任何宿主机上都可以跑出相同的结果。
  • 2、便捷的应用迁移

    • Docker 容器确保了统一的运行环境,几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
  • 3、超快的启动时间

    • 传统的虚拟机技术启动应用一般需要数分钟:首先需要启动虚拟机,再加载虚拟机操作系统,最后还需要手工启动应用。
    • Docker容器应用,由于直接运行在宿主机系统中,无需启动操作系统,因此可以做到秒级、甚至毫秒级的启动。
    • Docker容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。
    • Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个Docker 容器。
  • 4、更轻松的维护和扩展

    • Docker公司及各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础镜像进一步定制,大大降低了应用服务的镜像制作成本。
    • Docker使用的分层存储以及镜像的技术,使得应用重复的部分复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。
  • 5、持续交付和部署

    • 对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的在生产环境中部署该镜像。

1.3、容器与虚拟机的区别

Docker容器的本质就是通过容器虚拟技术虚拟出的一台主机,就像虚拟机一样。可以将应用及其运行环境部署在这台虚拟机上运行,但容器与虚拟机又有本质的不同。
在这里插入图片描述

名词解释:

  • infrastructure (基础服务)硬件
  • Host OS 主机操作系统
  • VM 虚拟机
  • Hypervisor (虚拟机监视器)虚拟层程序
  1. 实现原理技术不同 虚拟机是用来进行硬件资源划分的完美解决⽅案,利用的是硬件虚拟化技术,如此VT-x 、AMD-V会通过⼀个 hypervisor 层来实现对资源的彻底隔离。 而容器则是操作系统级别的虚拟化,利用的是内核的 Cgroup 和 Namespace 特性,此功能通过软件来实现,仅仅是进程本身就可以实现互相隔离,不需要任何辅助。
  2. 使用资源方面不同 Docker 容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级, 消耗的资源更少。 虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源。
  3. 应用场景不同 若需要资源的完全隔离并且不考虑资源的消耗,可以使用虚拟机。若是想隔离进程并且需要运行大量进程实例,应该选择 Docker 容器。
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

1.4、Docker系统架构

Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。另一个Docker客户端是Docker Compose,它使您可以处理由一组容器组成的应用程序。
在这里插入图片描述

Docker的基本组成:
Docker client 客户端
Docker server( docker daemon 守护进程)
Docker Image 镜像
Docker Container 容器
Docker Registry 仓库

  • Docker守护程序
    Docker守护程序(dockerd)侦听Docker API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。

  • Docker客户端
    Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker API。Docker客户端可以与多个守护程序通信。

  • Docker注册表
    Docker注册表存储Docker映像。Docker Hub是任何人都可以使用的公共注册表,并且默认情况下,Docker已配置为在Docker Hub上查找映像。您甚至可以运行自己的私人注册表。
    使用docker pulldocker run命令时,将从配置的注册表中提取所需的图像。使用该docker push命令时,会将映像推送到已配置的注册表。

  • Docker对象
    使用Docker时,您正在创建和使用映像,容器,网络,卷,插件和其他对象。本节是其中一些对象的简要概述。

  • Image称为Docker镜像,就是一组文件。将这组文件运行起来就是容器Container。Image和Container可以看做是类和对象的关系。 从一个Image可以运行多个不同的Container

  • Docker镜像是一个存入镜像的仓库。通常被部署在互联网服务器或者云端。
    Docker Hub( https://hub.docker.com ) 提供了庞大的镜像集合供使用。
    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

在这里插入图片描述

Docker 面向对象
容器 对象
镜像

1.5、Docker仓库

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub( https://hub.docker.com ) 提供了庞大的镜像集合供使用。

  • 公有 Docker Registry

Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 CoreOSQuay.io,CoreOS 相关的镜像存储在这里;Google 的 Google Container RegistryKubernetes 的镜像使用的就是这个服务。

由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务( Registry Mirror ),这些镜像服务被称为加速器。常见的有 阿里云加速器、DaoCloud 加速器 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。

国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓库网易云镜像服务DaoCloud 镜像市场、阿里云镜像库 等。

  • 私有 Docker Registry

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 Docker Trusted Registry
中,提供了这些高级功能。

除了官方的 Docker Registry 外,还有第三方软件实现了 Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare HarborSonatype Nexus

二、Docker引擎

2.1、Docker引擎架构

Docker引擎是用来运行和管理容器的核心软件,其现代架构由四部分主要组件构成:Docker Client,Dockerd、Containerd、Runc。
在这里插入图片描述

  • Docker Client:
    Dcoker客户端,Docker引擎提供的CLI工具,用于用户向 Docker 提交命令请求。
  • Dockerd:
    即Docker Daemon,在现代Dockerd中的主要包含的功能有镜像构建、镜像管理、REST API、核心网络及编排等。其通过 gRPC 与 Containerd 进行通信。
  • Containerd:
    即 Container Daemon,该项目的主要功能是管理容器的生命周期。不过,其本身并不会去创建容器,而是调用 Runc 来完成容器的创建。
    Docker 公司后来将 Containerd 项目捐献给了 CNCF(云原生基金会)。
  • Runc:
    即 Run Container,是 OCI(开放容器倡议基金会) 容器运行时规范的实现,Runc项目的目标之一就是与 OCI 规范保持一致。所以,Runc 所在层也称为 OCI 层。这使得 Docker Daemon 中不用再包含任何容器运行时的代码了,简化了 Docker Daemon。
    Runc 只有一个作用——创建容器,其本质是一个独立的容器运行时 CLI 工具。其在 fork 出一个容器子进程后会启动该容器进程。在容器进程启动完毕后,Runc 会自动退出。
  • Shim
    Shim是实现“Daemonless Container”不可或缺的工具,是容器与Docker Daemon 解耦,使得 Docker Daemon 的维护与升级不会影响到运行中的容器。
    每次创建容器时,Containerd 会先 fork 出 Shim 进程,再由 Shim 进程 fork 出 Runc 进程。当 Runc 自动退出之前,会先将新容器进程的父进程指定为相应的 Shim 进程。
    除了作为容器的父进程之外,Shim 进程还具有两个重要功能:
    1、保持所有 STDIN 和 STDOUT 流的开启状态,从而使得当 Docker Daemon 重启时,容器不会因为 Pipe 的关闭而终止。
    2、将容器的退出状态反馈给 Docker Daemon。

2.2、Docker引擎分类

在安装Docker之前需要先了解 Docker 官方对其版本的分类,分为大版本和小版本。

  • 大版本分为三类:Moby、社区版 Docker-CE 和 企业版 Docker-EE。
  • 小版本:从v1.13.1之后,Docker 的发布计划发生了变化,每个大版本下都出现了两个小版本 Edge 月版 与 Stable 季版。不过现在的官网中一般只能看到 Stable 版本。

2.3、Docker引擎的安装

Docker 可以安装在Windows、Linux、Mac 等系统中,但生产环境下,服务器使用 Linux 中的 CentOS 居多,下面就以 Docker 在 CentOS 中安装为例来安装并运用Docker。

1、操作系统要求

要安装Docker Engine,您需要一个CentOS 7或8及以上的维护版本。不支持或未测试存档版本。推荐使用CentOS7

centos-extras库必须启用。默认情况下,此存储库是启用的,但是如果已禁用它,则需要重新启用它。

2、安装方式

  • 大多数用户会 设置Docker的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法

  • 一些用户下载并手动安装RPM软件包, 并完全手动管理升级。这在诸如在无法访问互联网的空白系统上安装Docker的情况下很有用。

  • 在测试和开发环境中,一些用户选择使用自动 便利脚本来安装Docker。

3、查看系统版本

cat /etc/redhat-release
或者
cat /etc/system-release
或者使用uname命令

在这里插入图片描述
4、卸载旧版本

较旧的Docker版本称为dockerdocker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

如果 yum 报告未安装这些软件包,则可以。

在这里插入图片描述

5、使用存储库安装

在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。

①、安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。

 sudo yum install -y yum-utils
 
 # 官方地址但一般我们不推荐使用
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 # 推荐使用国内镜像地址:阿里云源
 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

CentOS8执行yum命令报错如下:
在这里插入图片描述
在这里插入图片描述

cd /etc/yum.repos.d/

sed -i -e "s/mirrorlist=/#mirrorlist=/g" /etc/yum.repos.d/CentOS-Linux-*.repo

sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-Linux-*.repo

解决办法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值