Docker专题-入门与运维

2023-11-10

Docker专题-基础知识

1 发展缘由

  1960年IBM开始推出大型主机虚拟化,虚拟机虚拟化主要代表是Xen、Kvm,至到2013 年 3 月 Docker出世,一种容器技术组件。
  传统虚拟化一般通过硬件来模拟实现,也可以通过操作系统软件来实现。而容器技术则充分利用OS本身已有的机制与特性,更加优雅的实现远超传统虚拟机的轻量级虚拟化。被称为”新一代的虚拟化“技术,并将基于容器打造的云平台称为“容器云”。

Docker?

  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
  Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低,大量节省宿主机资源。
  17.03版本后分为CE-Community Edition社区版和EE-Enterprise Edition企业版。
  Docker的构想是要实现“Build,Ship and Run Any App, Anywhere",即通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。应用组件,既可以是一个Web应用、一个编译环境、一套数据库平台服务,甚至是一个操作系统或集群。
  Docker提供了各种容器管理工具(如分发、版本、移植等),让用户无须关注底层的操作,更加简单明了地管理和使用容器;其次,Docker通过引入分层文件系统构建和高效的镜像机制,降低了迁移难度,极大地改善了用户体验。用户操作Docker容器就像操作应用自身一样简单。

为什么要使用Docker?

那些典型的应用场景?
  Web 应用的自动化打包和发布。
  自动化测试和持续集成、发布。
  在服务型环境中部署和调整数据库或其他的后台应用。
如何安装?
  1)确定安装版本
  Docker: https://hub.docker.com/_/docker
在这里插入图片描述
  标注:免费的社区版:ce 收费的企业版:ee 轻量级版:alpine
   2)安装(在线)
  2.1)设置 Docker 仓库(或者#安装yum install\ yum update)

	yum install -y yum-utils device-mapper-persistent-data lvm2

  2.2)检查是否存在Docker,并且删除旧版本

	yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

  2.3)设置stable镜像仓库(阿里云)

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

  2.4)安装最新版本的 Docker

	yum install docker-ce docker-ce-cli containerd.io
     或 安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
	yum list docker-ce --showduplicates | sort -r
	sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io
	[root@iZm5eblmh3oa6nk0bpvg19Z ~]# yum list docker-ce --showduplicates | sort -r 
	Installed Packages 
	docker-ce.x86_64 3:20.10.9-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.8-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.7-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.6-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.5-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.4-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.3-3.el8 docker-ce-stable 
      如上:VERSION_STRING=20.10.9

  2.5)启动 systemctl start docker
  2.6)通过运行hello-world镜像来验证Docker引擎是否正确安装 docker run hello-world
  2.7)查询docker版本 docker -v
  2.8)删除安装包\删除镜像、容器、配置文件等内容

	yum remove docker-ce      
	rm -rf /var/lib/docker

如何工作?
  CS架构,client-server模式,client端负责处理用户输入的各种命令,比如docker build、docker run;server端[docker demon]负责任务的执行。
  docker的工作流程:
  1-docker build: docker daemon创建“可执行程序”image
在这里插入图片描述

  2-docker run: docker daemon接收到命令找到具体的image,然后加载到内存开始执行。containers:容器是独立运行的一个或一组应用,是镜像运行时的实体
在这里插入图片描述

  3-docker pull:docker daemon接收到命令后向docker registry发送image下载请求。docker registry存放各种image,image的公共仓库docker Hub。
在这里插入图片描述

docker的底层实现
  NameSpace:命名空间,容器隔离的基础。NameSpace机制是一种资源隔离方案,将机器全局资源[User,Mnt,Network,UTS,IPC,Pid等]划分至某个特定的NameSpace,各个NameSpace下的资源互不干扰,形成一个独立的文件操作系统。
  Control groups:cgroup控制容器中进程对资源[CPU、内存、磁盘、网络]的访问,控制容器对系统资源的消耗。
  unionfs 联合文件系统:典型如aufs/overlayfs,分层镜像实现的基础。
  参考:https://blog.csdn.net/crazymakercircle/article/details/120747767

