回炉重造十三----Docker的运用

news2024/11/16 4:54:48

1、Docker和虚拟机的区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaAiuC5O-1683696524241)(C:%5CUsers%5CHP%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1683533458486.png)]

两者的区别

虚拟化环境下每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
容器之间可以共享操作系统,比起 VM 被认为是更轻量级.且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间.

由于容器启动和运行过程中是直接使用了宿主机的内核,不会直接调用物理硬件,所以也不会涉及到硬
件驱动,因此也无需容器内拥有自已的内核和驱动。而如果使用虚拟机技术,对应每个虚拟机都有自已
独立的内核。

容器与虚拟化比有以下优点:

  • 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
  • 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性), 提供可靠且频繁的容器镜像构建和部署。
  • 关注开发与运维的分离:在构建、发布时创建应用程序容器镜像,而不是在部署时, 从而将应用程序与基础架构分离。
  • 可观察性:不仅可以显示 OS 级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
  • 跨开发、测试和生产的环境一致性:在笔记本计算机上也可以和在云中运行一样的应用程序。
  • 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
  • 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
  • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:高效率和高密度

简述K8s和Docker关系

Docker包括3个部分

  1. image Docker通过Dockerfile将应用程序,参数,程序代码和相关依赖打包到一个镜像中,从而实现可移植性的特性.

  2. container:docker镜像可以用docker run命令以单机方式运行.

  3. repository docker用来存放docker镜像,常见的可以分为公有仓库和私有仓库.一个Docker Repository中可以包含多个仓库,仓库与仓库以名字进行区分,仓库中的镜像以Tag进行区别.
    K8s对多个主机上的容器进行关联与编排.更合理的利用资源和保障服务的可用性. k8s中最小单位是Pod,一个Pod中可以有1至多个容器.

2、docker容器的常用命令

docker info  #查看容器的信息
docker search $image  #搜索镜像
docker pull  #下载镜像
docker push  #上传镜像
#配置镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uxlgig3a.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

