docker简介、安装、基础知识

基础知识

  • Docker简介

1.Docker是一种用于构建、发布及运行应用程序的开源项目,他通过容器化技术简化了应用程序的部署和管理

2.Docker是一个开源的应用容器引擎,基于go语言开发,为应用打包、部署平台,而非单纯的虚拟化技术

3.Docker类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱之间互不影响

4.Docker是一个轻量级的容器,我们可以把环境交给Docker管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上

二、Docker优势:

(1)应用部署

Docker简化了应用程序的部署和管理,通过将应用程序打包到容器中,确保他们在任何环境中都能以一致的方式运行

(2)微服务架构

Docker是微服务架构的理想选择,允许将大型应用程序分解成较小的、独立的模块,从而提高敏捷性和可扩展性

(3)轻量级虚拟化

Docker容器较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省资源系统

(4)运行环境一致性

无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题

(5)可移植性

可以轻松的将docker容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异比如:在本地开发的容器可以无缝部署到云服务器上

(6)高效的资源利用

多个docker容器可以共享主机的操作系统内核,从而更有效地利用系统资源

(7)隔离性

每个服务器都是独立运行的,完全隔离的。避免公用的服务器资源会容易受到其他用户影响

(8)快速的启动部署

可以做到秒级,甚至毫秒级的启动时间,大大节约了开发、测试、部署的时间

(9)易于部署和扩展

能够快速部署新的应用实例,并且可以根据需求轻松的进行水平扩展

(10)DevOps

Docker桥接了开发和运维之间的差距,使团队能够有效的协作并实现DevOps实践

对于开发人员:build once、run anywhere

对于运维人员:configure once、run anything

三、为什么使用Docker

Docker解决了产品多版本迭代之后,不同环境之间的兼容问题;Docker的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的复制过来,在自己的机器上可以运行,在别人的机器上也可以运行

Docker Hub的关键特点和优势

  1. 丰富的镜像资源:涵盖了各种常见的操作系统、编程语言运行时、数据库、Web 服务器等众多应用的镜像。
  2.  官方支持:提供了由 Docker 官方维护的一些重要镜像,确保其质量和安全性。
  3. 社区贡献:开发者们可以自由上传和分享他们创建的镜像,促进了知识和资源的共享。
  4. 版本管理:对于每个镜像,通常都有多个版本可供选择,方便用户根据需求获取特定版本。
  5. 便于搜索:用户可以通过关键词轻松搜索到所需的镜像。

四、认识registry和Harbor

概述:Docker Registry是一个存放镜像的仓库,可以方便的存储、管理和分发镜像。通过将镜像上传到Registry,用户可以在不同环境中快速的下载和运行镜像,大大提高了应用的部署和管理效率。

Registry简介:

  1. 镜像仓库:Docker Registry是一个集中式的镜像仓库,可以存储、管理和分发镜像。它通常被部署在互联网服务器或者云端,使得用户可以在任何地方下载和运行镜像
  2. 跨环境一致性:由于在多个环境中使用的是相同的镜像,因此可以确保应用在不同环境中的一致性。用户只需要在开发环境中制作好镜像,并将其上传到Registry,就可以在生产环境中直接下载并运行该镜像
  3. 与Docker完美集成:Docker本身已经与Registry完美集成,用户可以通过简单的Docker命令来上传、下载和运行镜像,无需了解Registry的具体细节
  4. 开源项目:Registry本身是一个开源项目,任何人都可以下载并部署自己的私有Registry

Harbor(英文单词:港湾)简介:

主要功能和特点:

  1. 基于角色的访问控制(RBAC):可以为不同的用户和用户组分配不同的权限,增强了安全性和管理的灵活性
  2. 镜像复制:支持在不同的harbor实例之间复制镜像,方便在多个数据中心或环境中分发镜像
  3. 图形化用户界面(UI):提供了直观地Web界面,便于管理镜像仓库、项目、用户等
  4. 审计日志:记录了对镜像仓库的各种操作,有助于追踪和审查活动
  5. 垃圾回收:可以清理不再使用的镜像,节省存储空间
  • 学习Registry与Harbor的应用场景