2 架构

在这里插入图片描述
概念说明
  Docker 镜像(Images)-用于创建Docker容器的模板,比如 Ubuntu 系统。
  Docker 容器(Container)-容器是独立运行的一个或一组应用,是镜像运行时的实体。
  Docker 客户端(Client)- Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
  Docker 主机(Host)-一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
  Docker Registry-Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
  Docker Hub(https://hub.docker.com) -提供庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
  Docker Machine-Docker Machine是一个简化Docker安装的命令行工具,通过简单的命令行可在相应的平台上安装Docker,如VirtualBox、 Digital Ocean、Microsoft Azure。

3 基于Docker搭建私有镜像仓库

  参考 niceyoo 博客:https://www.cnblogs.com/niceyoo/p/13058238.html

4 常见工具

  1)BusyBox是一个集成了一百多个最常用Linux命令(如cat、echo、grep、mount、telnet等)的精简工具箱,被誉为“Linux系统的瑞士军刀"。BusyBox可运行于多款POSIX环境的操作统中,如Linux(包括Android)、Hurd、FreeBSD等。
docker pull busybox:latest docker run -it busybox
  2)Jenkins持续集成和交付工具:持续集成(Continuous Integration,CI)完成开发团队定期进行集成验证,集成通过自动化的构建来完成,包括自动编译、发布和测试,从而尽快地发现错误。特点:鼓励自动化的周期性的过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都由自动完成的,减少人工干预;需要有持续集成系统的支持,包括代码托管机制支持以及集成服务器等。持续交付(Continuous Delivery,CD)则强调产品在修改后到部署上线的流程要敏捷化、自动化。部署上线的简易性。

5 常见命令

  基本命令

	启动docker:systemctl start docker 
	停止docker:systemctl stop docker 
	重启docker:systemctl restart docker 
	查看docker状态:systemctl status docker 
	开机启动:systemctl enable docker 
	当前系统docker信息:docker info 
	列举出所有的容器:docker ps -a 
	停止容器:docker start 容器ID或容器名 
	直接关闭容器:docker kill 容器ID或容器名 
	重启容器:docker restart 容器ID或者容器名 
	删除容器:docker rm 容器ID或者容器名 
	删除镜像:docker rmi -f 镜像名1:TAG  (先删除容器,当镜像无容器时再删除镜像)
	查看镜像:docker image  或  【docker images|grep redis|grep redis】
			-a :列出本地所有的镜像(含历史映像层)  -q :只显示镜像ID
	查询仓库中镜像:docker search redis
	拉取镜像:docker pull redis:latest
	查看镜像/容器/数据卷所占的空间:docker system df

运行中命令:

	1 启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
 	 创建容器:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
		OPTIONS:--name 容器新名字
      			 -d 后台运行容器并返回容器ID,即启动守护式容器(后台服务)
				-i以交互模式运行容器,通常与-t 同时使用; 
				-t为容器重新分配伪输入终端,即启动交互式容器(前台有伪终端,等待交互);
				-p 指定端口映射  -P 随机端口映射
    	COMMAND:
			例如运行redis容器:$docker run -itd --name redis-automation 
			-p 6379:6379 redis redis-server --appendonly yes
 	2 进入正在运行的容器:docker exec -it 容器ID /bin/bash
	3 容器→主机文件拷贝:docker cp 容器ID:容器内目录 主机目录
	4 导入和导出容器(快照)[export导出容器的内容为tar归档文件;import 从tar归档文件创建新的文件系统再导入为镜像]。
     	案例: docker export 容器ID > 文件名.tar
		cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
	 5 存出和载入容器(备份):
    	案例: docker save -o 文件名.tar 镜像名:镜像版本号
		docker load -i 文件名.tar 或  docker load < 文件名.tar

  说明:save/load:保存、加载容器,保留所有的历史记录和元数据信息;docker import/export:导入、导出容器快照,可以重新指定标签等元数据信息,仅保存容器当时的快照状态。

