基于Docker基础与操作实战

6.1  Docker容器简介

Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0 协议开源。

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker能将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付,测试和部署代码的方法,可以极大程度减少编写代码和在生产环境中运行代码之间的延迟。

在Windows、Mac、Linux系统都有Docker对应的产品,如图6-1所示。

图6-1   Docker 产品信息

       Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),如图6-2所示。作为学习和日常基本功能的使用,用社区版就可以了。

图6-2   Docker 社区版和企业版相关的介绍性信息

Docker提供了在松散隔离的环境(称为容器)中打包和运行应用程序的功能。隔离和安全性使您可以在给定主机上同时运行多个容器。容器是轻量级的,因为它们不需要管理程序的额外负担,而是直接在主机的内核中运行。这意味着与使用虚拟机相比,您可以在给定的硬件组合上运行更多的容器。

Docker引擎主要组件(参见图6-3):

  1. 服务器是一种长期运行的程序,称为守护程序进程。
  2. REST API提供的接口可以用来与守护程序进行通信并指示它做什么。
  3. 命令行界面(CLI)客户端(docker命令)。

图6-3   Docker引擎主要组件

那么使用Docker可以为我们带来哪些好处呢?

这里我们引用其官网的概况总结:

  1. 快速一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。

他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

  1. 响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

  1. 在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

Docker使用客户端/服务器架构,如图6-4所示。Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。

图6-4   Docker架构图

       如图6-4所示,针对该架构图中出现的相关概念,作者整理了一个列表供大家参考,如表6-1所示。

表6-1                                    Docker相关概念说明表

概念

说明

Docker 守护进程(daemon)

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

Docker 客户端(Client)

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

Docker 主机(Host)

一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker 仓库(Registry)

Docker 仓库用来保存镜像,一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。您可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出具体的标签,将以 latest 作为默认标签。

Docker 镜像(Images)

Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。您可以创建自己的镜像,也可以使用其他人创建并在仓库中发布的镜像。要构建自己的镜像,您可以使用简单的语法创建一个Dockerfile,来定义创建镜像并运行它所需的步骤。Dockerfile中的每条指令都会在镜像中创建一个层。更改Dockerfile并重建镜像时,仅重建那些已更改的层。与其他虚拟化技术相比,这是使镜像如此轻巧,小型和快速的部分原因。

Docker 容器(Container)

容器是镜像的可运行实例。您可以使用Docker APICLI创建、启动、停止、移动或删除容器。您还可以将容器连接到一个或多个网络,将存储附加到该网络,甚至根据其当前状态创建新镜像。默认情况下,容器与其他容器及其主机之间的隔离程度相对较高。但您可以依据于需要,控制容器的网络、存储或其他基础子系统与其他容器或与主机的隔离程度。

6.2  Docker的安装过程

这里,作者主要介绍Docker在Centos 7.0和Windows 10操作系统的安装部署过程。

  1. Centos 7.0 系统Docker安装过程

由于Docker 要求CentOS系统的内核版本必须高于3.10 ,所以您必须验证当前CentOS 的版本是否支持 Docker。输入“uname  -r”命令来查看当前CentOS的内核版本,如图6-5所示。

图6-5   查看CentOS内核版本

       可以看到CentOS内核版本满足要求,所以继续进行下一步。

       安装Docker时,请切换到root权限,并运行“yum update”确保yum包更新到最新。

       如果您已经安装过Docker,现在想安装新的Docker版本,请使用“yum remove

docker  docker-common  docker-selinux  docker-engine”命令先删除先前的版本。

       安装需要的软件包,运行“yum install -y yum-utils device-mapper-persistent-data lvm2”命令,其中“yum-utils”提供了yum-config-manager,它是用来管理镜像仓库及扩展包的工具,而device mapper 存储驱动程序需要 device-mapper-persistent-data 和lvm2。

       设置镜像源,您可以设置Docker提供的镜像源或者国内一些企业提供的镜像源,如:阿里的镜像。

若使用Docker官方镜像源,请使用如下命令:

yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

若使用Docker阿里镜像源,请使用如下命令:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

       您需要根据自身网络下载的情况,针对性的添加Docker镜像源,这里以添加阿里镜像源为例,如图6-6所示。

图6-6   添加Docker阿里镜像源到yum仓库

       接下来,开始正式安装Docker-CE,请使用如下命令:

yum  install  docker-ce

       安装过程中,也会安装其依赖包,如图6-7所示。

图6-7   yum安装Docker-CE过程

       Docker-CE安装完成后,可以使用“systemctl start docker”来启动Docker服务。当Docker服务启动后可以使用“docker version”命令来查看一下Docker的版本信息,如图6-8所示。

