当前位置: 首页 > article >正文

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.kler.cn/a/324411.html

相关文章:

  • 【软件测试】一个简单的自动化Java程序编写
  • C++ 的发展
  • 机器学习 决策树
  • 时钟之CSS+JS版
  • C语言编程练习:验证哥德巴赫猜想 进制转换 rand函数
  • centos rich 美观打印日志
  • 基于webComponents的纯原生前端框架
  • Xcode 16 上传AppStore遇到第三方库 bitcode 的问题
  • Python爬虫bs4基本使用
  • Java编程基础:类与对象的探索之旅
  • C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(6)
  • 【球形空间产生器】
  • 解决 Java 中由于 parallelStream 导致的死锁
  • BUG项目管理
  • 【MAC】安装realsense
  • HttpServletRequest简介
  • 美团中间件C++一面-面经总结
  • 25维谛技术面试最常见问题面试经验分享总结(包含一二三面题目+答案)
  • 基于两分支卷积和 Transformer 的轻量级多尺度特征融合超分辨率网络 !
  • 如何组织一场考试并筛选未参加答题的考生?
  • 搜索:如何用 A*搜索算法实现游戏中的寻路功能?
  • Python脚本示例,你可以使用这个脚本来自动化登录网站、选择页面元素和提交表单
  • 『网络游戏』GoLand服务器框架【01】
  • 第 2 章:Vue 组件化编程
  • Cluster Explanation via Polyhedral Descriptions
  • 【性能优化】低配starRocks常驻内存优化