[docker]入门

本文章主要讲述的是,docker基本实现原理,docker概念的解释,docker的使用场景以及docker打包与部署的应用。

文章中docker所运行的系统:CentOS Linux release 7.9.2009 (Core)

目录

docker是什么,什么时候需要去使用

介绍

使用场景

部署多个环境

解决资源共享以及环境复杂的问题

快速上线与项目的回滚

docker相关概念

架构

client客户端

host主机

daemon守护进程

image镜像

contain容器

registry仓库

docker镜像的制作

编写dockerfile

生成依赖文件

docker容器的运行 


docker是什么,什么时候需要去使用

介绍

 docker是一个应用容器引擎,允许将一个应用程序和其所需的所有依赖打包到一个单元中,且底层架构以及其他单元进行隔离。

使用场景

部署多个环境

  需要对同一个项目部署多个环境(像是有开发环境,测试环境,生产环境),在对一个项目打包之后就减少了很多手动配置管理的出错可能。

  方便的进行部署,且不会出错。因为项目所需的所有依赖都打进了包中了,只需要下载再启动即可。

解决资源共享以及环境复杂的问题

  docker当中会有一个叫仓库的概念,可以将打包好的程序和依赖上传到仓库中。不同服务器之间,只需要访问同一个仓库,对所需的包进行拉取即可。

        依赖:像是我在windows写好了一个java程序,想要部署到一个云服务器上进行运行,让外部人员进行访问。那我就还要在云服务器上下载java,然后再进行运行等操作

  而对于一些大型的项目,其环境往往是很复杂的。如果对于不同的操作系统,可能就要手动的将项目的依赖重新yum一遍,容易出错且耗时长。如果使用docker将项目和依赖打包后就不会出现这样的问题

快速上线与项目的回滚

  在实际的开发中,可能需要常常的进行功能的优化或者版本的迭代。使用docker对项目进行打包就可以实现快速的安装。

docker支持对打包好的单元打上标签,

  像是v1和v2,例如v2对于v1来说是一次大版本的迭代与更新,部署到生产环境上可能会有问题的出现。

  那就可以使用docker将v1和v2版本都先部署起来,将v1暂停,v2对外开放。当v2出错接受到告警的时候可以直接将v2暂停,v1重新开放。实现快速的回滚也影响生产环境的使用。

docker相关概念

架构

docker使用c/s架构模式(客户端-服务器),使用远程API来管理和创建容器。容器则根据镜像而创建

下面的流程主要是(以run命令为例):

  1. 用户输入docker run hello-world,从客户端发送到主机的daemon中
  2. daemon在主机中查看本地镜像存储是否有hello-world这个镜像。如果有,则根据本地存储中的镜像去创建容器。
  3. 如果没有则去docker仓库中查看是否有hello-world这个镜像,有则把此镜像从仓库拉取到本地镜像存储当中
  4. 然后再去根据刚刚拉下来的hello-world去创建一个容器运行

client客户端

在本地使用dockerAPI与主机中daemon进行通信的工具

host主机

一个物理机或者虚拟机,用来执行docker-daemon与容器

daemon守护进程

docker服务的核心组件,docker最核心的后台进程

image镜像

用于创建容器的模板

contain容器

一个独立运行的一个或一组应用

镜像与容器的关系有点类似于java中的类与对象

registry仓库

用来保存与管理镜像的,类似于github或者gitee之类的代码管理平台。

有官方的,也有自己私人搭建的

docker镜像的制作

镜像的制作有两种方法:

  1. 对本地的镜像进行更新,再重新commit上去形成一个新的镜像
  2. 使用dockfile去创建一个新的镜像

这里说明的流程是直接去创建一个新的镜像。 

以python中flask项目为例,制作一个镜像上传到docker image当中

首先是项目的文件结构

编写dockerfile

dockerfile是一个文本文件,没有后缀。是存放着参数与方法去指导docker daemon根据dockerfile创建一个镜像。

# FROM是使用一个基础镜像,此处选择的是带有python3.11版本的镜像
FROM python:3.11# 将当前目录下的test复制到容器中的/docker_test目录下
COPY ./test/ /docker_test/# 指定一个工作目录/docker_test. 工作目录:在容器当中,进入到某一个路径中去执行后面的指令
WORKDIR /docker_test# 在工作目录/docker_test下执行run执行,run指令可以有多条
# 安装项目所需的依赖
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/# 声明容器可能会使用的端口为5000与宿主机进行通信
EXPOSE 5000# 使用CMD指令中的exec格式去运行下面的指令
# 运行python指令,参数为app.py
# 即在工作目录下执行python app.py指令
CMD ["python", "app.py"]