图6-8   启动Docker服务并查看其版本信息

       如图6-8这里作者安装的是最新的19.03.8版本,如果您需要安装其他版本,则需要指定版本信息,如:docker-ce-19.03.8。那么问题又来了,如何知道仓库中提供了对应的Docker版本呢?您可以使用“yum list docker-ce --showduplicates | sort -r”命令来查看仓库中可用的版本并按版本号(从高到低)对输出结果进行排序,如图6-9所示。

图6-9   查看仓库中提供的Docker版本信息

       通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-19.03.6。若要安装该版本,则对应的命令为“yum  install  docker-ce-19.03.6”。

  1. Windows 10系统Docker安装过程

在Windows 10系统安装Docker,需要先开启Hyper-V。Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。

Hyper-V开启的步骤:

在“应用和功能”页面,单击“程序和功能”,如图6-10所示。

图6-10   应用和功能界面信息

       在显示的“卸载或更改程序”界面单击“启用或关闭Windows功能”,即:标识号为1的位置。而后在弹出的“Windows功能”对话框,选中“Hyper-V”选项,即:标识号为2的位置,单击“确定”按钮,如图6-11所示。待其安装完成后,重新启动电脑。

图6-11   启用“Hyper-V”操作步骤信息

图6-12   下载“Docker Desktop”

       如图6-12所示,单击“Download for Windows”下载“Docker Desktop”。下载完成后,双击“Docker Desktop Installer.exe”文件,开始配置安装Docker Desktop,如图6-13所示。

图6-13   “Installing Docker Desktop”对话框

       单击“OK”按钮,开始执行配置、安装执行过程,安装完成后将显示图6-14。

图6-14   安装完成对话框信息

       如图6-14所示,单击“Close”按钮,完成Docker Desktop2.2.0.5版本的安装。

       双击桌面上自动生成的“Docker Desktop”快捷方式,来启动Docker,Docker启动后,将在Windows状态栏显示如图6-15所示界面。

图6-15   处于已启动状态的Docker图标显示信息

       接下来,您可以打开命令行控制台,输入“docker version”来查看一下Docker 的相关版本信息,如图6-16所示。

图6-16   Docker版本信息

为提升Docker拉取镜像等操作的速度,这里我们可以在设置一下镜像加速,将其镜像仓库地址指向国内的相关站点。对准Windows状态栏的“小鲸鱼”图标(即:Docker图标),单击鼠标右键,在弹出的快捷菜单选择“Settings”菜单项,如图6-17所示。

图6-17   Docker快捷菜单信息

       如图6-18所示,单击“Docker Engine”页,在“registry-mirrors”中添加3个国内镜像地址,单击“Apply & Restart”按钮。

图6-18   Docker快捷菜单信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用exe4j将jar转成exe、java打包exe

1、maven打包 需要配置以下插件&#xff0c;注意skip为false 插件配置中设置 <skip>true</skip> 时&#xff0c;实际上是告诉 Maven 在构建过程中跳过 spring-boot-maven-plugin 插件的执行。也就是说&#xff0c;Maven 在打包时不会将项目打包成可执行的 JAR 文…

MySQL 的事务与多版本并发控制(MVCC)的那些事

