云原生技能树-容器镜像制作、发布、拉取和运行

news2024/9/29 1:24:08

创建仓库

请在你自己的 gitcode.net 上创建一个仓库,命名为cloud_native_hello_py,目录结构如下:

.
├── .dockerignore
├── .gitignore
├── Dockerfile
├── README.md
└── src
    ├── main.py
    └── requirements.txt

其中 main.py 文件编写一个 flask 的服务代码:


# -*- coding: UTF-8 -*-
import sys
from flask import Flask
from flask_cors import CORS
from gevent import pywsgi, monkey

monkey.patch_all()

app = Flask(
    __name__,
    static_folder='web',
    static_url_path=''
)

def after_request(resp):
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

app.after_request(after_request)
app.config['JSON_AS_ASCII'] = False
CORS(app, supports_credentials=True)

@app.route('/', methods=['GET'])
def home():
    return "<p>Hello World!</p>"


if __name__ == '__main__':
    host = '0.0.0.0'
    port = 1024
    print('@启动服务...')
    print("@本地调试:http://{}:{}".format(host, port))
    if len(sys.argv) > 1 and sys.argv[1] == 'debug':
        app.run(host=host, port=port)
    else:
        server = pywsgi.WSGIServer((host, port), app)
        server.serve_forever()

其中 requirements.txt 指定了依赖的 Python 包

Flask==2.0.3
flask_cors==3.0.10
gevent==21.1.2

其中 .gitignore 配置git仓库的忽略项目,而.dockerignore 则配置了构建 Docker 镜像时的忽略项

.git
.vscode
.idea
.DS_Store
__pycache__
*.pyc
*.pyo
*.pyd
.Python
*.zip
*.out
env

最后,我们在 Dockerfile 里编写待构建的容器镜像的配置信息

# 该镜像从官方 python:3.8 镜像继承
FROM python:3.8

# 创建 App 目录
WORKDIR /app

# 拷贝 Python 依赖配置文件
COPY src/requirements.txt ./

# 安装 Python 依赖包
RUN pip install -r requirements.txt

# 拷贝 App Python 源码到目标目录
COPY src /app

# 导出服务端口
EXPOSE 1024

# 容器启动后立刻启动 Python 服务
CMD [ "python", "main.py" ]

使用 git 命令将该项目代码提交到仓库。以下描述错误的是?

答案是:B
依据

# 导出服务端口
EXPOSE 1024

A正确,依据

# 容器启动后立刻启动 Python 服务
CMD [ "python", "main.py" ]

C正确,依据

最后,我们在 Dockerfile 里编写待构建的容器镜像的配置信息

D正确,依据

# 拷贝 Python 依赖配置文件
COPY src/requirements.txt ./

构建容器并发布

上一题准备了代码仓库,并且配置了对应的 Dockerfile, 现在使用 docker 命令来制作镜像:

docker image build -t cloud_native_hello_py:0.0.1 ./

构建如图所示:

构建镜像之后,可以将镜像发布到 DockerHub ,不过需要首先注册下账号

在 https://hub.docker.com 上注册自己的账号
使用命令 docker login 在本机登陆,输入自己的用户名和密码

现在,可以使用命令 tag 来修改镜像的标签为用户名/镜像名格式:

docker tag cloud_native_hello_py:0.0.1 fanfeilong/cloud_native_hello_py

可以用docker image ls验证结果

现在,可以使用镜像的 push 命令来发布

docker push fanfeilong/cloud_native_hello_py:latest

以下描述错误的是?

答案是:B
docker image build 构建的时候需要指定 Dockerfile 所在目录,图中所示是进入到Dockerfile所在目录下才构建的,如果没有事先进入到Dockerfile所在目录就构建的话,命令中肯定要指定 Dockerfile 所在目录
AC正确,依据

构建镜像之后,可以将镜像发布到 DockerHub ,不过需要首先注册下账号

D正确,在推送前,必须给镜像打标签,否则推送失败,其实打标签就是定义一个版本标识

拉取镜像并运行

上一节创建了一个Python Flask 服务git仓库,然后为它配置了一个Dockerfile,最后构建了镜像并推送到Docker Hub。

现在,可以从 Docker Hub 拉取该镜像并运行。

首先,拉取镜像:

