RHEL9部署Docker环境

news2024/11/18 12:39:15

华子目录

  • Docker引擎架构
    • docker引擎架构示意图
    • 执行过程示例
  • RHEL9上安装Docker
    • 1.系统要求
    • 2.安装yum-utils工具包
    • 3.yum安装docker-ce
    • 4.配置docker镜像加速
      • ==docker拉取镜像的过程==
      • 配置阿里云镜像仓库
      • 重新加载守护进程
      • 重启Docker服务
    • 5.拉取并运行hello-world镜像
    • 6.测试是否安装成功
  • 查看docker版本
  • 查看正在运行的镜像

Docker引擎架构

首先在部署Docker环境前,得先了解Docker的引擎架构

  • docker引擎是用来运行和管理容器的核心软件,通常将其代指为docker或者docker平台。
  • docker引擎由如下主要的4大构建组成docker client(docker客户端)、docker daemon(docker守护进程,也是docker服务端)、containerd以及runc,共同负责容器的创建和运行。

docker引擎架构示意图

在这里插入图片描述

  • docker daemon实现了docker api,对容器的操作由containerd完成,containerd需要指挥与OCI相兼容的容器运行时来创建容器,默认情况下,docker使用runc来作为其默认的容器运行时,containerd调用runc,并确保docker镜像以OCI bundle的格式传给runc。其中:

    • api:应用程序编程接口
    • OCI(开放容器计划)定义了两个容器相关的规范:
      • 镜像规范
      • 容器运行时规范
  • runc是OCI容器运行时标准的参考实现,runc实际上是一个轻量级的、针对libcontainer进行了包装的命令行交互工具。runc生来只有一个作用,创建容器。

    • 关于libcontainer:LXC提供了对诸如命名空间(Namespace)和控制组(CGroup)等基础工具的操作能力,是基于linux内核的容器化虚拟技术,docker公司开发了名为libcontainer的自研工具,用于替代LXC,libcontainer的目的是成为与平台无关的工具,可基于不同内核为Docker上层提供必要的容器交互功能。
  • containerd 的主要任务是容器的生命周期的管理,containerd在linux和windows中以daemon的方式运行,在docker引擎技术栈中,containerd位于daemon和runc所在的OCI层之间。

  • shim是实现无daemon的容器不可获取的工具,前面提到containerd指挥runc来创建容器,事实上,每次创建容器时都会fork(分叉出)一个新的runc实例,不过,一旦容器创建完毕,对应的runc进程就会退出,因此即使运行上百个容器,也无须保持上百个的runc处于运行状态一旦容器进程的父进程runc退出相关联的containerd-shim进程就会成为容器的父进程,作为容器的父进程,shim的部分职责如下:

    • 保持所有的stdin(标准输入)和stdout(标准输出)流是开启状态,从而当daemon(docker服务端)重启的时候,容器不会因为管道的关闭而终止。
    • 将容器的退出状态反馈给daemon。

执行过程示例

[root@server ~]# docker container run --name ctrl -it alpine:latest sh
  • 当docker命令行执行上述命令时,docker客户端会将其转换为合适的api格式,并发送到正确的API端点API是在daemon种实现的一旦daemon接受了创建新容器的命令它会向containerd发出调用(daemon使用一种CRUD风格的API,通过gRPC与containerd进行通信)。containerd不负责创建容器会将docker镜像转换为OCI bundle然后再让runc基于此创建一个新的容器然后runc与操作系统内核接口通信基于所有必要的工具(Namespace、CGroup等)来创建容器容器进程作为runc的子进程进行启动,启动完毕后,runc将会退出。整个过程如下图:
  • 在这里插入图片描述

RHEL9上安装Docker