(1)像Docker Hub、阿里云这样的公共镜像仓库有的时候用起来不太方便,Docker Hub网速太慢,阿里云需要花钱买主机

(2)涉及内部资源的保密性,有的机构不太可能将镜像提供给公网,因此需要创建一个基于内部项目镜像,构造本地私人仓库供给团队使用

六、Registry与harbor仓库的优势:

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Registry来说,它具有更多的优势:

  1. 提供分层传输机制

Docker镜像是分层的,而如果每次传输都使用全量文件(所以用ftp的方式并不适合),显然不经济,必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象

  1. 提供Web界面,优化用户体验

只用镜像的名字来进行上传下载显然很不方便,需要一个用户界面可以支持登录、搜索功能,包括区分公有、私有镜像

  1. 支持水平扩展集群

当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解

  1. 良好的安全机制

企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性

  1. Harbor提供基于角色的访问控制机制,并通过项目对镜像进行组织和访问权限的控制

私有库的应用场景:

七、Docker仓库的工作原理:

Index docker:索引服务,负责并维护有关用户、账户、镜像的校验以及公共命名空间的信息。

Registry docker 仓库:是镜像和图表的仓库

Registry Client docker:充当registry客户端来维护、推送和拉取,以及客户端的授权

Docker守护进程(docker daemon):负责管理镜像、容器、容器网络、数据卷等

Client:负责发送docker操作指令,日常主要通过client完成镜像和容器的管理镜像

Docker仓库(docker registry)

用于存储和分发docker镜像的集中式存储库

负责存储docker镜像,并处理docker pull/push命令

实验操作

一、Docker安装

1.选择安装的平台:docker要求centos系统的内核版本高于3.0

2.查看系统版本:

# cat /etc/os-release

3.更新yum源:

# Yum update

4.卸载旧版本:

5.安装yum工具:

6.设置镜像仓库:

注:拉取国内阿里云的速度比较快速

7.更新一下yum索引:

注:yum makecache fast命令解析

目的:以更快的方式创建或更新yum软件包的元数据缓存

清除旧的元数据缓存:首先,yum将删除旧的元数据缓存,以确保下一步更新的是最新的数据而不是旧数据

注意的是:yum makecache fast 命令创建的元数据缓存可能不是完整的。因为只下载了部分的元数据,所以某些软件包的详细信息可能不可用。这意味在某些情况下,您可能无法获取到完整的软件包描述、依赖关系

总的来说:yum makecache fast 命令的作用是以更快的方式创建或更新yum软件包的元数据缓存。它使用较少的持久化哈希来下载元数据,以提高命令的执行速度,但可能会导致某些软件包的详细信息不完整

8.安装docker:

9.启动docker并查看状态:

10.测试docker是否运行:(测试hellow-world)

11.查看刚刚下载的镜像:

二、Docker的基础命令及使用:

1.帮助命令:

1.1查看docker的版本信息:docker version

1.2查看docker的系统信息,包括镜像和容器的数量:docker info

1.3帮助命令:# docker 命令 --help

2.镜像命令

2.1查看所有本地主机的镜像:

解析:

REPOSITORY:镜像仓库源

TAR:镜像标签

IMAGE ID:镜像的id

CREATED:镜像创建时间

SIZE:镜像的大小

参数:

-a, --all 显示所有镜像(docker images -a)

-q, --quiet 仅显示镜像id(docker images -q)

2.2搜索镜像

参数:

--filter-stars=3000   搜索出来的镜像修饰stars大于3000的

2.4下载镜像

# docker pull 镜像名[:tag]

注:如果不写tag,默认为最新版本;分层下载,docker images的核心,联合文件下载

测试:

至此,mysql镜像下载完成

2.5删除镜像

(1)# docker rmi -f 镜像id                      删除指定镜像

测试:

(2)# docker rmi -f 镜像id 镜像id 镜像id        删除多个镜像(空格分开)

(3)# docker rmi if $(docker images -aq)            删除全部镜像

2.6上传镜像

# docker push 镜像名:tag

2.7保存镜像为一个压缩包

# docker save -o 保存的目录文件名称 镜像名

2.8加载镜像