docker pull fanfeilong/cloud_native_hello_py

其次,运行容器:

docker run -p 1024:1024 -it fanfeilong/cloud_native_hello_py

这个命令没有指定容器启动后运行的命令,因此容器启动后会执行镜像制作时Dockerfile里指定的CMD命令,可以看到容器启动后执行了Python程序,容器服务在1024端口监听HTTP请求,因为 docker run 配置了参数-p 1024:1024,这里把主机的1024端口映射到了容器里的1024端口。

现在,在浏览器里测试下请求:

请求成功,输出了"Hello World!",到这里你就成功学会了容器镜像制作、发布、拉取和运行一条龙服务。

以下描述错误的是?

答案是:A
主机端口和容器内映射端口可以不一样,也可以不一样,该题目出题老师只不过指定的端口一样而已,只不过要注意端口不要被占用
B正确,依据

其次,运行容器:

docker run -p 1024:1024 -it fanfeilong/cloud_native_hello_py

C正确,fanfeilong/cloud_native_hello_py 该镜像就是出题老师自己创建的,第二道题目中就能看出

现在,可以使用命令 tag 来修改镜像的标签为用户名/镜像名格式:

docker tag cloud_native_hello_py:0.0.1 fanfeilong/cloud_native_hello_py

D正确,依据

docker run -p 1024:1024 -it fanfeilong/cloud_native_hello_py

这个命令没有指定容器启动后运行的命令,因此容器启动后会执行镜像制作时Dockerfile里指定的CMD命令,可以看到容器启动后执行了Python程序

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

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

相关文章

avb校验相关与块校验原理

