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

news/2024/7/4 8:10:38 标签: 云原生, docker

创建仓库

请在你自己的 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.niftyadmin.cn/n/28767.html

相关文章

数据库分库分表

只分库不分表 只分表不分库 以及既分库也分表 &#xff08;1&#xff09;只分库不分表 当数据库的读&#xff0c;或者写的qps过高&#xff0c;导致数据库的连接不足了&#xff0c;这时候就要考虑做分库了&#xff0c;通过增加数据库的方式&#xff0c;来提供更多的可用数据…

选择微信原生小程序还是uniapp?

这个问题还是困扰过我的。但是现在我有了明确的答案。 入门的时候用微信原生小程序&#xff0c;熟悉了之后&#xff0c;马上转uniapp。 我有强有力的依据来说明为什么我确信要用uniapp开发小程序。 1.微信原生小程序语法非常的难用。是一个不伦不类的东西。 语法学vue和react,…

基于 SSH 的视频教学平台

完整代码:https://download.csdn.net/download/qq_38735017/87394312 论文研究背景与意义 随着我国教育事业和多媒体教学设施的快速发展,越来越多的人可以有机会接受教育,促使人们对教育的质量和要求就有了更高的要求。同时,教育也慢慢往公开方向发展,让人们有机会选择更适…

经典同步问题

同步问题是一个复杂的问题&#xff0c;但是它也有自己的方法去处理、去分析。PV操作系统的解题思路&#xff1a;关系分析。找出题目中描述的各个进程&#xff0c;分析它们之间的同步、互斥关系。(从事件的角度分析)整理思路。根据各进程的操作流程确定P、V操作的大致顺序。设置…

[创业之路-49] :动态股权机制 -4- 股权不合理,如何纠偏

当股权分配不合理的事实已经发生了&#xff0c;想纠偏&#xff0c;怎么办&#xff1f;这个也是很多的初创的公司经常发生的&#xff1a;提供6种思路以供参考&#xff1a;1、股权回购一般以出资款的几倍甚至几十倍进行回购&#xff0c;需要签订《股权转让协议》2、增资扩股在确保…

普中科技手把手教你学ESP32--基于MicroPython-02

第四讲&#xff1a;LED灯实验 MicroPython函数使用 本来需要加入machine.的&#xff0c;但是我引入了form machine import Pin就可以直接省略了 machine是一个模块&#xff0c;Pin是machine中的一个功能 Micropython官网学习 点击DOCS文档 选择相应的芯片 查看对应的模块 …

现场工程师出手-PCAPHub与云IP实现异地LAN工业联测

在去年&#xff0c;因为众所周知的因素影响&#xff0c;项目的甲方主动提出延缓设备的交付。作为乙方&#xff0c;尽管项目延缓是甲方提出的&#xff0c;但依旧希望按期交付&#xff0c;这样才能回款&#xff0c;熬过一年。其实&#xff0c;2022年初&#xff0c;几类传感器、压…

Downie4.6.4视频下载工具

前言 Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 下载 Downie 解压后直接安装 主要特点 支持许多网站目前支持超过1,000个不同的网站&#xff08;包括YouTube&#…