[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项目创建出的页面了 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Mysql-索引总结】

文章目录 什么是索引索引类型索引的数据结构Hash索引有序数组二叉搜索树平衡二叉树B树B索引 索引使用规则索引失效的情况如何选择正确的列进行索引? 什么是索引 索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中…

无人机黑飞打击技术详解

随着无人机技术的普及,无人机“黑飞”(未经授权或违反规定的飞行)现象日益严重,对公共安全、隐私保护及重要设施安全构成了严重威胁。为有效应对这一挑战,各国政府和安全机构纷纷研发并部署了一系列无人机黑飞打击技术…

基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。 通过OLED屏幕显示,设置电流阈值为80,电流小阈值为50,电压阈值为60,温度阈值为30 随便哪个超过预祝,则继电器切断,LE…

战神5/战神:诸神黄昏/God of War Ragnarok

版本介绍 v1.0.612.4312|容量175GB|官方简体中文|支持键盘.鼠标.手柄|赠单板学习补丁 配置要求 战神5/战神:诸神黄昏/God of War Ragnarok 游戏介绍 不灭的北欧传奇 由Santa Monica Studio出品、Jetpack Interactive负责PC移植的佳作《God of War Ragnark》将带您…

网络设备登录——《路由与交换技术》实验报告

目录 一、实验目的 二、实验设备和环境 三、实验记录 1.通过 Console 登录 步骤1:连接配置电缆。 步骤2:启动PC,运行超级终端。 步骤3:进入Console 配置界面 2.通过 Telnet 登录 步骤1:通过 Console 接口配置 Telnet 用户。 步骤2:配置 super 口令 步骤3:配置登录欢迎…

Java之封装

文章目录 1.封装1.1 什么是封装1.2 访问限定符1.3 包1.3.1 什么是包1.3.2 导包1.3.3 自定义包 2. static2.1 static 修饰成员变量2.2 static 修饰成员方法2.3 static成员变量初始化 3. 代码快3.1 普通代码块3.2 实例代码块3.3 静态代码块 4. 对象的打印 1.封装 1.1 什么是封装…

ubuntu安装emqx

目录 1.预先下载好emqx压缩包 2.使用tar命令解压 3.进入bin目录 5.放开访问端口18083 6.从通过ip地址访问emqx后台 7.默认用户名密码为admin/public 8.登录后台 9.资源包绑定在此博文可自取 1.预先下载好emqx压缩包 2.使用tar命令解压 sudo tar -xzvf emqx-5.0.8-el8-…

monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)

monorepo 前言1、搭建空项目并配置pnpm-workspace.yamlpnpm initpnpm-workspace.yaml 2.配置packages测试文件配置相关内容 3.引入packages内容至公共package.json4.创建测试项目,并引入公共包结语 前言 有个项目要引入一个第三方库,但是第三方库下载下…

LabVIEW提高开发效率技巧----使用快捷键

在LabVIEW的开发过程中,熟练掌握和运用快捷键可以极大地提升工作效率,减少重复性操作所花费的时间。快捷键不仅可以加快编程速度,还能让开发者更加专注于逻辑实现和功能设计。细问问将详细介绍LabVIEW中的常用快捷键,特别是强大的…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【时间管理】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…

YOLOv8改进系列,YOLOv8替换主干网络为PP-HGNetV2(百度飞桨视觉团队自研,助力涨点)

摘要 PP-HGNetV2(High Performance GPU Network V2) 是百度飞桨视觉团队自研的 PP-HGNet 的下一代版本,其在 PP-HGNet 的基础上,做了进一步优化和改进,最终在 NVIDIA GPU 设备上,将 “Accuracy-Latency Balance” 做到了极致,精度大幅超过了其他同样推理速度的模型。其在…

vue part 11

vuex的模块化与namespace 115_尚硅谷Vue技术_vuex模块化namespace_1_哔哩哔哩_bilibili 116_尚硅谷Vue技术_vuex模块化namespace_2_哔哩哔哩_bilibili vue-router路由 很常见的很重要的应用:Ajax请求,将响应的数据替换掉原先的代码从而实现不跳转页面…

对称加密算法使用示例

Demo包括以下对称加密算法组合 备注:XTS仅支持AES128和AES256,不支持AES192 from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import cmac from cryptography.hazmat.primitives.…

使用Big Data Tools连接JetBrains IDE与OSS

您可以在JetBrains IDE中通过Big Data Tools插件直接管理OSS的Bucket和文件。 什么是Big Data Tools Big Data Tools是一款JetBrains IDE插件,可以提供以下扩展功能: 便于使用远程文件系统(包括OSS)的用户界面。 与文件管理器类…

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)

文章目录 前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区分参数和属性的含义2.2、父子组件嵌套 二、装饰器语法1.State2.Prop3.Link4.Watch5.Provide和Consume6.Observed和ObjectLink代码示例:示例1:(不使用Observed和ObjectLi…

Flutter启动无法运行热重载

当出现这种报错时,大概率是flutter的NO_Proxy出问题。 请忽略上面的Android报错因为我做的是windows开发这个也就不管了哈,解决下面也有解决报错的命令大家执行一下就行。 着重说一下Proxy的问题, 我们看到提示NO_PROXY 没有设置。 这个时候我…

【计算机网络 - 基础问题】每日 3 题(十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

android10 系统定制:增加应用使用数据埋点,应用使用时长统计

需求意在统计应用的使用时长和开始结束时间,最终生成一个文件可以直观看出什么时候进入了哪个应用、什么时候退出,如图: 每行记录了应用的进入或退出,以逗号分割。分别记录了事件开始时间,应用包名,进入或…

STM32常用数据采集滤波算法

例如,STM32进行滤波处理时,主要目的是处理数据采集过程中可能产生的噪声和尖刺信号。这些噪声可能来自电源干扰、传感器自身的不稳定性或其他外部因素。 1.一阶互补滤波 方法:取a0~1,本次滤波结果(1-a)本次采样值a上…

用 nextjs 创建 Node+React Demo

1、环境准备 1、安装Node 访问Node官网下载对应Node版本:Node官网,安装成功后通过命令查看当前node版本 node -v2、安装Node版本管理工具nvm 如果nvm install 安装node失败,一般是网络问题,可以用手机热点或者翻墙 # 安装nvm c…