知识积累(六):Dokcer 容器和镜像概念问题

1. 容器和镜像

镜像和容器是容器化技术中的两个重要概念,它们之间存在密切的关系。

镜像(Image):镜像是一个包含了运行应用程序所需的所有文件和配置的静态文件集合。它包括了应用程序的代码、运行时环境、系统工具、库以及其他依赖。镜像是容器的构建块,它提供了一个独立、可移植和一致的运行环境。

容器(Container):容器是基于镜像创建的运行实例。在容器内部,应用程序的代码和所有依赖被隔离在一个独立的运行环境中,与宿主系统和其他容器隔离开来。容器可以启动、停止、删除,可以在不同的环境中移植和运行。

镜像和容器的关系可以类比为类和对象的关系。镜像是一个静态的定义,它类似于类,描述了如何构建一个容器。而容器则是镜像的实例化,类似于对象,它是在特定时刻运行的一个具体的实体。容器是镜像的运行时表示,它继承了镜像的所有特性,并在其中运行应用程序。

简而言之,镜像是容器的模板,而容器是镜像的实例化运行。

2. 创建镜像时的运行代码

当在 Dockerfile 中运行代码时,这些操作会影响到构建镜像的过程,并将结果保存到镜像中。因此,当使用这个镜像创建的所有容器启动时,它们都会包含镜像中保存的效果,包括代码运行的结果。

3. 命令解析

(1)docker -p 30000:7474

在 Docker 中,-p 参数用于将容器的端口映射到主机的端口,即进行端口映射。其含义如下:

-p 30000:7474:这个参数将容器内部的 7474 端口映射到主机的 30000 端口上。
这意味着,当你通过主机的 30000 端口访问时,请求会被转发到运行的容器内部的 7474 端口上。这样做的目的是允许在容器内运行的应用程序可以被外部访问,而不受容器网络隔离的限制。

在你的例子中,假设你有一个运行着 neo4j 的容器,并且 neo4j 服务在容器内部的 7474 端口上运行。通过指定 -p 30000:7474,你可以通过主机的 30000 端口访问 neo4j 服务,而不是直接访问容器的端口。

(2)127.0.0.1:30001/misinfo

127.0.0.1:30001/misinfo 这段内容表示一个网络地址。让我们来分解它:

127.0.0.1 是本地回环地址,通常用于指代本机。
:30001 表示端口号,指定了要连接的端口是 30001。
/misinfo 是一个路径(Path),用于指定在该端口下的资源或服务。
综合起来,这个地址指向本机的 30001 端口,并且尝试访问该端口下的 misinfo 资源或服务。

(3)pythoncon容器
app.run(host=“0.0.0.0”, port=7475):这一行代码启动了 Flask 应用程序,并监听来自任何 IP 地址的请求(host=“0.0.0.0”),端口号为 7475。这样,当有请求到达服务器的 7475 端口时,Flask 应用程序会接收并处理这些请求。

总的来说,这段代码创建了一个简单的 Flask 应用程序,其中定义了一个 API 路径 /misinfo,以及一个空的根路径 /。这个应用程序将监听 7475 端口,以便接收来自网络的请求。

(4)访问neo4j服务
使用 Flask-RESTful 框架编写的 API 资源类 UserView,并且在其中定义了一个 post 方法用于处理 POST 请求。让我逐步解释一下:

class UserView(Resource)::这是一个 Python 类,继承自 Flask-RESTful 提供的 Resource 类。这意味着 UserView 类将成为一个可供 Flask 应用程序调用的 API 资源。

def post(self)::这是一个实例方法,用于处理 HTTP POST 请求。当客户端发送一个 POST 请求到与 UserView 关联的 URL 时,Flask-RESTful 将调用 post 方法来处理该请求。

request.get_json() 方法用于解析请求中的 JSON 数据,并返回一个 Python 对象。通常情况下,POST 请求中的数据是以 JSON 格式发送的,所以这里假设请求中包含了 JSON 格式的数据。

for data in json_data::这是一个遍历 JSON 数据的循环,用于对其中的每个数据进行处理。
if data[‘type’]==“1”::在遍历 JSON 数据的过程中,判断每个数据的 type 是否等于 “1”。如果是,就执行以下的代码块。

graph = Graph(‘http://’+ host +‘:7474’):根据传入的 host 地址创建了一个 Neo4j 数据库的连接对象。
host=“172.50.0.2”:这是一个字符串变量,表示 Neo4j 数据库的主机地址。在这个例子中,数据库的主机地址被指定为 172.50.0.2。
graph = Graph(‘http://’ + host + ‘:7474’):这行代码通过拼接字符串的方式构造了一个 URL,用于连接到 Neo4j 数据库。Graph 是 Neo4j 的 Python 驱动程序提供的一个类,用于创建与数据库的连接。

result = graph.run(‘MATCH (content:INFO) RETURN content LIMIT 1’):这行代码执行了一个 Cypher 查询,从 Neo4j 数据库中匹配了一个标签为 INFO 的节点,并返回了该节点的内容。这个查询返回的结果将会被存储在 result 变量中。

总的来说,这段代码是一个 Flask-RESTful API 资源类的定义,用于处理 POST 请求,并且在请求中处理了 JSON 数据,并使用了 Neo4j 数据库执行了一个查询操作。

(5)容器间通信
容器 B 的 IP 地址分配:当容器 B 启动时,它被连接到 misinfonet 网络,并且指定了 IP 地址为 172.50.0.2。Docker 将会为容器 B 分配 172.50.0.2 这个 IP 地址。

容器 A 中的 Python 代码:在容器 A 中的 Python 代码中,你使用了 172.50.0.2 作为 Neo4j 数据库的主机地址。这意味着容器 A 将会尝试连接到指定的 IP 地址 172.50.0.2 上的 Neo4j 服务。

容器 A 到容器 B 的通信:当容器 A 尝试连接到 172.50.0.2 的时候,Docker 会将这个请求转发到与容器 B 关联的网络中,并且将请求路由到容器 B。这样,容器 A 就能够与容器 B 进行通信。

容器 B 上的 Neo4j 服务响应:当容器 A 发送请求到容器 B 上的 Neo4j 服务时,容器 B 中运行的 Neo4j 服务会处理请求,并且返回相应的响应。

整个流程:

1)postman 访问本地 30001 端口的 misinfo 服务
(对应 pythoncon 容器的 7475 端口)
2)被 pythoncon 容器监听到
3)根据 host + 端口访问 neo4j 服务
4)访问到 neo4jcon 返回结果

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值