docker简介、安装、基础知识

news2024/9/29 18:04:43

基础知识

  • 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.coloradmin.cn/o/2177486.html

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

相关文章

计算机毕业设计 办公用品管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

C++(Qt)软件调试---内存调试器Dr.Memory(21)

C(Qt)软件调试—内存调试器Dr. Memory&#xff08;21&#xff09; 文章目录 C(Qt)软件调试---内存调试器Dr. Memory&#xff08;21&#xff09;[toc]1、概述&#x1f41c;2、安装Dr.Memory&#x1fab2;3、命令行使用Dr.Memory&#x1f997;4、Qt Creator集成使用Dr.Memory&…

预计OpenAI在新一轮融资后估值可达1500亿美元!Hugging Face平台托管模型数量破100万|AI日报

文章推荐 HuggingChat macOS版正式发布&#xff01;文章内附体验地址&#xff01;我国打造糖尿病专用AI模型&#xff5c;AI日报 今日热点 OpenAI在新一轮融资后估值可能达到1500亿美元 知情人士表示&#xff0c;Thrive Capital将在OpenAI目前的65亿美元融资轮中投资超过10亿…

如何高效管理知识产权全链条?

为了有效保护企业的创新成果&#xff0c;确保技术创意的顺利转化&#xff0c;以及高效管理知识产权案件&#xff0c;建立一套完善的知识产权管理体系至关重要。对于企业而言&#xff0c;如何有效地管理知识产权的各个环节&#xff0c;从研发项目到技术创意&#xff0c;再到提案…

排序(交换排序:快排)

快速排序&#xff1a; 写快排的注意事项 1.单趟排序hoare 2.不写优化只说优化就行 理想的情况下&#xff1a;每次排序都是二分&#xff0c;直到二分到最后&#xff0c;那就相当于递归高度次(logN)&#xff0c;每一层单趟排都是O(N)&#xff0c;时间复杂度O(NlogN) 空间复杂度就…

PHP程离禁用一段IP的写法示例

PHP程离禁用一段IP的写法示例 。 在PHP中&#xff0c;如果你想禁用一段IP地址的访问&#xff0c;你可以使用$_SERVER[REMOTE_ADDR]来获取访问者的IP地址&#xff0c;然后通过判断IP地址是否在你想要禁用的范围内来决定是否拒绝服务。 以下是一个简单的例子&#xff0c;展示了…

net Core aspx视图引擎 razor视图引擎

视图引擎 》》定义&#xff0c;什么是视图引擎 视图引擎就是&#xff0c;将服务器端模板转换为HTML标记&#xff0c;并在控制器的操作方法触发时在web浏览器中呈现 现在都推荐 Razor视图引擎了&#xff08;也是默认视图引擎&#xff09;&#xff0c;aspx引擎不推荐了。 ASPX …

AI新掌舵:智享AI直播系统:直播界的新浪潮还是真人主播的终结者?

AI新掌舵&#xff1a;智享AI直播系统&#xff1a;直播界的新浪潮还是真人主播的终结者&#xff1f; 在数字化浪潮的汹涌澎湃中&#xff0c;人工智能&#xff08;AI&#xff09;以其前所未有的速度渗透至各行各业&#xff0c;其中&#xff0c;直播领域正经历着一场前所未有的变革…

javascript:冻结对象

1 作用 冻结一个对象&#xff0c;使对象不可扩展。 2 特性 对象的属性不可再被新增、删除对象的属性的值不可再被修改对象的属性的描述符中任意配置项都不可被重新定义 3 代码示例 3.1 冻结对象 Object.freeze() 代码如下&#xff1a; use strict let initialData {a: 1…

C#案例 | 基于C#语言在Excel中进行二次开发(一):简单系统搭建:打印输出“Hello Excel C#”

基于C#语言在Excel中进行二次开发&#xff08;一&#xff09;&#xff1a;简单系统搭建&#xff1a;打印输出”Hello Excel & C#” 实现效果第一步&#xff1a;前期准备第二步&#xff1a;打开VS 2022&#xff0c;创建项目第三步&#xff1a;程序界面设计 实现效果 在Exce…