2.9镜像标签

# docker tag 源镜像名 想要生成新的镜像名

3.容器命令:

3.1下载centos镜像:(有了镜像才可以去创建容器)

3.2新建容器

# docker run [可选参数] image(镜像名):版本号(默认最新版本)

参数说明:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P(大写P): 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-name=“nginx-lb”: 为容器指定一个名称;

-dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

-dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h “mars”: 指定容器的hostname;

-e username=“ritchie”: 设置环境变量;

-env-file=[]: 从指定文件读入环境变量;

-cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;

-m : 设置容器使用内存最大值;

-net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container四种类型;

-link=[]: 添加链接到另一个容器;

-expose=[]: 开放一个端口或一组端口;

-volume , -v: 绑定一个卷;

--rm  容器关闭后就被删除,一般用于测试

练习:

例:使用Docker镜像Nginx:lastest以后台的模式启动一个容器,并命名为mynginx

例:使用镜像Nginx,以后台模式启动一个容器,并将容器的80端口映射到主机的8080端口

例:查看镜像支持的环境变量

(5)使用镜像centos以交互模式启动一个容器,在容器内执行/bin/bash命令

退出容器,退出到主机

退出并停止容器

退出但不停止(现在运行的容器是两个)

Ctrl+P+Q

3.3构建自己的Docker镜像

  1. 基于已有镜像创建

# docker commit [选项] 容器id/名称 仓库名称:[标签]

  1. 基于本地模版创建

通过导入操作系统模版文件生成新的镜像

使用wget命令导入为本地镜像

导入成功可查看本地镜像信息

  1. 基于dockerfile创建

# docker build [选项] PATH |URL |.

选项:

-t:指定镜像的名称和标签

-f:指定Dockerfile的路径或URL

-no-cache:不使用缓存构建镜像

-build-arg:指定构建镜像时使用的参数

-force-rm:在构建镜像时删除中间容器

命令示例:

(1)从当前目录构建镜像

Docker build -t zyherhuo .

  1. 从指定路径构建镜像

Docker build -t zyherhuo /path/to/dockerfile

  1. 指定构建镜像的目标阶段

Docker build -t zyherhuo -target build.

练习:构建SSH镜像

新建一个sshd目录用于存放dockerfile及其所需文件,创建dockerfile文件

新建镜像并查看:

3.4Dockerfile MAINTAINER和LABEL指令语法解析

任何文件系统的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限,文件拥有者等。Docker提供了MAINTAINER和 LABEL用于处理镜像的元数据

(1)MAINTAINER语法:MAINTAINER <name>

解析:指定镜像作者信息,即镜像的Author属性。LABEL是一个更灵活的版本,可以代替MAINTAINER,LABEL可以设置任何需要设置的元数据

MAINTAINER示例:

进入Docker目录下,创建dockerfile文件

基于dockerfile构建镜像

通过docker inspect 命令查看镜像Author的值

(2)LABER语法:

进入/root/nginx目录下,创建dockerfile文件

基于dockerfile构建镜像

通过docker inspect命令查看镜像Config.Lables.maintainer的值

3.5列出所有运行的容器

# docker ps

参数:

-a    列出当前正在运行的加上历史上运行过和没有运行的容器

-n=?  显示最近运行的容器个数

-p    只显示容器的编号(与docker image -aq相同)

测试:

3.6删除容器

  1. # docker rm 容器id

删除指定的容器,不能删除正在运行的容器,若想强制删除,使用rm -f

  1. # docker rm -f $(docker ps -aq)       删除所有的容器
  2. # docker ps -a -q|xargs docker rm      删除所有容器

3.7启动和停止容器的操作

# docker start 容器id    启动容器

# docker restart 容器id   重启容器

# docker stop 容器id 停止当前正在运行的容器

# docker kill 容器id               强制停止当前容器

3.8后台启动容器:

# docker run -d centos       后台启动centos

3.9暂停与恢复一个运行的容器

# docker pause/unpause name

3.10容器自启动

未有的容器

# docker run [选项] 名称 --restart=always 镜像

已有的容器

3.11查看容器内部进程信息:

3.12进入当前正在运行的容器