生成依赖文件

在pycharm的终端中执行pip freeze > requirement.txt生成依赖文件

连着虚拟环境一起打成压缩包上传到centos7当中 然后进行解压

使用docker build命令去创建一个镜像

对于下面docker build命令的解析

docker build是docker中创建镜像的命令

-t参数是对这个镜像进行命名,命名为my_flask_image

后面这个path参数是指dockerfile文件的参数,因为dockerfile就在当前目录下,所以我指定了“.”

docker build -t my_flask_image .

执行后使用docker images命令查看镜像是否创建好了

可以看到host中的本地镜像存储中已经有了我们刚刚制作好的镜像了。

docker容器的运行 

容器是根据镜像创建出来的,相互间独立的实体。

通过docker run 镜像名/镜像ID

-i 让容器可进行交互

-t 让容器指定出一个终端

-d 让容器以后台模式进行运行

-p 容器端口:宿主机端口    用于容器与宿主机间的端口映射

根据刚刚创建出的镜像去运行容器,将容器中5000端口映射到宿主机的5000端口中,这样路径为宿主机IP:5000的时候就可以访问这个flask项目创建出的页面了 

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

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

相关文章

实习项目|苍穹外卖|day10

Spring Task cron 表达式 入门案例 订单状态定时处理 通知用户支付!通知商家完成订单! Scheduled(cron "0 0/1 * * * ? ")public void processTimeoutOrder(){log.info("定时处理超时订单: {}", LocalDateTime.now());//答案是…

JavaScript --函数的作用域(全局和局部)

全局作用域 全局作用域&#xff0c;就算不在一个script标签也能调用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta nam…

解决RabbitMQ设置TTL过期后不进入死信队列

解决RabbitMQ设置TTL过期后不进入死信队列 问题发现问题解决方法一&#xff1a;只监听死信队列&#xff0c;在死信队列里面处理业务逻辑方法二&#xff1a;改为自动确认模式 问题发现 最近再学习RabbitMQ过程中&#xff0c;看到关于死信队列内容&#xff1a; 来自队列的消息可…

[进阶]面向对象之多态(练习)

需求: //父类animal package polymorphism.Test;public abstract class Animal {private int age;private String color;public Animal() {}public Animal(int age, String color) {this.age age;this.color color;}public int getAge() {return age;}public void setAge(i…

【JavaSE系列】反射机制

目录 前言 一、概述 二、获取Class对象 三、反射构造方法 1. 获取构造方法 2. 获取修饰符、名称和形参 3. 创建对象 四、反射成员变量 1. 获取成员变量 2. 获取修饰符、名称和类型 3. 赋值/获取值 五、 反射成员方法 1. 获取成员方法 2. 获取修饰符、形参、返回值…

远程访问电脑共享文件

远程访问电脑共享文件&#xff0c;可以通过多种方法实现&#xff0c;每种方法都有其特点和适用场景。以下是一些常见的方法及其步骤&#xff1a; 一、使用Microsoft远程桌面 启用远程桌面&#xff1a; 在目标电脑上&#xff0c;打开“开始”菜单&#xff0c;选择“设置”>“…

【网络安全】PHP配置注入漏洞

未经许可&#xff0c;不得转载。 文章目录 正文 正文 前提&#xff1a;通过探测等方式发现某个 PHP 文件存在 PHPRC 参数&#xff1a; curl "https://xxx.com/about.php?PHPRC/dev/fd/0" --data-binary auto_prepend_file"/etc/passwd"PHPRC 用于指定 P…

CTF——简单的《WEB》

文章目录 一、WEB1、easysql2、baby_web3、baby_sql4、upload_easy5、easygame拓展1.1拓展1.2 6、ht_ssti7、包容乃大 一、WEB 1、easysql 题目描述&#xff1a; sql注入漏洞 1.常用的sql注入测试语句 2.sql注入bypass 解题思路 这边提示基本给的也很完整的&#xff0c;不…

NFT Insider #147:Sandbox 人物化身九月奖励上线;Catizen 付费用户突破百万

市场数据 加密艺术及收藏品新闻 Doodles 动画特别剧《Dullsville and The Doodleverse》在多伦多国际电影节首映 Doodles 最近在多伦多国际电影节&#xff08;TIFF&#xff09;首映了其动画特别剧《Dullsville and The Doodleverse》&#xff0c;这是该品牌的一个重要里程碑。…

无人机几种常见的避障系统!!!

1. 视觉避障系统 工作原理&#xff1a; 视觉避障系统通过安装在无人机上的摄像头捕捉周围环境的图像&#xff0c;利用计算机视觉技术对图像进行处理和分析&#xff0c;提取出障碍物的信息。 通过对障碍物的识别和分类&#xff0c;无人机可以判断出障碍物的性质和危险程度&am…

鸿蒙开发基础

页面跳转 了解代码初始结构 /*** 装饰器&#xff1a;用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。* Entry&#xff1a;表示该自定义组件为入口组件 * Component&#xff1a;表示自定义组件* State&#xff1a;表示组件中的状态变量&#xff0c;状态变量变…

抓机遇,创发展︱2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会,零部件国产浪潮不可阻挡

抓机遇&#xff0c;创发展︱2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会&#xff0c;零部件国产浪潮不可阻挡 汽车零部件行业是汽车工业发展的基础&#xff0c;是支撑汽车工业持续稳步发展前提条件。随着经济全球化和市场一体化进程的推进&#xff0c;汽车零部件…

YOLOv5改进 | 模块缝合 | C3 融合Self-Calibrated Convolutions丰富特征图【CVPR2020】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv5入门 改…

37拼购:电商新风尚,共享双赢的购物革命

随着2024年电商市场的日益繁荣&#xff0c;商品海洋中的同质化问题愈发严峻&#xff0c;消费者在茫茫商海中寻觅独特价值的难度陡增。在此背景下&#xff0c;一种名为“37悦享拼”的创新电商模式横空出世&#xff0c;它巧妙融合了私域社交与电商精髓&#xff0c;旨在打破传统壁…

【Go】-Gin框架

目录 Gin框架简介 简单示例 Gin渲染 HTML渲染 自定义模板函数 静态文件处理 使用模板继承 JSON渲染和XML渲染 获取参数 获取querystring参数 获取form参数 获取Path参数 c.Params.Get c.Params() 参数绑定 文件上传 单个文件上传 参数 多个文件上传 重定向…

无人机应用新纪元:图形工作站配置推荐与硬件解析

低空经济作为国家新兴的战略性产业&#xff0c;正逐步成为经济高质量发展的新动力。据统计&#xff0c;2023年中国低空经济规模达到5059.5亿元&#xff0c;增速为33.8%&#xff0c;预计到2026年有望突破万亿元大关。政府对低空经济的发展高度重视&#xff0c;不仅出台了相关法规…

Ubuntu22.04系统安装opencv步骤简述及问题解决方法

前言 opencv是一个功能强大、开源且跨平台的计算机视觉库&#xff0c;适用于多种编程语言和操作系统&#xff0c;能够帮助开发者构建各种视觉项目。其模块众多&#xff0c;提供了诸多功能&#xff0c;能够进行图像处理、视频处理等等。比如&#xff1a;Highgui模块提供图像用户…

OSSEC搭建与环境配置Ubuntu

尝试使用Ubuntu配置了OSSEC&#xff0c;碰见很多问题并解决了&#xff0c;发表博客让后来者不要踩那么多坑 环境 &#xff1a; server &#xff1a;Ubuntu22.04 64位 内存4GB 处理器4 硬盘60G agent: 1.Windows11 64位 2.Ubuntu22.04 64位 服务端配置 一、配置安装依赖项&…

电源模块测试系统中都可以定制哪些内容?

在电源测试系统中&#xff0c;可以定制的内容相当广泛&#xff0c;以满足不同客户、不同应用场景下的特定需求。以下是一些常见的可定制内容&#xff1a; 1. 测试项目 对于电源模块的基础测试项目而言&#xff0c;一般都无需定制基础测试项目&#xff0c;因为电源模块测试的基…

(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)

一、安装Minio&#xff08;Minio分布式集群搭建部署_minio集群最少几台-CSDN博客&#xff09; 生成accessKeyID和secretAccessKey&#xff1a; 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来&#xff0c;为了保证版本测试的一致性&#xff0c;我们下载…