【大模型】通俗解读变分自编码器VAE

目录 写在前面 一、VAE结构 二、损失函数 三、代码实现 1.训练代码 2.推理生成图片 3.插值编辑图片 四、总结 写在前面 论文地址&#xff1a;https://arxiv.org/abs/1312.6114 大模型已经有了突破性的进展&#xff0c;图文的生成质量都越来越高&#xff0c;可控性也越来…

cesium渲染的3Dtiles的模型下载!glb模型文件下载!

前端开发测试或者学习cesium的时候最难最麻烦就是找到一个合适的模型&#xff0c;现在就直接给各位放几个可以满足我们测试使用的模型文件。 模型文件下载—香港3DTiles模型文件 某盘 通过百度网盘分享的文件&#xff1a;hk-效果图.png&#xff0c;hk.zip等2个文件 链接&…

react中的ref三种形式

1&#xff0c;字符串形式 <!-- 创建盒子 --><div id"test"></div> <script type"text/babel">class Demo extends React.Component{render(){return(<div><input type"text" refinput1 /><button onCl…

奔驰EQS450suv升级增强AR抬头显示HUD案例分享

以下是奔驰 EQS450 SUV 升级增强版 AR 抬头显示的一般改装案例步骤及相关信息&#xff1a; 配件&#xff1a;通常包括显示屏、仪表模块、饰板等。 安装步骤&#xff1a; 1. 拆下中控的仪表。 2. 在仪表上预留位置切割出合适的孔位&#xff0c;用于安装显示器。 3. 将显示器…

宝塔部署若依前端出现502解决方法

一、前言 ‌若依系统是一个基于Java语言的开源项目&#xff0c;旨在帮助开发者减少开发时间&#xff0c;特别适用于需要快速开发出一套具有用户管理、菜单管理、权限管理、定时任务、日志管理等功能的简单系统。‌ 系统分为前后端分离、分布式等架构 部署教程如下&#xff1a…

单体到微服务架构服务演化过程

架构服务化 聊聊从单体到微服务架构服务演化过程 单体分层架构 在 Web 应用程序发展的早期&#xff0c;大部分工程是将所有的服务端功能模块打包到单个巨石型&#xff08;Monolith&#xff09;应用中&#xff0c;譬如很多企业的 Java 应用程序打包为 war 包&#xff0c;最终会形…

软文代发高效率推广方式解析-华媒舍

在这个时代&#xff0c;软文代发成为了一种非常实用的推广方法。如何有效地开展软文代发营销推广&#xff0c;并不是每个人都知道的。下面我们就以高效软文代发推广方式大曝光为主线&#xff0c;为书友详细介绍科谱有关的内容。 一、什么叫软文代发 软文代发是指由企业或个人必…

引入 LangChain4j 来简化 LLM 与 Java 应用程序的集成

作者&#xff1a;来自 Elastic David Pilato LangChain4j 框架于 2023 年创建&#xff0c;其目标如下&#xff1a; LangChain4j 的目标是简化将 LLM 集成到 Java 应用程序的过程。 LangChain4j 提供了一种标准方法&#xff1a; 根据给定内容&#xff08;例如文本&#xff09;创…

VSCode编程配置再次总结

VScode 中C++编程再次总结 0.简介 1.配置总结 1.1 launch jsion文件 launch.json文件主要用于运行和调试的配置,具有程序启动调试功能。launch.json文件会启用tasks.json的任务,并能实现调试功能。 左侧任务栏的第四个选项运行和调试,点击创建launch.json {"conf…

AI变现N种方式,新手小白必看!【保姆级教程】

风口&#xff01;风口&#xff01;风口&#xff01; 终于不用再抱怨 “我们这代人啊&#xff0c;什么也没赶上” 因为我们现在正处于风口之上&#xff01; 在当今数字化的时代 AI 绘画正以惊人的速度崛起 并向各行各业渗透 既然阻止不了时代的变化 那就让它为我们所用 …