这里我们通过yum源来安装Docker

  • Docker引擎目前分为两个版本社区版本( Community Edition, CE)和企业版本(Enterprise Edition, EE社区版本包括大部分的核心功能企业版本则通过付费形式提供认证支持、镜像管理、容器托管、安全扫描等高级服务, 通常情况下,用户使用社区版本可以满足大部分需求;若有更苛刻的需求,可以购买企业版本服务

1.系统要求

系统基础环境

  • 64位CPU
  • Linux内核(Linux kernel):5.14.0-162.6.1.el9_1.x86_64

查询自己服务器的环境

[root@server ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)

内核版本

[root@server ~]# uname -r
5.14.0-162.6.1.el9_1.x86_64

IP地址

[root@server ~]# hostname -I  #列出主机的所有IP地址
192.168.80.129

[root@server ~]# hostname -i  #列出主机的IP地址
fe80::20c:29ff:fe9e:1d25%ens160 192.168.80.129

2.安装yum-utils工具包

是一个提供yum-config-manager命令的工具包

[root@server ~]# yum install yum-utils -y

在这里插入图片描述
在阿里云镜像站中找的这个docker-ce.repo包,鼠标右击复制链接

[root@server ~]# yum-config-manager  --add-repo   https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ll
总用量 12
-rw-r--r--  1 root root 2045  323 16:35 docker-ce.repo    #就出现了这个文件
-rw-r--r--. 1 root root  358 1111 19:28 redhat.repo
-rw-r--r--. 1 root root  223 1111 19:25 RHELserver.repo

3.yum安装docker-ce

[root@server ~]# yum install docker-ce -y

4.配置docker镜像加速

多种加速方式:

  • docker cn
  • 阿里云加速器
  • 中国科技大学

docker拉取镜像的过程

Docker拉取镜像的过程涉及多个步骤,以下是其详细的流程:

1.配置国内Docker的下载源:

  • 进入文件daemon.json,如果该文件不存在,则新建。通常这个文件位于/etc/docker/目录下。
    编辑daemon.json文件,添加国内镜像源的配置。例如,你可以添加阿里云的镜像源。这样配置后,Docker在拉取镜像时会优先从国内的镜像源拉取,以提高下载速度。

2.执行拉取命令:

  • 在命令行或终端中,使用docker pull命令来拉取镜像。你需要指定要拉取的镜像名称和标签(如果有的话)。例如,要拉取一个名为nginx的镜像,并指定其版本为1.12.0-alpine,你可以执行docker pull nginx:1.12.0-alpine。

3.Docker Hub查找镜像:

  • 当执行docker pull命令时,Docker首先会在本地查找是否已经存在该镜像。如果不存在,它会向Docker Hub(Docker官方的镜像中心)发送请求,查找指定的镜像。

4.下载镜像:

  • 一旦在Docker Hub上找到镜像,Docker会开始从远程仓库下载镜像的各个层。这些层是Docker镜像的组成部分,它们包含了构建和运行容器所需的所有文件、配置和依赖项。

5.验证和存储镜像:

  • 下载完成后,Docker会验证镜像的完整性和安全性。一旦验证通过,镜像会被存储在本地的Docker镜像仓库中,供以后使用。

6.使用镜像:

  • 拉取到镜像后,你就可以使用docker run命令来基于该镜像创建并运行一个容器。在运行容器时,你可以指定一些参数,如容器的名称、要映射的端口等。

通过以上步骤,你就可以成功地从Docker Hub或其他配置的镜像源拉取所需的镜像,并在本地创建和运行容器。

配置阿里云镜像仓库

配置阿里云镜像仓库地址

  • 使用容器时一般需要首先下载一个容器镜像,例如Docker Hub官方提供的MySQL、WordPress等容器镜像。然而由于网络原因,下载一个Docker官方镜像可能会需要很长的时间,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官方的镜像站点,从而加速官方镜像的下载。
  • 阿里云官方https://cn.aliyun.com/
  • 首先到阿里云官网进行登录。
  • 如果您还没有注册过阿里云账号,点击登录注册,然后单击注册,就会进入阿里云账号注册页面创建阿里云账号
  • 在这里插入图片描述
  • 点击放大镜进行搜索
  • 在这里插入图片描述
  • 搜索 “容器镜像服务”,然后直接点击推荐直达的 ”容器镜像服务“
  • 在这里插入图片描述
  • 点击管理控制台,进入管理控制台
  • 在这里插入图片描述
  • 首先点击镜像工具,然后可以看到镜像加速器
  • 在这里插入图片描述
  • 点击镜像加速器,就可以看到镜像加速器地址以及配置操作步骤
  • 在这里插入图片描述
[root@server ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://0wfqs2it.mirror.aliyuncs.com"]
}     

重新加载守护进程

[root@server ~]# systemctl daemon-reload

重启Docker服务

[root@server ~]# systemctl restart docker

5.拉取并运行hello-world镜像

[root@server ~]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
[root@server ~]# docker container run hello-world   #新写法

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

6.测试是否安装成功

[root@server ~]# docker images  #查看拉取的镜像
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB

至此,Docker已经安装配置成功,可以在RHEL9上愉快使用啦~

查看docker版本

[root@server ~]# docker version
Client: Docker Engine - Community
 Version:           26.0.0
 API version:       1.45
 Go version:        go1.21.8
 Git commit:        2ae903e
 Built:             Wed Mar 20 15:19:53 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.0.0
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.8
  Git commit:       8b79278
  Built:            Wed Mar 20 15:18:08 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@server ~]#

