在线黑科技网站,购物网站静态页面,内蒙住房和城乡建设部网站首页,网站建设一年多少华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功… 华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功 查看docker版本查看正在运行的镜像 Docker引擎架构
首先在部署Docker环境前得先了解Docker的引擎架构
docker引擎是用来运行和管理容器的核心软件通常将其代指为docker或者docker平台。docker引擎由如下主要的4大构建组成docker clientdocker客户端、docker daemondocker守护进程也是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生来只有一个作用创建容器。 关于libcontainerLXC提供了对诸如命名空间Namespace和控制组CGroup等基础工具的操作能力是基于linux内核的容器化虚拟技术docker公司开发了名为libcontainer的自研工具用于替代LXClibcontainer的目的是成为与平台无关的工具可基于不同内核为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(标准输出)流是开启状态从而当daemondocker服务端重启的时候容器不会因为管道的关闭而终止。将容器的退出状态反馈给daemon。
执行过程示例
[rootserver ~]# 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位CPULinux内核Linux kernel5.14.0-162.6.1.el9_1.x86_64
查询自己服务器的环境
[rootserver ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)内核版本
[rootserver ~]# uname -r
5.14.0-162.6.1.el9_1.x86_64IP地址
[rootserver ~]# hostname -I #列出主机的所有IP地址
192.168.80.129[rootserver ~]# hostname -i #列出主机的IP地址
fe80::20c:29ff:fe9e:1d25%ens160 192.168.80.1292.安装yum-utils工具包
是一个提供yum-config-manager命令的工具包
[rootserver ~]# yum install yum-utils -y在阿里云镜像站中找的这个docker-ce.repo包鼠标右击复制链接
[rootserver ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo[rootserver ~]# cd /etc/yum.repos.d/
[rootserver yum.repos.d]# ll
总用量 12
-rw-r--r-- 1 root root 2045 3月 23 16:35 docker-ce.repo #就出现了这个文件
-rw-r--r--. 1 root root 358 11月 11 19:28 redhat.repo
-rw-r--r--. 1 root root 223 11月 11 19:25 RHELserver.repo3.yum安装docker-ce
[rootserver ~]# yum install docker-ce -y4.配置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 HubDocker官方的镜像中心发送请求查找指定的镜像。
4.下载镜像
一旦在Docker Hub上找到镜像Docker会开始从远程仓库下载镜像的各个层。这些层是Docker镜像的组成部分它们包含了构建和运行容器所需的所有文件、配置和依赖项。
5.验证和存储镜像
下载完成后Docker会验证镜像的完整性和安全性。一旦验证通过镜像会被存储在本地的Docker镜像仓库中供以后使用。
6.使用镜像
拉取到镜像后你就可以使用docker run命令来基于该镜像创建并运行一个容器。在运行容器时你可以指定一些参数如容器的名称、要映射的端口等。
通过以上步骤你就可以成功地从Docker Hub或其他配置的镜像源拉取所需的镜像并在本地创建和运行容器。
配置阿里云镜像仓库
配置阿里云镜像仓库地址
使用容器时一般需要首先下载一个容器镜像例如Docker Hub官方提供的MySQL、WordPress等容器镜像。然而由于网络原因下载一个Docker官方镜像可能会需要很长的时间甚至下载失败。为此阿里云容器镜像服务ACR提供了官方的镜像站点从而加速官方镜像的下载。阿里云官方https://cn.aliyun.com/首先到阿里云官网进行登录。如果您还没有注册过阿里云账号点击登录注册然后单击注册就会进入阿里云账号注册页面创建阿里云账号点击放大镜进行搜索搜索 “容器镜像服务”然后直接点击推荐直达的 ”容器镜像服务“点击管理控制台进入管理控制台首先点击镜像工具然后可以看到镜像加速器点击镜像加速器就可以看到镜像加速器地址以及配置操作步骤
[rootserver ~]# vim /etc/docker/daemon.json
{registry-mirrors: [https://0wfqs2it.mirror.aliyuncs.com]
} 重新加载守护进程
[rootserver ~]# systemctl daemon-reload重启Docker服务
[rootserver ~]# systemctl restart docker5.拉取并运行hello-world镜像
[rootserver ~]# docker run hello-worldHello 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 theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare 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/[rootserver ~]# 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 theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare 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.测试是否安装成功
[rootserver ~]# docker images #查看拉取的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 10 months ago 13.3kB至此Docker已经安装配置成功可以在RHEL9上愉快使用啦
查看docker版本
[rootserver ~]# docker version
Client: Docker Engine - CommunityVersion: 26.0.0API version: 1.45Go version: go1.21.8Git commit: 2ae903eBuilt: Wed Mar 20 15:19:53 2024OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 26.0.0API version: 1.45 (minimum version 1.24)Go version: go1.21.8Git commit: 8b79278Built: Wed Mar 20 15:18:08 2024OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.6.28GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bbrunc:Version: 1.1.12GitCommit: v1.1.12-0-g51d5e94docker-init:Version: 0.19.0GitCommit: de40ad0
[rootserver ~]#查看正在运行的镜像
[rootserver ~]# 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