日志相关:

   $docker logs [OPTIONS] CONTAINER
   Options:--details 显示更多的信息   -f, --follow跟踪实时日志
           --since string 显示timestamp之后的日志或相对时间,如42m(即42分钟)
           --tail string 日志末尾显示多少行日志,默认是all
           -t, --timestamps显示时间戳
           --until string 显示timestamp之前的日志或相对时间,如42m(即42分钟)
  	如:$docker logs -f -t --since="2020-02-08" --tail=50 CONTAINER_ID
	$docker logs -t --since="2020-08-08T13:23:37" --until 
			"2020-08-09T12:23:37" CONTAINER_ID
	$docker logs --since 30m CONTAINER_ID

6附录

  英文官网   镜像查询   中文官网    docker-ce github

docker中的三剑客
  machine、compose和swarm。
  Machine是一个简化Docker安装的命令行工具,对docker运行环境进行安装与管理;
  compose是用来定义和运行一个或多个容器运行和应用的工具,负责实现对基于docker容器的多
应用服务的快速编排,简化容器镜像的构建以及容器的运行,compose 使用 YAML 文件来定义多
容器之间的关系。应用案例:Web负载均衡、大数据Spark集群。
  Swarm是社区提供的原生支持Docker集群的工具,本身不是很成熟,不建议用在生产环境。
Kubernetes:
  开源容器集群管理系统,基于go语言,底层基于docker、rkt等容器技术,提供强大的应用管理和资源调度能力。可轻松搭建和管理一个可扩展的生产级别的容器云。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker专题-入门与运维 的相关文章

