研发工程师玩转Kubernetes——构建、推送自定义镜像

news2024/12/28 4:23:47

这几节我们都是使用microk8s学习kubernetes,于是镜像库我们也是使用它的插件——registry。

开启镜像库插件

microk8s enable registry

模拟开发环境

我们使用Python作为开发语言来进行本系列的演练。

安装Python

sudo apt install python3.11

安装Pip3

pip3用于安装一些python工具。

sudo apt install python3-pip

安装virtualenv

为了让不同的项目有不同的依赖,我们使用virtualenv进行环境管理。

pip3 install virtualenv

创建虚拟环境

python3 -m virtualenv .venv --python=python3.11

进入虚拟环境

source .venv/bin/activate

导出依赖

项目编写完后,可以通过下面指令将依赖导出到文件中。

pip freeze > requirements.txt

编写代码

下面的程序需要传入两个参数:

  • port:服务启动的端口号
  • version:服务的版本号
from http.server import HTTPServer, BaseHTTPRequestHandler
import argparse
import socket
 
version = 0
 
def get_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
        return ip

class Resquest(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        data = "This service's version is {0}\n\nIP is:{1}".format(version, get_ip())       
        self.wfile.write(data.encode())
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('-port', metavar='N', type=int, help='port of service', required=True)
    parser.add_argument('-version', metavar='N', type=int, help='version of service', required=True)
    args = parser.parse_args()
    version = args.version
    host = ('0.0.0.0', args.port)
    server = HTTPServer(host, Resquest)
    print("Starting server, listen at: {0}:{1}".format(get_ip(), args.port))
    server.serve_forever()

镜像

编写Dockerfile

在上述代码文件(main.py)的同级目录,我们创建名字是Dockerfile的文件,并填入下面内容

From python:3.11
RUN pip install --upgrade pip
COPY requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
COPY main.py /main.py
WORKDIR /
CMD ["python","main.py","-port","8888","-version","1"]

From python:3.11:用于拉取包含Python3.11的基础镜像,我们的镜像是基于这个镜像进行的。
RUN pip install --upgrade pip:是用于更新pip。
COPY requirements.txt /requirements.txt:是将工程下的Python依赖库描述文件复制到镜像中。
RUN pip install -r /requirements.txt:是在镜像中安装项目的Python依赖库。
COPY main.py /main.py:将代码拷贝到镜像中。
WORKDIR /:用于设置当前路径是工作路径。
以上命令都是在镜像构建时执行的。
CMD [“python”,“main.py”,“-port”,“8888”,“-version”,“1”]:用于启动Python程序,开启服务。它是在镜像被加载到容器中后运行的,算是运行时态。

构建镜像

在Dockerfile所在的目录执行下面命令构建镜像

docker build -t simple_http:v1 .

Sending build context to Docker daemon 16.25MB
Step 1/6 : From python:3.11
—> 815c8c75dfc0
Step 2/6 : RUN pip install --upgrade pip
—> Running in 57e024ec10c4
Requirement already satisfied: pip in /usr/local/lib/python3.11/site-packages (22.3.1)
Collecting pip
Downloading pip-23.1.2-py3-none-any.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 187.7 kB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 22.3.1
Uninstalling pip-22.3.1:
Successfully uninstalled pip-22.3.1
Successfully installed pip-23.1.2
WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Removing intermediate container 57e024ec10c4
—> eb67eb01d842
Step 3/6 : COPY requirements.txt /requirements.txt
—> b5b1f735bf1b
Step 4/6 : RUN pip install -r /requirements.txt
—> Running in 36c14c15258c
WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Removing intermediate container 36c14c15258c
—> 77840086fbe4
Step 5/6 : COPY main.py /main.py
—> 7447438c2be0
Step 6/6 : CMD [“python”,“main.py”,“-port”,“8888”,“-version”,“1”]
—> Running in 48a0c45c2992
Removing intermediate container 48a0c45c2992
—> b336b9f1adee
Successfully built b336b9f1adee
Successfully tagged simple_http:v1

查看docker镜像

可以通过下面命令,查看指定名称的镜像。

 docker images simple_http:v1

在这里插入图片描述

推送镜像

在推送之前,需要给docker的镜像打个tag。这步在推送到诸如Dockerhub等镜像库时,是不需要的。关于这块的解释,可以见(The reason to tag an image locally is that this guide is primarily focussed on developers who will be building their apps on the local system and testing the deployment workflow on local systems, so it doesn’t make sense for us to use a remote image from Dockerhub as an example.——https://master–affectionate-northcutt-34a625.netlify.app/02_01_local_registry)

docker tag b336b9f1adee localhost:32000/simple_http:v1

然后推送

docker push localhost:32000/simple_http:v1

在这里插入图片描述

参考资料

  • https://master–affectionate-northcutt-34a625.netlify.app/02_01_local_registry
  • https://microk8s.io/docs/registry-built-in

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

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

相关文章

chatgpt赋能Python-python3_5怎么安装

Python3.5的安装方法 对于想要学习Python编程的新手来说,Python的版本安装是必须要掌握的技能。在本文中,我们将介绍如何安装Python3.5版本。 介绍 Python是一门简单易学的高级编程语言,其代码易于阅读,容易维护。Python有很多…

JAVA—实验3 继承与多态

一、实验目的 1.掌握类的继承机制 2.掌握抽象类的定义方法 2.熟悉类中成员变量和方法的访问控制 3.熟悉成员方法或构造方法的多态性 二、实验内容 1. Circle类及其子类 【问题描述】 实现类Circle,半径为整型私有数据成员 1)构造方法:参数为…

留学文书可以彻底被AI取代吗?留学顾问是否会被AI逼到墙角?

近日,ChatGPT再次“进化”,其最新版本ChatGPT-4又掀高潮。其生产者OpenAI 称,“ChatGPT-4是最先进的系统,能生产更安全和更有用的回复。”和上一代相比,GPT-4拥有了更广的知识面和更强的解决问题能力,在创意…

IC698PSA350 GE Fanuc为RX7i系列生产的电源模块

IC698PSA350 GE Fanuc为RX7i系列生产的电源模块 IC698PSA350是一款 PAC系统 GE Fanuc为RX7i系列生产的电源模块。该模块提供5伏直流电、12伏直流电和-12伏直流电。此外,它还向背板上的模块发送逻辑电平序列信号。该模块插入主机架的插槽0。 IC698PSA350 模块的 在保…

【云计算与虚拟化】第三章 实验三 配置vSphere虚拟网络和iSCSI共享存储

实验3. 配置vSphere虚拟网络和iSCSI共享存储 一、配置vSphere虚拟网络的实验步骤 在 VMware Workstation 中为 ESXi 主机添加两块网卡 2.开启 ESXi 主机,使用 vSphere Client 连接到 ESXi 主机。选中 ESXi 主机 切换到“配置”栏,点击硬件→网络适配器…

计算机中存储器详解

文章目录 一、存储器的分类1. 按存储介质分类2. 按存取方式分类 二、存储器的层次结构三、CPU、缓存、主存、辅存之间的通信关系1. 缓存-主存层次2. 局部性原理3. 主存-辅存层次 一、存储器的分类 1. 按存储介质分类 2. 按存取方式分类 二、存储器的层次结构 在讲存储器的层次…

类和对象【2】默认成员函数

文章目录 引言构造函数定义默认构造函数及相关问题 析构函数拷贝构造定义使用时可能引发的问题 赋值运算符重载运算符重载赋值运算符重载 总结 引言 在上一篇文章中,初步介绍了类和对象:戳我看初识类和对象 不难发现,类类型极大的方便了用户…

【5.15】一、软件测试基础—软件测试概述

目录 1.3 软件测试概述 1.3.1 软件测试简介 1.3.2 软件测试的目的 1.3.3 软件测试的分类 1.3 软件测试概述 软件测试工作能保证软件产品的质量。 1.3.1 软件测试简介 IEEE:软件测试是使用人工或自动手段运行或测定某个系统的过程,其目的在于检验它…

mac读不到内置硬盘为什么 ntfs读取不了硬盘

电脑内置硬盘可用于启动电脑、存储文件、保存注册表信息等多项功能,一旦无法读取,轻则可能导致某个分卷无法使用,严重时会导致整台mac电脑无法开机停留在Logo界面。那么mac读不到内置硬盘为什么,ntfs读取不了硬盘是何原因&#xf…

【5.16】二、黑盒测试方法—等价类划分法

目录 2.1 等价类划分法 2.1.1 等价类划分法概述 2.1.2 实例:三角形问题的等价类划分 2.1.3 实例:余额宝提现的等价类划分 2.1 等价类划分法 等价类划分法是一种常用的黑盒测试方法,主张从大量的数据中选择一部分数据用于测试&#xff0…

微信小程序 nodejs+vue+uniapp学科竞赛作品管理系统java+python

每个系统也都将通过计算机进行整体智能化操作,对于基于微信小程序学科竞赛作品管理系统功能所牵扯的数据都是通过用户进行基于微信小程序学科竞赛作品管理系统等相关的数据信息内容、并且可以进行管理员在线处理首页、个人中心、用户管理、教师管理、辅导员管理、作…

IS420UCSBH1A 用于帮助实现控制器逻辑

通用电气公司的Mark VIe控制器IS420UCSBH1A类似于UCSC控制器,所有相同的一般信息都可以应用于UCSB模型。IS420UCSBH1A型号通常是一种紧凑型独立控制器,用于帮助实现控制器逻辑。 制造商通用电气与…类似马克维UCSC控制器产品类型Mark VIe、EX2100e或LS2…

JUC并发编程(一)

JUC并发编程 文章目录 JUC并发编程一、进程与线程1 进程2 线程3 进程与线程的对比4 并行与并发5 同步与异步 二、Java线程1 创建和运行线程2 查看进程线程的方法3 栈与栈帧4 线程中常见方法5 start()与run()6 sleep()与yield()7 线程优先级8 join()方法9 interrupt()方法10 使用…

软考初级程序员上午五单选(9)

1、在Windows中,用鼠标左键单击某应用程序窗口的最小化按钮后,该应用程序处于______的状态。 A.被强制关闭 B.不确定 C.被暂时挂起 D.在后台继续运行 2、将某ASCII字符采用偶校验编码(7位字符编码1位校验码…

【5.15】一、软件测试基础—软件测试与软件开发

目录 1.4 软件测试与软件开发 1.4.1 软件测试与软件开发的关系 1.4.2 常见的软件测试模型 1.4 软件测试与软件开发 软件开发是生产制造软件产品,软件测试是检验软件产品是否合格,两者密切合作才能保证软件产品的质量。 1.4.1 软件测试与软件开发的关…

CSAPP复习(2)

CH3 虽然x在rdi中 但是在赋值的时候已经把rdi给rax作为返回值了 第二个问是取他的低位 一定要把寄存器那个图搞明白。 画函数执行栈的情况: 常数100存在于代码段: CH8 进程 CH8--2信号 进程作业任务 进程与任务或作业管理教材【优质文档】 - 百度文库…

VMware Workstation 与 Device/Credential Guard 不兼容解决方案(亲测有效)

前言 VMware Workstation是由VMware公司开发的桌面虚拟化软件,它能够在一台物理计算机上模拟多个独立的虚拟计算机环境,每个虚拟计算机环境都可以运行一个独立的操作系统,并具有各自独立的应用程序和文件库,使得运行多个不同操作…

Hive on Spark调优(大数据技术7)

第7章 数据倾斜优化 7.1 数据倾斜说明 数据倾斜问题,通常是指参与计算的数据分布不均,即某个key或者某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发往一个Reduce,进而导致该Reduce所需的时间远…

研报精选230518

目录 【行业230518华西证券】医药行业2023年中期投资策略报告:行业复苏势头显著,创新打开未来空间 【行业230518国金证券】半导体行业深度二:存储拐点将至,新需求点亮曙光 【行业230518太平洋】食品饮料行业23年中期策略&#xff…

chatgpt赋能Python-python3_5如何安装

Python3.5安装指南 Python是一种高级编程语言,它广泛用于Web开发、数据分析、机器学习等领域。在Python的众多版本中,Python3.5是最常用的版本之一。如果你正在考虑学习Python3.5或者需要使用Python3.5进行项目开发,那么接下来的安装指南将会…