docker images  #查看镜像
docker image inspect centos  #查看镜像的信息
docker save $image > /$PATH/IMAGE_NAME.tar  #把容器的镜像导出到宿主机
docker load < $IMAGE_NAME.tar  #把宿主机的镜像导入到容器
docker rmi -f $IMAGE  #删除镜像
(-f #强制删除镜像,也会删除对应的容器)
docker tag $IMAGE  $IMAGE:TAG  #给镜像打标签
docker container  #查看容器的命令
docker run $image  #运行容器
#指定运行容器的名称
docker run --name=$container_name $image
docker run --name=centos7 centos:2009
#以交互式启动容器并进入(运行并进入到容器里,exit退出时容器随之停止)
docker run -it --name=centos7 centos:2009 /bin/bash
#一次性运行容器,退出后立即删除容器,仅用于测试
docker run --rm $image 
#一次运行容器,退出后立即删除镜像,仅用于测试
docker run --rmi $Container_name $image
docker ps #显示正在运行的容器
docker ps -a #显示所有的容器
#查看容器内的进程
docker top  $container_name
#查看指定容器的资源使用情况
docker stats $container_name
#删除容器
docker rm #删除容器
#开启容器
docker start $containerID
#停止容器
docker stop $containerID
#后台运行容器
docker run -d  --name=$container_name $image
(Docker容器如果希望启动后能持续运行,就必须有一个能前台持续运行的进程,如果在容器中启动传统的
服务,如:httpd,php-fpm等均为后台进程模式运行,就导致 docker 在前台没有运行的应用,这样的容器启
动后会立即退出。所以一般会将服务程序以前台方式运行,对于有一些可能不知道怎么实现前台运行的
程序,只需要在你启动的该程序之后添加类似于 tail ,top 这种可以前台运行的程序即可. 比较常用的方
法)
#运行并进入容器
docker run --name=$container_name $image /bin/bash
#给容器发送信号,默认是9信号
docker kill $container_name
#进入容器,此方法退出容器也不会终止容器
docker exec -it $containID bash/sh
#容器端口映射(多个容器映射到宿主机的端口不能冲突,但容器内使用的端口可以相同)
docker run -d -it -p 宿主机端口:容器端口 --name=$contain_name $image 
实例1:把容器里nginx的80端口映射给宿主机81
docker run -d -it -p 81:80 --name=nginx-test nginx 
实例2:一次性映射多个端口加协议
docker run -d -it -p 81:80/tcp  -p 88:443/udp --name=nginx-test nginx
#查看容器的日志
docker logs $containID
docker logs --tail $number $containID
docker logs -f
#将宿主机的文件拷贝到容器
docker cp $PATH  $containID:$PATH
#将容器里的文件拷贝到宿主机
docker cp  $containID:$PATH 宿主机的指定目录
#传剃环境变量
-e <参数>  #传递参数
--env-file <参数文件> 

3、dockerfile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FROM #指定运行的基础镜像,必须位于Dockerfile的第一行
RUN  #用来运行构建镜像阶段需要的shell命令
ENV  #定义环境变量
ARG  #定义临时环境变量,和ENV不同的是,容器运行时不会存在这些环境变量
COPY #复制本地宿主机的文件到容器中,本地文件必须和Dockerfile在同一级目录
ADD  #把本地压缩包文件拷贝到容器并且自动解压,但是以tar命名的压缩包文件是不会自动解压的
EXPOSE #指定服务端的容器需要对外暴露的端口号,已实现容器与外部通信
(EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会真正暴露端口,即不会自动在宿主进行端口映射,故暴露端口还是要通过-p选项)
WORKDIR #指定工作目录(当前目录)
USER #指定运行容器的用户名或UID

#以Dockerfil构建镜像
docker  build -t 镜像名:标签 .

CMD:容器启动命令

在这里插入图片描述

一个容器中需要持续运行的进程一般只有一个,CMD 用来指定启动容器时默认执行的一个命令,且其运
行结束后,容器也会停止,所以一般CMD 指定的命令为持续运行且为前台命令.

  • 如果docker run没有指定任何的执行命令或者dockerfile里面也没有ENTRYPOINT命令,那么开启
    容器时就会使用执行CMD指定的默认的命令
  • 每个 Dockerfile 只能有一条 CMD 命令。如指定了多条,只有最后一条被执行
  • 如果用户启动容器时用 docker run xxx 指定运行的命令,则会覆盖 CMD 指定的命令

ENDPOINT

  • ENTRYPOINT 不能被 docker run 提供的参数覆盖,而是追加,即如果docker run 命令有参数,那
    么参数全部都会作为ENTRYPOINT的参数
  • 如果docker run 后面没有额外参数,但是dockerfile中有CMD命令(即上面CMD的第三种用
    法),即Dockerfile中即有CMD也有ENTRYPOINT,那么CMD的全部内容会作为ENTRYPOINT的参
  • 如果docker run 后面有额外参数,同时Dockerfile中即有CMD也有ENTRYPOINT,那么docker run
    后面的参数覆盖掉CMD参数内容,最终作为ENTRYPOINT的参数
  • 可以通过docker run --entrypoint string 参数在运行时替换,注意string不要加空格
    使用CMD要在运行时重新写命令本身,然后在后面才能追加运行参数,ENTRYPOINT则可以运行时
    无需重写命令就可以直接接受新参数
  • 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效
  • 通常会利用ENTRYPOINT指令配合脚本,可以为CMD指令提供环境配置

CMD和ENDPOINT的区别

  • CMD的指令可以被docker run 指定的参数覆盖,而ENDPOINT的指令不会被docker run 指定的参数覆盖,并将docker run的参数作为ENDPOINT指定的参数使用
  • ENDPOINT和CMD同时存在时,CMD的指令会被ENDPOINT当做指定的参数,当多个ENDPOINT的指令存在时只运行最后一个ENDPOINT的指令

由于是复习,这里就只整理常用的内容,其实docker单独拿来用已经很少,一般都是和k8s连用,掌握常用命令和Dockerfile的编写就可以。

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

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

相关文章

42电机插座接线可以用PH2.0冷压端子

文章目录 42电机插座接线可以用PH2.0冷压端子概述笔记备注END 42电机插座接线可以用PH2.0冷压端子 概述 设备上的42电机在我不断调整电机安装位置时, 接线从插孔中折断了. 问厂家, 他们的线也是定制的. 另外, 他是销售, 不清楚具体插座的型号和插座要用的冷压端子是哪种. 因为…

Java 关键字之:package与import

一、package 关键字 为了更好的实现项目中类的管理&#xff0c;提供包的概念使用package声明类或者接口所属的包&#xff0c;声明在源文件的首行包&#xff0c;属于标识符&#xff0c;遵循标识符的命名规则、规范(xxxyyyzzz)、"见名知意"每“.”一次&#xff0c;就代…

windows 下安装Docker (WSL2)

测试环境&#xff1a; VMware Workstation 17 WinServer2022 docker 4.19 python3.8 第一步&#xff1a;环境准备&#xff1a; 1.开启虚拟化 2. 开启WSL、容器功能 重启服务器 第二步&#xff1a; 安装docker 桌面版&#xff1a;Get Docker | Docker Documentation 此时启动会…

Django框架之错误视图和HTTP方法装饰器

本篇主要记录如何定义视图&#xff0c;错误视图有哪些并如何实现自定义&#xff0c; HTTP方法装饰器定义及实现&#xff0c;还有csrf中间件设置位置及关闭。 定义视图 一般在views.py文件下定义 视图参数&#xff1a; 错误视图 400视图 当出现SuspiciousOperation异常并且代…

Linux Kernel内核整体架构(图文详解)

1&#xff0c;前言 本文是“Linux内核分析”系列文章的第一篇&#xff0c;会以内核的核心功能为出发点&#xff0c;描述Linux内核的整体架构&#xff0c;以及架构之下主要的软件子系统。之后&#xff0c;会介绍Linux内核源文件的目录结构&#xff0c;并和各个软件子系统对应。…

WPF 从0开始写笔记,全属性功能深度剖析 20230510

文章目录 FontFamilyFontWeightResizeModeAllowsTransparencyMarginCornerRadiusBorder.effectBlurRadiusdirectionVerticalAlignmentTargetTypeControlTemplateDataTemplate 和ControlTemplate的区别StrokePath控件Border FontFamily 在WPF中&#xff0c;FontFamily属性用于指…

5月第1周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年5月1日-5月7日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站…

【C++】类型转换-static_cast、reinterpret_cast、const_cast、dynamic_cast

文章目录 1. C语言中的类型转换2. 为什么C需要四种类型转换3. C强制类型转换static_castreinterpret_castconst_castdynamic_cast 4.explicit5.RTTI6.考点 1. C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回…

网易云信 RTC 音频问题排查的挑战与实践

背景与挑战 实时通信&#xff08;Real-Time Communication&#xff0c;RTC&#xff09;音频技术是指将音频流实时传输到远程用户的技术&#xff0c;满足线上实时交互的诉求&#xff0c;广泛应用于在线教育、视频会议、直播、泛娱乐社交、金融、医疗、政企等场景。在 RTC PaaS…

组件通信的几种方式

组件通信的几种方式 父组件向子组件传值 在父组件中用自定义组件进行传值&#xff0c;自定义属性写到父组件调用子组件的那个标签中。在子组件中用props进行接收&#xff0c;props写到子组件中与data同级&#xff0c;props是一个数组&#xff0c;内容就是自定义属性的名字。 …

SD nand 与 SD卡的SPI模式驱动

文章目录 SD nand 与 SD卡的SPI模式驱动 1. 概述 2. SPI接口模式与SD接口模式区别 2.1 接口模式区别 2.2 硬件引脚 2.3 注意事项 3. SD接口协议 3.1 命令 3.1.1 命令格式 3.1.2 命令类型 3.2 响应 3.2.1 响应格式 4. SD nand&#xff08;SD卡&#xff09;结构描述…

内网渗透之域环境信息搜集

1.查看是否为域环境 net config workstation下面命令能否执行成功和computer brower服务是否开启有关 net view /domain2.查询域内的用户和组 查询域内的所有用户 net user /domain查询域内的所有用户(需要在域控上敲) dsquery user查询域内的某个用户 net user dbadmin /d…

代码随想录算法训练营day36 | 435. 无重叠区间,763.划分字母区间,56. 合并区间

代码随想录算法训练营day36 | 435. 无重叠区间&#xff0c;763.划分字母区间&#xff0c;56. 合并区间 435. 无重叠区间763.划分字母区间56. 合并区间总结 435. 无重叠区间 教程视频&#xff1a;https://www.bilibili.com/video/BV1A14y1c7E1/?spm_id_from333.788&vd_sou…

【Linux】安装node-v16.17.0-linux

【Linux】安装node-v16.17.0-linux 1 下载node-v16.17.0-linux-x64.tar.xz 下载地址&#xff1a;https://nodejs.org/zh-cn 2 解压文件 cd 到node-v16.17.0-linux-x64.tar.xz所在的路径 xz -d node-v16.17.0-linux-x64.tar.xz tar -xvf node-v16.17.0-linux-x64.tar 3 软…

vue2 框架运行原理剖析系列(一)之 new Vue()实例化过程到底做了什么!!!

一、vue 基础用法 1.1 引入vue 1.2 使用vue语法编写ui 1.3 实现数据绑定 示例代码如下 <div id"app">{{ message }} </div> <script> var app new Vue({el: #app,data: {message: Hello Vue!} }) </script>1.4 代码效果&#xff1a;使用浏…

4114 Flipping Game

4114 Flipping Game PTA | 程序设计类实验辅助教学平台 思路&#xff1a;我们定义f[i][j]表示当前已经进行了i轮&#xff0c;并且当前的两个串的不同的数的个数是j&#xff0c;就接下来我们考虑状态转移&#xff0c;首先是假设我们在不同的中挑选了x个进行反转&#xff0c;则需…

Go语言学习查缺补漏ing Day4

Go语言学习查缺补漏ing Day4 一、掌握iota的使用 请看下面这段代码&#xff1a; package mainimport "fmt"const (a iota_bc "ReganYue"dd1e iotaf iota )func main() {fmt.Println(a, b, c, d, d1, e, f) }思考一下输出结果会是什么&#xff1f; …

评价指标通俗解释:什么是准确率、精确率、召回率、F1得分

y_true [1, 1, 1, 1, 1, 0, 0, 0, 0, 2] y_pred [1, 1, 0, 1, 1, 1, 0, 1, 0, 2]以上述类别 1 为例&#xff1a; 准确率 accuracy 总体概念&#xff0c;指所有样本中预测正确的比例&#xff1a;7/10 0.7 精确率 precision 预测标签为 1 的样本中确实为 1 的比例&#xf…

数字化战略,如何解读企业财务报表

01 财务数字化管理 第一&#xff0c;财务基本信息化建设。比如财务系统、财务共享中心等通过数字化的手段提升财务会计核算、财务流程管理效率&#xff0c;解决流程性管理的问题。 第二&#xff0c;利用各类商业智能 BI 分析、数据分析的手段把企业的所有行为都进行量化对比&…

开源之夏2023 | 欢迎申请openEuler Embedded SIG开发任务

关于开源之夏 开源之夏是开源软件供应链点亮计划下的暑期活动&#xff0c;由中科院软件研究所与openEuler社区联合主办&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;促进优秀开源软件社区的蓬勃发展。 活动联合各大开源社区&#xff0c;针对重要开源软件…