什么是事务原子性:一致性隔离性 问题1: 为什么MySQL要使用mvcc实现隔离性而不使用 锁 解决并发问题?持久性 问题2: MySQL 不是磁盘数据库吗,持久化为什么是 redo log 保证的?问题 3: redo log 储存了什么东西,持久化(崩溃恢复是怎么做的?)问题 4 : MySQL 的 bing log (二进制…

【单片机通讯协议】—— 常用的UART/I2C/SPI等通讯协议的基本原理与时序分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、通信基本知识1.1 MCU的参见外设1.2 通信的分类按基本的类型从传输方向上来分 二、UART&#xff08;串口通讯&#xff09;2.1 简介2.2 时序图分析2.3 UART的…

Ceph 手动部署(CentOS9)

#Ceph手动部署、CentOS9、squid版本、数字版本19.2.0 #部署服务:块、对象、文件 一、部署前规划 1、兼容性确认 2、资源规划 节点类型节点名称操作系统CPU/内存硬盘网络组件安装集群节点CephAdm01CentOS94U/8GOS:40G,OSD:2*100GIP1:192.169.0.9(管理&集群),IP2:…

CentOS7 解决ping:www.baidu.com 未知的名称或服务

CentOS7 解决ping&#xff1a;www.baidu.com“未知的名称或服务 在VM查看网络配置 查看虚拟网络编辑器 编辑网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33注意&#xff1a;不同机器的配置文件名可能不相同&#xff0c;通过 ip addr 命令查看 将 ONBOOT 从 no 改…

GPU 进阶笔记(二):华为昇腾 910B GPU

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 1 术语 1.1 与 NVIDIA 术语对应关系1.2 缩写2 产品与机器 2.1 GPU 产品2.2 训练机器 底座 CPU功耗操作系统2.3 性能3 实探&#xff1a;鲲鹏底座 8*910B GPU 主机 3.1 CPU3.2 网卡和网络3.3 GPU 信息 3.3…

[ICCD 2022]Towards Sparsification of Graph Neural Networks

论文网址&#xff1a;[2209.04766] Towards Sparsification of Graph Neural Networks 论文代码&#xff1a;github.com 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#…

人工智能与传统编程的主要区别是什么?

传统编程&#xff1a;开发者预先编写软件行为规则&#xff0c;代码基于程序员定义逻辑处理输入并产生确定输出&#xff0c;具有确定性、手动编写规则和结构化逻辑特点&#xff0c;如垃圾邮件分类程序基于预设关键词等规则。AI 编程&#xff1a;从数据中学习而非手动编写规则&am…

Mac电脑python多版本环境安装与切换

我当前是python3.9.6环境&#xff0c;需要使用3.9.8环境&#xff0c;通过brew安装3.9.8版本&#xff0c;然后通过pyenv切换环境 步骤 1: 安装 pyenv brew install pyenv brew install pyenv-virtualenv 步骤 2: 安装 Python 3.9.8&#xff08;使用 pyenv 安装指定版本的 Pyth…

UE5通过蓝图节点控制材质参数

通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中&#xff0c;控制材质的参数值和向量值

人工智能(AI)简史:推动新时代的科技力量

一、人工智能简介 人工智能&#xff08;AI&#xff0c;Artificial Intelligence&#xff09;是计算机科学的一个分支&#xff0c;旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法&#xff0c;包括机器学习、深度学习、自然语言处理&#xff08;NLP&a…

Github优质项目推荐(第十期)

文章目录 Github优质项目推荐&#xff08;第十期&#xff09;一、【postiz-app】&#xff0c;14.6k stars - 您的终极 AI 社交媒体调度工具二、【lobe-chat】&#xff0c;50.1k stars - AI 聊天框架三、【cobalt】&#xff0c;22.1k stars - 媒体下载器四、【build-your-own-x】…

DeepSeek V3“报错家门”:我是ChatGPT

搜 &#xff1a;海讯无双Ai 要说这两天大模型圈的顶流话题&#xff0c;那绝对是非DeepSeek V3莫属了。 不过在网友们纷纷测试之际&#xff0c;有个bug也成了热议的焦点—— 只是少了一个问号&#xff0c;DeepSeek V3竟然称自己是ChatGPT。 甚至让它讲个笑话&#xff0c;生成…

通过 4 种方法将数据从 OnePlus 传输到Android

概括 由于它们是不同的品牌&#xff0c;因此将数据从 OnePlus 传输到Android是否很困难&#xff1f;也许您可以从这篇介绍 OnePlus 到Coolmuster Android数据传输的 4 个实用解决方案的文章中获得帮助。学习完它们后&#xff0c;您将有一个顺利的转移过程&#xff0c;所以为什…

Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题

问题&#xff1a; java.lang.ClassCastException: class cn.best.scholarflow.framework.system.domain.entity.SysUser cannot be cast to class cn.best.scholarflow.framework.system.domain.entity.SysUser (cn.best.scholarflow.framework.system.domain.…

频域滤波为什么使用psf2otf函数?

MATLAB中circshift函数是psf2otf函数的核心&#xff0c;在MATLAB中circshift函数的原理分析——psf2otf函数的核心直观解释了为什么需要循环移位。 MATLAB提出了psf2otf函数&#xff0c;先做循环移位&#xff0c;再计算离散傅里叶变换。如果有空域的卷积核&#xff0c;通过这个…

计算机网络-L2TP Over IPSec基础实验

一、概述 上次我们进行了标准L2TP的配置&#xff0c;但是在最后我们在进行业务流量访问时看到流量是没有进行加密的&#xff0c;这就导致可能得安全风险&#xff0c;所以这里其实可以退像GRE那样调用IPSec框架来进行加密保护。 拓扑 数据不加密 现在需要配置IPSec&#xff0c;然…

springboot3整合knife4j详细版,包会!(不带swagger2玩)

1. 引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version> </dependency>2. 配置文件 简短必要版 # 配置springd…

Mac 安装Mysql启动Mysql以及数据库的常规操作

Mac 安装Mysql启动Mysql以及数据库的常规操作 一、mysql的安装 1、登录官方网站:dev.mysql.com/downloads/mysql/ 二、查看系统架构 uname -m 在MAC中&#xff1a; 如果输出结果是 x86_64&#xff0c;则表示你的系统是 x86-64 架构。 如果输出结果是 arm64&#xff0c;则表示…

module ‘django.db.models‘ has no attribute ‘FieldDoesNotExist‘

module ‘django.db.models’ has no attribute ‘FieldDoesNotExist’ xadmin报错 原因 django与xadmin版本不匹配。 django==3.2.7 xadmin-django==3.0.2解决方案 在xadmin/view/edit.py的388行改为 from django.core import exceptions if self.request_method ==