Docker容器:docker基础

目录

一.docker前言

云计算服务模式

[关于 docker 产品](#关于 docker 产品)

虚拟化产品有哪些?

[① 寄居架构](#① 寄居架构)

[② 源生架构](#② 源生架构)

虚拟化技术概述

主流虚拟化产品对比

[1. VMware系列](#1. VMware系列)

[2. KVM/OpenStack](#2. KVM/OpenStack)

[3. Xen](#3. Xen)

[4. 其他半/全虚拟化产品](#4. 其他半/全虚拟化产品)

[二. docker 的相关知识](#二. docker 的相关知识)

[1. docker 的概念](#1. docker 的概念)

docker容器的优点:

容器技术有哪些

容器在内核中支持2种重要技术:

namespace的六项隔离

[2. docker 的三个重要概念](#2. docker 的三个重要概念)

[3. docker 的主要用途](#3. docker 的主要用途)

[4. docker 与虚拟机的区别](#4. docker 与虚拟机的区别)

​编辑

[三. 安装 docker](#三. 安装 docker)

关闭防火墙和防护

安装依赖包

设置阿里云镜像源

[安装 Docker-CE并设置为开机自动启动](#安装 Docker-CE并设置为开机自动启动)

[查看 docker 版本信息](#查看 docker 版本信息)

​编辑

[docker 信息查看](#docker 信息查看)


一.docker前言

云计算服务模式

云端

华为云 谷歌云 腾讯云 阿里云 亚马逊 百度云 移动云 天翼云 西部数码云

国内云 华为云 阿里云 腾讯云(私有云)

国外云 谷歌 亚马逊

云计算的服务模式是分几层的,分别是

laas:infrastructure-as-a-Service

PaaS:PLatform(平台)-as-a-Service;

SaaS:Software(软件)-as-a-Service

基础设施即服务(IaaS, Infrastructure as a Service)

定义:IaaS是云计算的基础层级,它向用户提供虚拟化的计算资源,如虚拟机、存储空间、网络和操作系统。用户可以根据需求租用这些基础设施,并对其进行配置和管理,但无需关心底层硬件的维护。

应用场景:适用于需要高度定制化环境的企业,如运行特定应用、开发测试环境、数据备份和恢复等。
平台即服务(PaaS, Platform as a Service)

定义:PaaS为开发人员提供了一个完整的开发和部署环境,包括操作系统、数据库、中间件、编程框架等。用户可以在服务商提供的平台上直接开发、运行和管理应用程序,无需关心底层基础设施的细节。

应用场景:适合软件开发团队,可以加速应用开发、简化运维工作,如Web应用、移动应用后端、大数据分析平台等。

软件即服务(SaaS, Software as a Service)

定义:SaaS是云计算服务的最高层级,直接向用户提供应用程序,用户通过互联网访问并使用这些应用,无需安装或维护软件。所有应用相关的后台管理、数据存储、安全更新等均由服务提供商负责。

应用场景:广泛应用于日常办公、CRM、ERP、邮件服务、协作工具等领域,如Office 365、Salesforce、Google Workspace等。

每种服务模式都代表了从基础设施到最终应用的不同层次的服务抽象,用户可以根据自身需求选择合适的服务模式,实现资源的灵活配置和高效利用,同时降低运营成本和提升业务敏捷性。
目前中国使用最多的服务模式是 PaaS ,国外使用最多的是 SaaS。

关于 docker 产品

Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其所有的依赖包打包成一个轻量级、可移植的容器(Container),然后可以在任何支持Docker的Linux或Windows操作系统机器上运行这个容器,实现应用程序的快速部署和一致性运行环境。Docker采用操作系统级别的虚拟化技术,相较于传统的虚拟机技术,它更为轻量级,启动速度快,资源利用率更高。

虚拟化产品有哪些?

服务器虚拟化产品

  • VMware vSphere:包括ESXi hypervisor和vCenter Server,提供企业级的虚拟化解决方案。
  • Microsoft Hyper-V:Windows Server内置的虚拟化平台,支持创建和管理虚拟机。
  • Xen:开源虚拟化技术,常用于Citrix XenServer和一些Linux发行版中。
  • KVM(Kernel-based Virtual Machine):基于Linux内核的开源虚拟化解决方案,广泛应用于云平台。
  • 桌面虚拟化产品

VMware Horizon:提供虚拟桌面基础架构(VDI)和应用程序虚拟化。

Citrix Virtual Apps and Desktops(原XenDesktop):支持交付虚拟应用和桌面到任何设备。

Microsoft Remote Desktop Services:允许用户远程访问Windows应用和桌面。

存储虚拟化产品:

  • VMware vSAN:软件定义的存储解决方案,直接在ESXi主机的本地存储上创建分布式存储层。
  • Microsoft Storage Spaces Direct:Windows Server中的存储虚拟化功能,支持使用直接附加存储创建存储池。
  • NetApp Data ONTAP:企业级存储虚拟化解决方案,支持数据管理和保护。

网络虚拟化产品

  • VMware NSX:提供软件定义的网络和安全服务,支持网络虚拟化和微分段。
  • Cisco ACI(Application Centric Infrastructure):以应用为中心的网络架构,提供网络虚拟化和策略驱动的网络管理。
  • Open vSwitch(OVS):开源的虚拟交换机,常用于OpenStack等云平台的网络虚拟化。

容器和轻量级虚拟化产品:

  • Docker:容器化平台,用于应用程序的打包、分发和运行。
  • Kubernetes(K8s):容器编排系统,用于自动化容器化应用的部署、扩展和管理。
  • Linux Containers (LXC):基于操作系统级别的轻量级虚拟化技术,提供容器服务。

虚拟机架构:

① 寄居架构

虚拟机作为应用软件安装在操作系统上

可以在此应用软件上安装多个操作系统

直接安装在硬件上的系统为宿主

本机(真实的操作系统) ----> 虚拟化产品 ----> 虚拟化操作系统或软件

虚拟机监视器:例如 VMware

VMware非常强大,真机可以上网,虚拟机也可以上网。

病毒木马都可以拖到虚拟机运行,与真机脱离,非常安全。

但是真机一旦崩了,虚拟机当然也崩了。所以实际生产环境用的是 源生架构

② 源生架构

虚拟机软件直接安装在计算机硬件上

虚拟机本身就是一个操作系统

在这个虚拟机中可以同时运行多个操作系统

裸金属 服务器 ---> 虚拟化产品

虚拟化技术概述

虚拟化技术允许在单一物理硬件上创建和运行多个独立的虚拟环境,核心分类包括仿真虚拟化、半虚拟化和全虚拟化,每种技术各有侧重:

  • 仿真虚拟化:无需硬件支持,兼容性强,能在不同架构间运行操作系统,但性能较低。
  • 半虚拟化:需修改客户系统以提升性能,直接与虚拟化层通信,适用于特定场景和注重性能的环境。
  • 全虚拟化:现代技术大多结合硬件辅助,以实现接近原生的性能,同时保持高度兼容性,适用于广泛场景。

主流虚拟化产品对比

1. VMware系列
  • VMware Workstation: 面向个人用户的Windows或Linux上的虚拟机软件,适合开发、测试及多系统体验。
  • VMware Fusion: 专为Mac设计的虚拟化软件,允许在Mac上运行Windows及其他操作系统。
  • VMware ESXi & vSphere: 企业级裸金属虚拟化平台,直接安装在物理服务器上,提供高性能和集中管理能力。可通过客户端或网页端访问管理界面,网页端逐渐成为主流,便于远程管理和维护。

之前用的是客户端连接 VMware vsphere

现企业 使用 网页端连接 VMware vsphere

2. KVM/OpenStack
  • KVM: 基于Linux内核的虚拟化技术,开源且强大,尤其适用于构建私有云环境。与OpenStack等云平台结合,提供全面的虚拟化解决方案,适合大规模部署和服务自动化。
3. Xen
  • Xen Hypervisor: 是一个成熟的开源虚拟机监视器,特别是与RHEL(Red Hat Enterprise Linux)5紧密集成,支持半虚拟化和全虚拟化,适用于企业级服务器虚拟化场景。
4. 其他半/全虚拟化产品
  • Hyper-V (微软): 微软开发的虚拟化平台,特别适合Windows环境,广泛应用于Windows Server,支持半虚拟化技术。

  • VirtualBox: 一款广受欢迎的免费虚拟机软件,适用于多种操作系统,支持全虚拟化,适合开发测试和教育用途。

  • Citrix Hypervisor: 前身为XenServer,专注于提供高效的服务器和桌面虚拟化解决方案,适用于企业环境,支持全虚拟化。

  • 重点:

    ① KVM 全虚拟化产品 调用linux内核 来完成

    ② ESXI (裸金属虚拟化) 企业用的特别多 除了云 就是它

二. docker 的相关知识

1. docker 的概念

docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 linux服务器,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。

Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。

鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,

即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

docker容器的优点:

容器化越来越受欢迎,因为容器:

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:可以即时部署更新和升级。
  • 便携式:可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。

容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。

虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

容器技术有哪些
  • docker
  • podman : 与docker相似 OCI redhat
  • K8s
  • container : docker核心组件之一
  • LXC : linux 容器化技术
  • crio: 轻量级 专门用于 k8s
  • apche mesos : 容器编排平台
容器在内核中支持2种重要技术:

docker 本质就是宿主机的一个进程,docker是通过 namespace 实现资源隔离,通过 cgroup 实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。

namespace的六项隔离
namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWWIPC 信号量、消息队列和共享内存
PID CLONE_NEWPID 进程编号
NETWORK CLONE_NEWNET 网络设备、网络栈、端口等
MOUNT CLONE_NEWNS 挂载点(文件系统)
USER CLONE_NEWUSER 用户和用户组(3.8以后的内核才支持)

2. docker 的三个重要概念

① image 镜像

Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量和配置文件。

Docker 镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是 Docker 镜像的精髓。

② container 容器

Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。

可以把容器看做是一个简易版的 linux 环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

镜像 nginx (run) 起来之后的一个实例,可以把容器看做时一个简易版的linux环境容器 就是集装箱(logo上的集装箱)

③ repostory 仓库

Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库 (Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker

仓库就是放镜像的场所,做大的公开库 docker hub

registry 是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有参考,和私有仓库,最大的公开仓库是 docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与 Git 类似,registry 可以理解为 github 这样的托管服务。

3. docker 的主要用途

官方就是Bulid 、ship、run any app/any where,编译、装载、运行、任何app/在任意地方都能运行。就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下,都可以运行。运维生成环境中:docker化。

  • 发布服务不用担心服务器的运行环境,所有的服务器都是自动分配docker,自动部署,自动安装,自动运行
  • 再不用担心其他服务引擎的磁盘问题,cpu问题,系统问题了
  • 资源利用更出色
  • 自动迁移,可以制作镜像,迁移使用自定义的镜像即可迁移,避免出现问题
  • 管理更加快捷方便

4. docker 与虚拟机的区别

|----------|------------------------------------|------------------------------------------------|
| 区别 | docker | 虚拟机 |
| 内核使用 | 共享宿主机的操作系统内核 | 拥有独立的操作系统内核 |
| 启动速度 | 启动速度快,秒级速度 | 启动速度较慢,分钟级 |
| 性能 | 接近云原生,几乎无损耗 | 通过hypervisor对主机进行虚拟访问,会占用更多的资源,最大损耗将近百分之五十 |
| 容量 | 单机容量成百上千 | 几十个 |
| 隔离 | namespace(命名空间)隔离资源,cgroup资源限制 | 完全隔离 |

cgroup的特点

  • cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理
  • cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源的分配和再利用
  • 所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组

cgroup的四大功能

  • 资源限制:可以对任务使用的资源总额进行限制
  • 优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
  • 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
  • 任务控制:cgroup可以对任务执行挂起、恢复等操作

总的来说,cgroup就是控制容器能够使用资源的上限

三. 安装 docker

目前 Docker 只能支持 64 位系统。

复制代码
systemctl stop firewalld.service
setenforce 0
 
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
-----------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备
驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
-----------------------------------------------------------------------------------------
 
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
 
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io  安装最新版本
 
若想安装docker-ce-20.10.18,把docker-ce改成docker-ce-20.10.18即可
 
systemctl start docker.service
systemctl enable docker.service 
-----------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责
管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大
部分情况下Docker服务端和客户端运行在一台机器上。
-----------------------------------------------------------------------------------------

关闭防火墙和防护

安装依赖包

复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2 
 
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,
它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

设置阿里云镜像源

复制代码
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

安装 Docker-CE并设置为开机自动启动

复制代码
yum install -y docker-ce docker-ce-cli containerd.io  
安装最新版本
docker-ce-20.10.18
复制代码
systemctl start docker.service
systemctl enable docker.service 

安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。

查看 docker 版本信息

复制代码
docker version

docker 信息查看

复制代码
docker info 
复制代码
这段输出是通过在Linux终端执行docker info命令后显示的Docker服务详细信息,以下是各项参数的解释:
 
Client部分:
 
显示的是客户端使用的Docker引擎版本(这里是Docker Engine - Community 26.0.2)及其上下文、调试模式等信息,以及安装的插件及其版本,包括Buildx和Compose。
Server部分:
 
Containers:表示当前服务器上总的容器数量,以及正在运行、暂停和停止的容器数量。
Images:当前存在的镜像数量。
Server Version:运行的Docker服务端版本号。
Storage Driver:使用的是overlay2存储驱动程序,以及相关的文件系统设置。
Logging Driver:日志记录驱动为json-file格式。
Cgroup Driver:控制组驱动为cgroupfs,Cgroup Version为1。
Plugins:列出了一系列已安装的插件,包括Volume类型、Network类型、Log驱动等。
Swarm:表明Swarm模式未激活。
Runtimes:列出支持的容器运行时,这里包括io.containerd.runc.v2和runc。
Kernel Version、Operating System、OSType、Architecture、CPUs和Total Memory提供了宿主机的基本系统信息。
Docker Root Dir:Docker数据根目录的位置。
Security Options:支持的安全选项,此处显示启用了seccomp安全特性,并指定了内建的seccomp配置文件。
Insecure Registries:允许不验证证书的私有仓库列表。
Live Restore Enabled:是否启用实时恢复功能,此处为false,意味着没有启用。
总体而言,这段信息详细展示了Docker服务的配置情况、运行状态以及底层操作系统和硬件环境的概况。

Docker 镜像操作

复制代码
搜索镜像
格式:docker search 关键字
docker search nginx
复制代码
获取镜像  nginx
格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx
复制代码
镜像加速下载
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
 
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://s9jnjeah.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
复制代码
查看镜像信息
镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,
其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
复制代码
查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
复制代码
查看下载到本地的所有镜像
docker images
复制代码
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect 镜像ID号
docker inspect 2ac752d7aeb1
复制代码
为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
docker tag nginx:latest nginx:web
 
#查看
docker images | grep nginx
复制代码
删除镜像
格式:
docker rmi 仓库名称:标签				#当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号						#会彻底删除该镜像
 
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
复制代码
存出镜像====:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx nginx:latest			#存出镜像命名为nginx存在当前目录下
ls -lh
复制代码
载入镜像====:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
 
docker load < nginx
docker load -i nginx
复制代码
上传镜像
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
 
docker tag nginx:latest soscscs/nginx:web

添加新的标签时必须在前面加上自己的dockerhub的username
docker login								#登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web					#上传镜像
相关推荐
代码老y3 分钟前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程27 分钟前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode1 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊3 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks3 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体4 小时前
Linux快速入门
linux·运维
杨浦老苏5 小时前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控
还是奇怪6 小时前
Linux - 安全排查 2
linux·运维·安全
牛奶咖啡137 小时前
Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
运维·服务器·软件安装·linux云计算·scp文件远程传输·vi文件编辑·设置yum的阿里云源
难受啊马飞2.07 小时前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习