一、启动校验流程 edk2/QcomModulePkg/Library/avb/VerifiedBoot.c DEBUG ((EFI_D_ERROR, "LoadImageAndAuth failed %r\n", Status)); in LoadImageAndAuth()edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c DEBUG ((EFI_D_ERROR, "LoadImageAndAu…

docker部署redis后,修改配置文件的requirepass后无效

解决方案 执行docker run命令时不要使用参数–requirepass docker部署redis流程&#xff08;问题复现&#xff09; 1. 启动redis容器 在服务器docker运行时&#xff0c;执行下列命令。&#xff08;会自动在远程仓库下载镜像&#xff09; redis: docker run \ --restartalw…

高等数学【合集】

文章目录极限计算求导计算极限计算 第一步:先看x→value确定类型第一步:先看x \rightarrow value确定类型第一步:先看x→value确定类型 7种未定型:∞∞,00,1∞,0∞,∞0,00,∞−∞7种未定型: \frac{\infty}{\infty},\frac{0}{0},1^{\infty},0^{\infty},\infty^0,0^0,\infty-\inf…

win10开机后桌面无图标问题解决办法

本篇文章主要讲解win10下桌面无图标的问题解决办法。 日期&#xff1a;2023年1月21日 作者&#xff1a;任聪聪 主要原因&#xff1a; 这个问题的原因是资源管理器或者注册表中有垃圾注册数据导致&#xff0c;实际上和显卡没有任何关系&#xff0c;但有些情况是由于驱动问题导致…

OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA

1.1.0 路由 OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA 特殊区域的产生和注意事项 产生&#xff1a;OSPF通过划分区域减小网络内路由器的LSDB的规模。对于那些位于AS边界的非骨干区域如果该设备是较为低端的路由器&#xff0c;则无法承受过多的路由条目。为此…

前端学习第一阶段:1-4章

学习总结&#xff1a;前四章学习总体来说不太难理解&#xff0c;如果时间宽裕&#xff0c;一天之内可以学完。 第一章 前端就业班课程导学 第二章 HTML5 CSS3课前导学 第三章 VSCode编辑器的使用 第四章 HTML 4-1 HTML初识 List item 01-基础班学习路线 List item 02-HTML简…

【Linux_】环境变量

【Linux_】环境变量 心有所向&#xff0c;日复一日&#xff0c;必有精进专栏&#xff1a;《Linux_》作者&#xff1a;沂沐沐目录 【Linux_】环境变量 什么是环境变量 常见变量 查看环境变量方法 环境变量相关的命令 通过系统调用获取或设置环境变量 环境变量通常是具有全…

代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

文章目录LeetCode 236. 二叉树的最近公共祖先题目讲解思路LeetCode 701.二叉搜索树中的插入操作题目讲解思路LeetCode 450.删除二叉搜索树中的节点题目讲解思路示图总结既然还是要生活&#xff0c;那么就学会主宰生活LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 求最小…

【数据结构与算法】详解二叉树以及模拟实现二叉树

文章目录前言:1.二叉树的定义2.二叉树的相关术语3.二叉树的性质4.特殊的二叉树5.二叉树的遍历前序遍历中序遍历后序遍历层序遍历6.获取树中节点的个数方法1:遍历思想方法2:子问题的思想7.获取叶子节点的个数方法1:遍历思想方法2:子问题的思想8.获取第K层节点的个数9.获取二叉树…

链表(LinkedList)

链表(LinkedList) 链表是有序的列表&#xff0c;但是其在内存的存储不一定连续 由这张图我们可以看出 链表是以节点的方式来存储的&#xff0c;是链式存储 每个节点包含data域&#xff0c;next域&#xff1a;指向下一个节点 我们可以发现链表的各个节点不一定是连续存储的 …

再见了HDMI Alt

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按&#xff1a;其实在未能推出配套线缆和适配器的那一刻&#xff0c;HDMI Alt模式就已经没有未来了。HDMI已全面落后DisplayPort。本文来自Arstechnica。文/Scharon Hardin…

【SpringCloud】Nacos的安装与启动

【SpringCloud】Nacos的安装与启动 一、下载安装包 二、解压 三、端口配置 四、启动 五、访问 【SpringCloud】Nacos的安装与启动 一、下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHu…

分享149个PHP源码,总有一款适合您

PHP源码 分享149个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 149个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1RKnEbbhpfUndnMrxG8rSIQ?pwd0nqp 提取码&#x…

LINUX学习之文本编辑器VIM/VI(八)

简介 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计 VIM 与 VI 编辑器完全兼容 模式转换 如下图所示&#xff0c;一般模式下输入i、…

选出相似的文本按照相似度排序difflib.get_close_matches

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 选出相似的文本 按照相似度排序 difflib.get_close_matches 选择题 对于以下python代码表述错误的是? from difflib import get_close_matches myText"python" myList[&…

23种设计模式(十六)——备忘录模式【状态变化】

备忘录模式 文章目录 备忘录模式意图什么时候使用备忘录真实世界类比备忘录模式的实现备忘录模式的优缺点亦称:调解人、控制器、Intermediary、Controller、Mediator 意图 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将这个对…

穿越万年的轮回[期望dp]

首先我们设置dpi,0/1,0/1dp_{i,0/1,0/1}dpi,0/1,0/1​表示经过iii次操作之后开头为red/edrred/edrred/edr&#xff0c;结尾为red/edrred/edrred/edr的串的期望redredred字符串个数。 然后我们考虑转移&#xff1a; 首先我们要来思考一下期望的本质&#xff0c;这样一个状态&…

「Python|VS Code」如何在VS Code中使用Jupyter Notebook运行Python代码

本文主要介绍如何在VS Code安装Jupyter Notebook的扩展并创建notebook文件&#xff0c;并在notebook中运行python代码。同时&#xff0c;介绍使用Jupyter notebook运行python代码的好处。 文章目录安装Jupyter notebook扩展并运行代码Jupyter notebook的好处安装Jupyter notebo…

第十章 STM32F103+ESP8266接入机智云 实现小型IOT智能家居项目

前言 最近有不少小伙伴私信留言&#xff0c;想要我推出一章能够通过APP进行远程控制并获取传感器信息的实验教程。说实话在嵌入式毕设里边&#xff0c;这算是中等偏上水平的了。刚好我也有兴趣写写。全篇4700多字&#xff0c;我写的很详细&#xff0c;按着文章一步一步操作即可…

RabbitMQ的基础学习(上)

前言&#xff1a; RabbitMQ是一个基于AMQP规范实现的消息队列。它具有性能好、高可用、跨平台性、社区活跃等优点&#xff0c;比较适合中小型公司使用。掌握RabbitMQ相关知识&#xff0c;对工作和学习都有帮助。下面我讲详细介绍一下Rabbit的相关知识。 正文&#xff1a; 一、…