随机推荐

  • mysql开启事件调度失败_MySQL事件调度器无效的问题原因以及解决方法

    最近写了个定时事件 发现无法执行 先在my ini中加了配置event scheduler ON 重启MySQL无效 在navicat中直接执行 SET GLOBAL EVENT SCHEDULER ON 会报错 错误信息是 Error C
  • https://app.hackthebox.com/machines/Soccer

    https app hackthebox com machines Soccer kwkl kwkl cat etc hosts 1 127 0 0 1 localhost 127 0 1 1 kwkl kwkl kwkl The foll
  • 基本术语(告诉你西瓜书为什么叫西瓜书)

    为什么这本 机器学习 封面会有很多西瓜 为什么要叫他西瓜书 就因为封面是西瓜 因为所有的这些个基本术语的理解和后续一些问题的解释以及比喻 周大大都是用西瓜来做比喻滴 通俗易懂 恰到好处 注意 下面只做我归纳的简单介绍 如有不全 可以去百度一
  • 算法设计与分析—贪心法求解背包问题C++(学习笔记)

    用贪心法求解如下背包问题的最优解 有7个物品 重量分别为 2 3 5 7 1 4 1 价值分别为 10 5 15 7 6 18 3 背包容量W 15 写出求解过程 include
  • 关于自研maven依赖在idea中导入失败

    Could not find artifact cn bugstack middleware db router spring boot starter jar 1 0 1 SNAPSHOT 解决方法 先下载 GitHub Adzc zh
  • js中import报错Uncaught SyntaxError: Unexpected identifier

    不管导入什么都说 意外的标识符 网上有解释说仔细看标点的就是说你不细心 这确实是方法 不过import那个错基本上并不是 先说解决方法 你需要babel编译一下 webpack打包然后就没有这个错了 然而我今天一不小心做了死 一直在报那个错
  • Java原生代码连接MySQL数据库

    本章我们介绍 如何用java原生代码实现连接MySQL数据库并实现基本的增 删 改 查操作 为了便于演示 首先我们使用Navicat Premium新建一个user表并添加如下数据 我们需要导入连接MySQL所需要的jar包 jdbc驱动包
  • 反射型XSS、存储型XSS和DOM型XSS的简介及XSS常见payload构造及变形

    渗透学习 XSS跨站脚本之XSS基础 文章目录 渗透学习 前言 本文只做学习用途 严禁利用本文提到的技术进行非法攻击 否则后果自负 本人不承担任何责任 一 XSS漏洞原理 二 XSS分类 1 反射型XSS 2 存储型XSS 3 DOM型XS
  • PPT制作 ---------插入图片背景颜色与模板的背景颜色不一致

    今天在制作ppt时候 遇到插入图片背景颜色与模板的背景颜色不一致 这样做出来效果不好 在网上查了攻略后 可以利用ppt自带的图片删除背景来调节 一顿操作后 记下来说不定以后工作时候需要使用
  • Unity人形动画反向动力学IK动画实现

    什么是反向动力学 以手掌移动为例子 正向动力学 这个 力 是由你的身体躯干发出的 改变你的手臂位置 带动你的手掌位置移动 反向动力学 这个 力 是直接在你的手掌上 直接改变你手掌的位置 并且通过手臂进而带动整个身体 力 传递的方向是相反的所
  • Java反射使用示例

    当我们使用 Java 反射时 有时需要在运行时动态地调用某个类的方法 例如使用配置文件指定要调用的方法 或者根据用户输入来决定调用哪个方法等 下面我们就来看几个动态调用方法的例子 调用无参方法 假设有一个类名为 MyClass 它有一个无参
  • 华为OD机试真题-缓存需要最少金币数【2023.Q1】

    题目描述 静态扫描可以快速识别源代码的缺陷 静态扫描的结果以扫描报告作为输出 1 文件扫描的成本和文件大小相关 如果文件大小为N 则扫描成本为N个金币 2 扫描报告的缓存成本和文件大小无关 每缓存一个报告需要M个金币 3 扫描报告缓存后 后
  • 第三节课总结之关于this指向,变量提升以及跨域的解决方案

    this 变量提升 关于继承 跨域解决方法 gt gt this指向 Js是静态作用域 是在定义阶段就决定好了的 而不是在执行阶段才决定的 参考资料 https developer mozilla org en US docs Web Ja
  • Effective C++ 学习笔记 《六》

    Item 6 Explicitly disallow the use of compiler generated functions you do not want 其实这一节的内容是和item5紧密相连的 上一节的核心围绕着编译器会自动生
  • 一个缩进符引发的错误:NotImplementedError

    class EnDecoder nn Module def init self super EnDecoder self init 定义Encoder self Encoder nn Sequential nn Linear 784 512
  • 时钟分频的几个细节理解

    时钟分频原理简单 但需要注意几个细节 计数器分频 是基于源时钟div2 4 8 16 32 64 如果基于分频器串联 那么需要定义很多分频时钟 提升sdc时钟定义的复杂性 计数器分频 要注意所有div2 4 8 16 32 64 需要保证同
  • 申请Mob的SMSSDK的短信验证功能及获取包名和MD5签名

    当下很多App的登录方式多样化 但最常用的要数手机验证码登录了 所以如何实现这个功能便成了众多Android开发者关注的问题 所以我推荐一个网站 http www mob com 以便大家借助它的SMSSDK来完成短信验证码的功能 点击创建
  • 华为交换机 配置Console接口登陆认证

    拓扑图 1 认证方式一 密码 不安全 输入密码
  • pycharm里面离线安装dgl

    这两天安装dgl是真的头大 简直各种奇葩问题都能遇到 整整一天全在搞这些事 踩了各种坑之后 终于成功了 简直留下了感动的泪水 各种方法都没成功 最后是采用了离线安装的方法才成功的 step01 百度 dgl离线安装包 然后选择适合自己电脑的
  • Docker专题-入门与运维

    文章目录 Docker专题 基础知识 1 发展缘由 Docker 为什么要使用Docker 2 架构 3 基于Docker搭建私有镜像仓库 4 常见工具 5 常见命令 6附录 Docker专题 基础知识 1 发展缘由 1960年IBM开始推