(1)# docker exec        进入容器后开启一个新的终端,可以在里面操作

(2)# docker attach      进入容器正在执行的终端,不会启动新的进程

3.13重新启动关闭的容器

# docker start 容器id

3.14从容器内拷贝文件到主机

# docker cp 容器id:容器内路径 目的主机的路径

(1)进入容器并在容器内路径下新建文件

(2)从容器内拷贝文件到主机

测试结果:

3.15查看系统CPU状态:

# docker stats [容器id]

3.16查看日志:

# docker logs -tf --tail 容器id

参数:

-t:打印时间

-f:实时追踪日志

--tail:显示指定的日志条数

3.18数据卷

概念:数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器

特点:

可供容器使用的特殊目录,可以在容器之间共享和重用

对数据卷的修改会立即生效,对数据卷的更新不会影响镜像

卷会一直存在,直到没有容器使用

类型:

  1. 宿主机数据卷:直接在宿主机的文件系统中但是容器可以访问
  2. 命名的数据卷:磁盘上Docker管理的数据卷
  3. 匿名数据卷

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录

操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html

数据卷操作命令

(1)挂载数据卷

-v html:/root/html:把html数据卷挂载到容器内的/root/html这个目录

(2)创建数据卷

# docker volume create 数据卷名称

创建数据卷之后默认会存放在一个目录下/var/lib/docker/volumes/数据卷名称/_data

(3)查看数据卷的详细信息

# docker volume inspect 数据卷名称

(4)查看全部数据卷

# docker volume ls

(5)删除数据卷

# docker volume rm 数据卷名称

(6)应用数据卷

当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建

# docker run -v 数据卷名称:容器内部路径 镜像id

4.练习

安装Nginx

4.1搜索镜像:

4.2下载镜像:

4.3查看所有镜像:

4.4启动Nginx:

4.5查看是否启动:

4.6运行测试:

关闭防火墙:systemctl stop firewalld

4.7公网ip:3344可以在浏览器访问

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

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

相关文章

【Redis技术进阶之路】「原理分析系列开篇」探索事件驱动枚型与数据特久化原理实现(数据持久化的实现RDB)

揭秘高效存储模型与数据结构底层实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 Redis数据持久化的必要Redis数据持久化的实现RDB的持久化机制RDB文件的创建与载入SAVEBGSAVESAVE与BGSA…

基于SpringBoot+Vue的社区智慧消防管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Python数据分析和可视化详解

Python数据分析和可视化详解 Python 是当前最受欢迎的数据分析和可视化工具之一。凭借其简单的语法和强大的第三方库&#xff0c;Python 为数据科学家、分析师和工程师提供了广泛的工具&#xff0c;用于处理、分析和展示数据。本文将介绍如何使用 Python 进行数据分析与可视化…

8.12 矢量图层面要素单一符号使用五(点符号填充)

8.12 矢量图层面要素单一符号使用五(点符号填充)_mapguide edit composite symbolization 使符号填充面-CSDN博客 目录 前言 点符号填充&#xff08;Point pattern fill&#xff09; QGis设置面符号为点符号填充&#xff08;Point pattern fill&#xff09; 二次开发代码实…

数学建模-线性规划讲解(Matlab版本)

引言 相信不少小伙伴刚开始接触数学建模时&#xff0c;第一个学习的算法就是运筹学的重要分支--数学规划&#xff0c;而数学规划当中重要的分支就是线性规划了。在这里笔者参考了司守奎和孙玺菁老师的《数学建模算法与应用》(第三版&#xff09;这本书&#xff0c;以此来讲讲关…

【HTML5】html5开篇基础(3)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

多元函数微分学基础题

这是基础题&#xff01;&#xff01;原则上必须要在第一轮初学并做完课后习题之后再做这个基础题&#xff0c;不能有错误&#xff08;马虎大意除外&#xff09;或无法解答。如有错误&#xff0c;该单元需要重学&#xff01;&#xff01; 多元函数微分学填空题 一、填空题 如…

在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型