查看正在运行的镜像

[root@server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                 NAMES
e587adbe6c82   mysql     "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   3306/tcp, 33060/tcp   mysql13

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1540459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LabVIEW FPGA入门】FPGA 存储器(Memory)

可以使用内存项将数据存储在FPGA块内存中。内存项以2kb为倍数引用FPGA目标上的块内存。每个内存项引用一个单独的地址或地址块,您可以使用内存项访问FPGA上的所有可用内存。如果需要随机访问存储的数据,请使用内存项。 内存项不消耗FPGA上的逻辑资源&…

stm32平衡车

目录 一.所需材料 二.PID算法(简单说明) 直立环 速度环 串级PID 三.使用到的外设 1.定时器输出比较-PWM 2.定时器编码器模式 3.编码器读取速度 4.电机驱动函数 5.外部中断 四、小车 调试 一.所需材料 1.陀螺仪MPU6050--读取三轴的加速度…

C++类和对象进阶

CSDN成就一亿技术人 C类的6个默认成员函数(构造)-CSDN博客https://blog.csdn.net/lh11223326/article/details/136917667?spm1001.2014.3001.5502 目录 一.再谈构造函数 1.构造函数体赋值: 在创建对象时&am…

# Maven Bom 的使用

Maven Bom 的使用 文章目录 Maven Bom 的使用概述BOM特点优点缺点 MavenMaven 安装安装步骤settingx.ml常用仓库地址Idea 使用maven常见坑 SpringBoot 项目Bom使用案例项目结构主项目 zerocode-back-servezc-dependency(第三方jar管理)子模块zc-serve子模…

Qt creator构建DLL库

文章目录 一、构建DLL库二、隐式调用DLL库 一、构建DLL库 Qt creator创建DLL项目。 实现功能函数。 运行代码,debug目录下会有.dll和.lib文件。 二、隐式调用DLL库 QT新建控制台项目。将.lib文件和与之关联的头文件赋值到项目文件夹。 3. 添加头文件和外部依赖库…

目标检测——YOLOR算法解读

论文:YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks 作者:Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接:https://arxiv.org/abs/2105.04206 代码:https://github.com/WongKinYiu/yolo…

Python界面库Flet(1)介绍和快速使用

Python界面库Flet(1)快速上手使用 Author:Once Day Date:2024年3月19日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: Pyt…

利用sealos安装k8s集群

1. 环境准备 准备三台干净(未安装过k8s环境)的虚拟机 # 所有的主机都要配置主机名和域名映射 # 设置主机名 hostnamectl set-hostname k8s-master01 # vim /etc/hosts 192.168.59.201 k8s-master01 192.168.59.202 k8s-worker01 192.168.59.203 k8…

飞鸟写作能用吗 #笔记#笔记

飞鸟写作是一个强大的论文写作工具,不仅可以帮助用户高效、准确地完成论文写作,还能帮助用户对论文进行查重和降重。那么,飞鸟写作能用吗?答案是肯定的,飞鸟写作非常好用! 首先,飞鸟写作拥有强大…

视频记录历史播放位置效果

简介 每次打开页面视频从上一次的播放位置开始播放 利用lodash库做节流 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

MySQL | 视图

视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1. 基本使用 1.1. 创建视图 create view 视图名 as select语句&#xff1b; 创建测…

自动驾驶轨迹规划之时空语义走廊(一)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊 ​4.1 种子生成 4.2 具有语义边界的cube inflation ​4.3 立方体松弛 本文解析了丁文超老师…

JetBrains数据库驱动下载失败解决方法

本方法可通用于解决PyCharm等JetBrains家的IDE下载数据库驱动问题。 在Jet家IDE内连接数据库时&#xff0c;mysql、sqlite等的驱动有部分在 https://download.jetbrains.com 网站上&#xff0c;可能由于网络问题无法访问。 解决方法是修改 JetBrains 路径下的 jdbc.drivers.xm…

计算机基础系列 —— 从 Nand 门、DFF 到 RAM

Memory: The faculty of the brain by which data or information is encoded, stored, and retrieved when needed.It is the retention of information over time for the purpose of influencing future action —— Wikipedia 文中提到的所有实现都可以参考&#xff1a;nan…

Typecho如何去掉/隐藏index.php

Typecho后台设置永久链接后&#xff0c;会在域名后加上index.php&#xff0c;很多人都接受不了。例如如下网址&#xff1a;https://www.jichun29.cn/index.php/archives/37/&#xff0c;但我们希望最终的形式是这样&#xff1a;https://www.jichun29.cn/archives/37.html。那么…

【Oracle】Linux——Centos7安装Oracle12c

安装前拍快照、安装前拍快照、安装前拍快照 目录 安装前拍快照、安装前拍快照、安装前拍快照1.下载Oracle12C安装包2.基本环境搭建2.1创建用户和组2.2创建oralce安装目录,oracle用户分配目录权限2.3上传安装包 3.系统参数配置及服务器设置3.1依赖安装3.2内核参数配置3.3配置完成…

【项目自我反思之vue的组件通信】

为什么子组件不能通过props实时接收父组件修改后动态变化的值 一、现象二、可能的原因1.响应式系统的限制2.异步更新队列3.父组件和子组件的生命周期4.子组件内部对 props 的处理 三、组件通信的几种场景&#xff08;解决方案&#xff09;1.子组件想修改父组件的数据2.子组件传…

Keepalive与idle监测及性能优化

Keepalive 与 idle监测 Keepalive&#xff08;保活&#xff09;: Keepalive 是一种机制&#xff0c;通常用于TCP/IP网络。它的目的是确保连接双方都知道对方仍然存在并且连接是活动的。这是通过定期发送控制消息&#xff08;称为keepalive消息&#xff09;实现的。如果在预定时…

机器学习K-means算法

K-Means 算法&#xff08;K-Means算法、K-Means 中心值计算、K-Means 距离计算公式、K-Means 算法迭代步骤、K-Means算法实例&#xff09; 问题引入 给你如下两种图片&#xff0c;快读回答2个问题&#xff0c;问 图1 中有几类五谷杂粮&#xff1f;问 图2 中有几类五谷杂粮&…

深度分析鸿蒙应用开发的准确红利期、前景、未来发展方向

近年来&#xff0c;随着互联网技术的不断发展&#xff0c;鸿蒙生态开发逐渐成为热门话题。作为一种新兴的操作系统&#xff0c;其发展趋势备受关注。同时&#xff0c;鸿蒙生态开发的价值、就业岗位需求以及相关学习方面也引起了广泛关注。 那么就目前的形势来看&#xff0c;鸿…