在深度学习模型的训练过程中&#xff0c;学习率作为一个关键的超参数&#xff0c;对模型的收敛速度和最终性能有着重大影响。传统方法通常采用统一的学习率&#xff0c;但随着研究的深入&#xff0c;我们发现为网络的不同层设置不同的学习率可能会带来显著的性能提升。本文将详…

基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、停车场管理微…

巴鲁夫rfid读头国产平替版——高频RFID读写器

随着RFID技术的不断发展&#xff0c;国内RFID企业的数量也在不断地变多&#xff0c;国产RFID读写器的质量也越来越高。具有着价格实惠、质量可靠等特点&#xff0c;成为了可平替国外RFID产品的首要选择。健永科技的高频RFID读写器JY-H830&#xff0c;是一款可平替巴鲁夫rfid读头…

基于SSM的“实习支教中小学学校信息管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“实习支教中小学学校信息管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 主页 注册页面 师资力量界面 个…

机器学习(5):机器学习项目步骤(二)——收集数据与预处理

1. 数据收集与预处理的任务&#xff1f; 为机器学习模型提供好的“燃料” 2. 数据收集与预处理的分步骤&#xff1f; 收集数据-->数据可视化-->数据清洗-->特征工程-->构建特征集和数据集-->拆分数据集、验证集和测试集 3. 数据可视化工作&#xff1f; a. 作用&…

【ArcGIS Pro实操第三期】多模式道路网构建(Multi-model road network construction)原理及实操案例

ArcGIS Pro实操第三期&#xff1a;多模式道路网构建原理及实操案例 1 概述1.1 原理 2 GIS实操2.1 新建文件并导入数据2.2 创建网络数据集2.3 设置连接策略&#xff08;Setting up connectivity policies&#xff09;2.4 添加成本&#xff08;Adding cost attributes&#xff09…

使用dockerfile来构建一个包含Jdk17的centos7镜像(构建镜像:centos7-jdk17)

文章目录 1、dockerfile简介2、入门案例2.1、创建目录 /opt/dockerfilejdk172.2、上传 jdk-17_linux-x64_bin.tar.gz 到 /opt/dockerfilejdk172.3、在/opt/dockerfilejdk17目录下创建dockerfile文件2.4、执行命令构建镜像 centos7-jdk17 : 不要忘了后面的那个 .2.5、查看镜像是…

毕业设计——springboot+netty+websocket实现一个简单的ChatGpt机器人聊天

作品详情 WebSocket是html5开始浏览器和服务端进行全双工通信的网络技术。在该协议下&#xff0c;与服务端只需要一次握手&#xff0c;之后建立一条快速通道&#xff0c;开始互相传输数据&#xff0c;实际是基于TCP双向全双工&#xff0c;比http半双工提高了很大的性能&#x…

AURIX单片机示例:开发入门与点亮LED

文章目录 目的模板工程Blinky_LED示例链接总结 目的 这个例程比较简单&#xff0c;主要通过这个例程来介绍 AURIX™ Development Studio(ADS) 和 iLLD 库来开发 AURIX 系列单片机一些入门的内容。一些更为基础的资料等内容可以参考下面文章&#xff1a; 《英飞凌 AURIX TriCo…

翻译:Recent Event Camera Innovations: A Survey

摘要 基于事件的视觉受到人类视觉系统的启发&#xff0c;提供了变革性的功能&#xff0c;例如低延迟、高动态范围和降低功耗。本文对事件相机进行了全面的调查&#xff0c;并追溯了事件相机的发展历程。它介绍了事件相机的基本原理&#xff0c;将其与传统的帧相机进行了比较&am…

完全二叉树的节点个数 C++ 简单问题

完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层&#xff0c;则该层包含 1~ 2h 个节点。 示例 1&#xff…

基于微信小程序的智慧社区的设计与实现

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

使用 PowerShell 命令更改 RDP 远程桌面端口(无需修改防火墙设置)

节选自原文&#xff1a;Windows远程桌面一站式指南 | BOBO Blog 原文目录 什么是RDP&#xfffc;开启远程桌面 检查系统版本启用远程桌面连接Windows 在Windows电脑上在MAC电脑上在Android或iOS移动设备上主机名连接 自定义电脑名通过主机名远程桌面使用Hosts文件自定义远程主…