《Docker 简易速速上手小册》第4章 Docker 容器管理(2024 最新版)

在这里插入图片描述

文章目录

  • 4.1 容器生命周期管理
    • 4.1.1 重点基础知识
    • 4.1.2 重点案例:启动并管理 Python Flask 应用容器
    • 4.1.3 拓展案例 1:调试运行中的容器
    • 4.1.4 拓展案例 2:优雅地停止和清理容器
  • 4.2 容器数据管理与持久化
    • 4.2.1 重点基础知识
    • 4.2.2 重点案例:使用卷存储 Python 应用数据
    • 4.2.3 拓展案例 1:使用绑定挂载进行数据持久化
    • 4.2.4 拓展案例 2:使用临时存储管理敏感数据
  • 4.3 容器网络配置
    • 4.3.1 重点基础知识
    • 4.3.2 重点案例:配置 Python Flask 应用的网络
    • 4.3.3 拓展案例 1:容器间通信
    • 4.3.4 拓展案例 2:使用 Docker Compose 管理网络

4.1 容器生命周期管理

管理 Docker 容器的生命周期就像是驾驶宇宙飞船,你需要了解如何启动、停止,甚至是销毁这些飞船。这一节将带你穿梭在 Docker 容器的生命周期管理的浩瀚宇宙中。

4.1.1 重点基础知识

深入理解 Docker 容器的生命周期管理是掌握 Docker 使用的关键。下面是一些关于容器生命周期管理的进一步基础知识,它们将帮助你更好地管理你的 Docker 容器。

  1. 容器创建:

    • 使用 docker create 创建一个容器但不启动它。这允许你先配置容器(例如,设置网络和卷),然后再用 docker start 命令启动。
  2. 容器状态检查:

    • docker inspect 命令提供了关于容器配置和状态的详细信息,包括 IP 地址、使用的端口和挂载的卷。
  3. 容器资源限制:

    • 在创建或运行容器时,可以通过各种选项限制其使用的资源,如 CPU、内存等。这对于确保容器不会消耗过多主机资源非常重要。
  4. 容器与主机间的数据拷贝:

    • docker cp 命令可以在容器和主机间拷贝文件。这在需要快速复制日志文件或其他数据时非常有用。
  5. 容器内部运行命令:

    • docker exec 命令允许你在运行中的容器内执行命令,这对于调试和管理操作非常方便。
  6. 容器日志管理:

    • 了解如何查看和管理容器日志。docker logs 命令可以帮助你快速定位问题。
  7. 容器的优雅停止:

    • 当使用 docker stop 命令时,Docker 会首先向容器发送 SIGTERM 信号,允许容器优雅地停止。如果在指定时间后容器仍未停止,Docker 会发送 SIGKILL 信号强制停止。

通过掌握这些高级技巧和知识,你将能够有效地管理 Docker 容器的生命周期,确保容器的稳定运行和高效管理。这些技能对于任何需要在生产环境中使用 Docker 的人员来说都是非常宝贵的。

4.1.2 重点案例:启动并管理 Python Flask 应用容器

让我们通过一个实际案例来学习如何启动并管理一个 Python Flask 应用的 Docker 容器。这个案例将覆盖从创建容器到管理其生命周期的各个阶段。

步骤 1: 准备 Flask 应用

首先,我们需要准备 Flask 应用。在你的工作目录中,创建以下文件:

  • app.py:

    # app.py
    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def home():return 'Welcome to the Dockerized Flask App!'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    

步骤 2: 编写 Dockerfile

接下来,编写一个 Dockerfile 用于构建 Flask 应用的镜像:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
CMD ["python", "app.py"]

步骤 3: 构建 Docker 镜像

在包含 Dockerfile 的目录中,运行以下命令来构建镜像:

docker build -t flask-app .

步骤 4: 启动 Flask 应用容器

使用以下命令启动 Flask 应用的 Docker 容器:

docker run -d -p 5000:5000 --name my-flask-app flask-app

这里 -d 参数让容器在后台运行,-p 参数映射了容器和主机的端口。

步骤 5: 查看容器日志

要查看 Flask 应用的输出,可以使用:

docker logs my-flask-app

步骤 6: 停止和重启容器

若需要停止容器,可以使用:

docker stop my-flask-app

要重启已停止的容器,使用:

docker start my-flask-app

步骤 7: 清理容器

使用完容器后,可以将其删除:

docker rm my-flask-app

通过这个案例,你不仅学会了如何为 Flask 应用创建和启动 Docker 容器,还掌握了如何管理容器的基本生命周期,包括查看日志、停止、重启和删除容器。这些技能对于任何使用 Docker 部署和管理 Web 应用的开发者来说都是非常有用的。

4.1.3 拓展案例 1:调试运行中的容器

在这个案例中,我们将探索如何进入一个正在运行的 Docker 容器以进行调试。这是一项非常实用的技能,特别是当你需要诊断或解决运行时问题时。

步骤 1: 运行 Flask 应用容器

首先,确保 Flask 应用的 Docker 容器正在运行。如果尚未运行,可以参考之前的案例来启动它。

步骤 2: 进入运行中的容器

使用 docker exec 命令进入正在运行的容器。这个命令允许你在容器内部启动一个新的交互式命令行会话:

docker exec -it my-flask-app /bin/bash

这里,my-flask-app 是你的容器名称,/bin/bash 是你想在容器内部运行的 shell。对于不包含 bash 的轻量级镜像,你可能需要使用 /bin/sh 或其他 shell。

步骤 3: 在容器内执行命令

一旦进入容器,你就可以像在普通 Linux 环境中一样执行命令了。例如,你可以查看当前目录的文件列表,检查环境变量或者安装额外的调试工具:

ls -l
printenv
apt-get update && apt-get install -y curl

步骤 4: 退出容器

完成调试后,可以输入 exit 命令来离开容器。

注意:在容器内执行的任何更改(比如安装的额外软件包)都不会保存到镜像中,且只在当前容器实例中有效。

通过这个案例,你学会了如何进入正在运行的 Docker 容器并执行调试操作。这种能力对于快速定位和解决应用运行时的问题至关重要,是每位 Docker 用户必备的技能之一。

4.1.4 拓展案例 2:优雅地停止和清理容器

在这个案例中,我们将学习如何优雅地停止一个运行中的 Docker 容器,并在停止后清理容器实例。这是确保容器资源被妥善管理和释放的重要步骤。

步骤 1: 运行 Flask 应用容器

确保你的 Flask 应用容器正在运行。如果尚未启动,可以参考之前的指南来启动它。例如:

docker run -d -p 5000:5000 --name my-flask-app flask-app

步骤 2: 优雅地停止容器

当你需要停止容器时,使用 docker stop 命令。这个命令会向容器发送 SIGTERM 信号,提醒容器优雅地停止。默认情况下,Docker 会等待 10 秒让应用处理停止请求:

docker stop my-flask-app

步骤 3: 确认容器已停止

使用 docker ps -a 命令确认容器的状态。你会看到 my-flask-app 容器的状态为 Exited

docker ps -a

步骤 4: 清理停止的容器

停止容器后,它仍然会占用磁盘空间。为了释放这些资源,可以使用 docker rm 命令来删除容器:

docker rm my-flask-app

步骤 5: 验证容器已被删除

再次运行 docker ps -a 命令确认容器已被删除。你不应该再看到 my-flask-app 容器。

通过这个案例,你可以看到如何优雅地停止并清理 Docker 容器。这不仅是良好的资源管理实践,也是维护 Docker 环境整洁的关键步骤。掌握这些技巧可以帮助你高效地管理容器资源,保持你的 Docker 环境的清洁和有序。

通过这些案例的学习,你将能够有效地管理 Docker 容器的生命周期,从容器的诞生到退休,每一个环节都能游刃有余。掌握这些技能,你将成为 Docker 宇宙中的优秀飞行员!

4.2 容器数据管理与持久化

在 Docker 世界中,数据管理和持久化是一项至关重要的技能。它就像是给你的容器建造一个记忆盒子,即使容器消失了,记忆仍然留存。让我们深入了解如何在 Docker 中管理数据,并保证它的持久性。

4.2.1 重点基础知识

深入理解 Docker 容器的数据管理与持久化是保证数据安全和高效使用 Docker 的关键。以下是关于容器数据管理与持久化的更多基础知识,帮助你更好地理解和应用这些概念。

  1. 卷(Volumes)的高级管理:

    • 可以在 Docker 主机上全局管理卷,包括创建、列出、删除未使用的卷等。这有助于更好地组织和清理数据。
    • 卷可以在容器之间或者在 Dockerfile 中使用,为应用提供灵活性和可重用性。
  2. 绑定挂载的路径和权限:

    • 绑定挂载时,可以指定路径和权限,例如只读挂载,以确保容器内的应用不会意外修改宿主机上的数据。
    • 路径可以是相对的或绝对的,这在进行本地开发和测试时特别有用。
  3. 使用 Docker Compose 管理卷和挂载:

    • Docker Compose 允许你在 docker-compose.yml 文件中定义和管理卷及挂载,这对于复杂应用的数据管理更加直观和方便。
  4. 卷驱动的选择:

    • Docker 提供了不同的卷驱动,支持各种存储需求,例如本地存储、网络存储等。根据应用的具体需求选择合适的卷驱动非常重要。
  5. 备份和迁移数据:

    • 了解如何备份和迁移 Docker 卷中的数据是确保数据安全的关键。这包括将卷数据导出到文件系统,或者迁移到其他 Docker 主机上。
  6. 数据持久化的策略:

    • 根据应用的特点和需求,制定合适的数据持久化策略。例如,对于数据库应用,可能需要频繁备份和高可用性的存储解决方案。

通过掌握这些高级知识,你将能够更有效地管理 Docker 容器中的数据,并确保数据的持久化和安全。这些技能对于任何需要在 Docker 环境中处理和存储重要数据的开发者或管理员来说都是非常宝贵的。

4.2.2 重点案例:使用卷存储 Python 应用数据

在这个案例中,我们将创建一个 Python Flask 应用,并使用 Docker 卷来持久化存储应用数据。这是一个常见的场景,特别是当你的应用需要保存状态或用户数据时。

步骤 1: 创建 Flask 应用

首先,我们需要准备 Flask 应用。在你的工作目录中,创建以下文件:

  • app.py:

    # app.py
    from flask import Flask
    import osapp = Flask(__name__)@app.route('/')
    def home():with open('/data/count.txt', 'a+') as file:file.seek(0)count = file.read() or '0'count = int(count) + 1file.seek(0)file.write(str(count))file.truncate()return f'Hello, Dockerized Flask! This page has been visited {count} times.'if __name__ == '__main__':if not os.path.exists('/data'):os.makedirs('/data')app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    

步骤 2: 编写 Dockerfile

编写一个 Dockerfile 用于构建 Flask 应用的镜像:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
CMD ["python", "app.py"]

步骤 3: 构建 Docker 镜像

在包含 Dockerfile 的目录中,运行以下命令来构建镜像:

docker build -t flask-app-with-volume .

步骤 4: 创建并启动容器,绑定卷

使用以下命令启动 Flask 应用的 Docker 容器,并绑定一个卷来持久化 count.txt 文件:

docker run -d -p 5000:5000 --name my-flask-app -v flask-data:/data flask-app-with-volume

这里,flask-data 是一个 Docker 卷,/data 是容器内的路径。

步骤 5: 访问和测试应用

访问 http://localhost:5000 并多次刷新页面,你将看到访问次数的增加。即使容器重启,计数也不会丢失,因为它被保存在 Docker 卷中。

通过这个案例,你学会了如何使用 Docker 卷为 Python Flask 应用提供持久化数据存储。这样即使容器被删除,卷中的数据仍然安全。这是管理涉及状态或需要持久化存储的容器化应用时的一个关键技巧。

4.2.3 拓展案例 1:使用绑定挂载进行数据持久化

在这个案例中,我们将展示如何通过绑定挂载(bind mounts)在 Docker 容器中实现数据持久化。绑定挂载是一种直接映射宿主机文件系统到容器的方式,非常适合开发环境中的快速数据共享和测试。

步骤 1: 创建 Flask 应用

首先,准备 Flask 应用。在你的工作目录中,创建 app.pyrequirements.txt

  • app.py:

    # app.py
    from flask import Flask
    import osapp = Flask(__name__)@app.route('/')
    def home():filepath = '/mnt/data/count.txt'if not os.path.exists(filepath):with open(filepath, 'w') as file:file.write('0')with open(filepath, 'r+') as file:count = int(file.read()) + 1file.seek(0)file.write(str(count))file.truncate()return f'This page has been visited {count} times.'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    

步骤 2: 编写 Dockerfile

创建一个 Dockerfile 用于构建 Flask 应用的镜像:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
CMD ["python", "app.py"]

步骤 3: 构建 Docker 镜像

在包含 Dockerfile 的目录中,运行以下命令来构建镜像:

docker build -t flask-app-bind-mount .

步骤 4: 创建宿主机目录并启动容器

在宿主机上创建一个目录用于挂载:

mkdir /path/to/local/data

使用以下命令启动 Flask 应用的 Docker 容器,并通过绑定挂载连接到刚刚创建的宿主机目录:

docker run -d -p 5000:5000 --name my-flask-app -v /path/to/local/data:/mnt/data flask-app-bind-mount

步骤 5: 访问和测试应用

访问 http://localhost:5000 并多次刷新页面。检查 /path/to/local/data/count.txt 文件,你会发现页面访问次数被正确记录。

通过这个案例,你学会了如何使用绑定挂载在 Docker 容器中实现数据的持久化。这种方法对于开发环境特别有用,因为它允许你直接在宿主机上访问和修改容器内的文件,从而实现快速的开发和测试。

4.2.4 拓展案例 2:使用临时存储管理敏感数据

在这个案例中,我们将通过使用 Docker 的临时存储(tmpfs 挂载)来处理和管理敏感数据。这种方法特别适用于处理需要在容器运行时保留但不应该持久化到硬盘的敏感信息。

步骤 1: 创建 Flask 应用

创建一个简单的 Flask 应用,它会生成并存储一些敏感数据。在你的工作目录中,创建以下文件:

  • app.py:

    # app.py
    from flask import Flask
    import osapp = Flask(__name__)@app.route('/')
    def home():sensitive_path = '/tmp/sensitive_data.txt'with open(sensitive_path, 'a+') as file:file.write("Very sensitive information\n")return 'Sensitive data written to temporary storage.'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    

步骤 2: 编写 Dockerfile

编写 Dockerfile 来构建 Flask 应用的镜像:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
CMD ["python", "app.py"]

步骤 3: 构建 Docker 镜像

运行以下命令来构建 Flask 应用的 Docker 镜像:

docker build -t flask-app-tmpfs .

步骤 4: 启动 Flask 应用容器,使用 tmpfs

启动 Flask 应用的 Docker 容器,并使用 tmpfs 挂载来创建临时存储区:

docker run -d -p 5000:5000 --name my-flask-app --tmpfs /tmp flask-app-tmpfs

这个命令会创建一个名为 /tmp 的 tmpfs 挂载点,所有写入该路径的数据都只会存储在内存中。

步骤 5: 访问应用并验证临时存储

访问 http://localhost:5000,应用会写入敏感数据到临时存储中。尽管数据写入了 /tmp/sensitive_data.txt,但由于使用了 tmpfs,这些数据仅在内存中存在,并不会持久化到硬盘。

通过这个案例,你学会了如何在 Docker 容器中使用临时存储来处理敏感数据。这种方法在处理需要高度保密性的数据时非常有用,确保了数据的安全性,同时便于在应用重启或容器销毁时自动清理这些数据。

通过这些案例,你将能够掌握 Docker 容器中数据的管理和持久化。无论是将数据永久保存还是仅在容器运行时保留,你都有了相应的工具和知识来处理这些情况。这在构建可靠且安全的 Docker 应用时非常重要。

4.3 容器网络配置

欢迎来到 Docker 容器网络的世界!在这一章中,我们将像网络专家一样探索 Docker 容器网络的奥秘。了解容器如何通信、如何配置网络,可以帮助你更好地管理和部署容器应用。

4.3.1 重点基础知识

掌握 Docker 容器网络配置是确保容器应用顺利运行的关键。了解不同网络类型、如何连接容器以及如何隔离容器是非常重要的。以下是容器网络配置的更多基础知识,帮助你深入理解 Docker 网络的工作原理。

  1. 网络类型详解:

    • bridge:默认网络类型,适用于单机上的容器通信。
    • host:移除了网络隔离,容器直接使用宿主机的网络。
    • overlay:用于跨多个 Docker 主机的容器通信,常用于 Docker Swarm。
    • none:禁用所有网络。
  2. 网络隔离和安全:

    • Docker 网络提供了隔离机制,增强了容器之间的安全性。
    • 了解如何配置网络策略,可以更有效地控制容器间的通信权限。
  3. 服务发现与 DNS:

    • 在自定义网络中,Docker 提供了内建的 DNS 服务,容器可以通过服务名称互相发现和通信。
    • 这消除了容器间通信中硬编码 IP 地址的需要。
  4. 网络命令行工具:

    • Docker 提供了一系列命令行工具来管理网络,如 docker network createdocker network lsdocker network inspect 等。
    • 这些工具对于诊断网络问题、审查网络配置等非常有用。
  5. 端口映射与暴露:

    • 除了使用 -p 参数进行端口映射,还可以使用 EXPOSE 指令在 Dockerfile 中声明容器监听的端口,增加文档化和清晰度。
  6. 容器连接的最佳实践:

    • 使用自定义网络而非旧式的 --link 方法来连接容器。
    • 在复杂应用中,考虑使用 Docker Compose 来管理容器和网络,简化部署和配置。

通过掌握这些高级知识,你将能够更加精确地控制你的 Docker 容器网络,提升应用的连通性和安全性。这对于构建可扩展和安全的容器化应用至关重要。

4.3.2 重点案例:配置 Python Flask 应用的网络

在这个案例中,我们将通过配置网络来部署一个 Python Flask 应用。这个过程不仅包括容器的创建和运行,还涉及到如何通过 Docker 网络让应用能够被外界访问。

步骤 1: 准备 Flask 应用

首先,创建 Flask 应用。在你的工作目录中,创建 app.pyrequirements.txt

  • app.py:

    # app.py
    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def home():return 'Welcome to the Dockerized Flask App accessible from outside!'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    

步骤 2: 编写 Dockerfile

接下来,编写 Dockerfile 来构建 Flask 应用的镜像:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
EXPOSE 5000
CMD ["python", "app.py"]

这里的 EXPOSE 5000 命令是用于文档化,表明容器会在 5000 端口上监听连接。

步骤 3: 构建 Docker 镜像

在包含 Dockerfile 的目录中,运行以下命令来构建镜像:

docker build -t flask-app-network .

步骤 4: 启动 Flask 应用容器,并映射端口

使用以下命令启动 Flask 应用的 Docker 容器,并映射端口以使应用可从外部访问:

docker run -d -p 8000:5000 --name my-flask-app flask-app-network

这里,我们将容器的 5000 端口映射到宿主机的 8000 端口。

步骤 5: 访问 Flask 应用

现在,你可以通过访问 http://localhost:8000 来查看 Flask 应用。你应该能看到欢迎消息。

通过这个案例,你学会了如何为 Flask 应用配置 Docker 网络,使得应用不仅在容器内运行,还能被外部网络访问。这是部署 Web 应用时的一个常见需求,了解如何配置和管理 Docker 网络对于确保应用的可访问性至关重要。

4.3.3 拓展案例 1:容器间通信

在这个案例中,我们将演示如何使两个 Docker 容器之间进行通信。我们将部署两个 Flask 应用,一个作为前端服务,另一个作为后端 API,演示它们如何在 Docker 中相互通信。

步骤 1: 创建前端 Flask 应用

首先,创建一个前端 Flask 应用。在你的工作目录中,创建 frontend.pyrequirements.txt

  • frontend.py:

    # frontend.py
    import requests
    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def home():response = requests.get("http://backend:5000/api")return f'Frontend calling backend: {response.text}'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    requests
    

步骤 2: 创建后端 Flask API

创建一个后端 Flask 应用。在你的工作目录中,创建 backend.py

  • backend.py:

    # backend.py
    from flask import Flaskapp = Flask(__name__)@app.route('/api')
    def api():return 'Hello from Backend!'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    

步骤 3: 创建 Dockerfile

对于前端和后端,可以使用相同的 Dockerfile:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
CMD ["python", "frontend.py"]

步骤 4: 构建 Docker 镜像

分别为前端和后端构建 Docker 镜像:

docker build -t flask-frontend-app -f Dockerfile .
docker build -t flask-backend-app -f Dockerfile .

步骤 5: 创建自定义网络

创建一个 Docker 自定义网络来实现容器间通信:

docker network create flask-network

步骤 6: 启动 Flask 容器

在创建的网络中启动两个 Flask 容器:

docker run -d --name frontend --network flask-network -p 8000:5000 flask-frontend-app
docker run -d --name backend --network flask-network flask-backend-app

步骤 7: 访问前端服务

现在,你可以通过访问 http://localhost:8000 来测试前端服务是否能成功调用后端 API。

通过这个案例,你学会了如何在 Docker 中创建自定义网络,并在此网络下运行多个容器以实现容器间的通信。这种方法对于部署由多个服务组成的应用非常有效,能够保证服务之间的高效通信。

4.3.4 拓展案例 2:使用 Docker Compose 管理网络

在这个案例中,我们将使用 Docker Compose 来管理一个包含 Flask 应用和数据库服务的网络。Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。通过一个 YAML 文件,可以配置应用服务、网络和卷等资源。

步骤 1: 创建 Flask 应用

首先,创建一个 Flask 应用。在你的工作目录中,创建以下文件:

  • app.py:

    # app.py
    from flask import Flask, jsonify
    import osapp = Flask(__name__)@app.route('/')
    def home():return jsonify({"message": "Hello from Flask App!"})if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)
    
  • requirements.txt:

    flask
    

步骤 2: 编写 Dockerfile

创建 Dockerfile 来构建 Flask 应用的镜像:

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app/
CMD ["python", "app.py"]

步骤 3: 创建 Docker Compose 文件

编写 docker-compose.yml 文件来定义 Flask 应用和数据库服务:

version: '3'services:web:build: .ports:- "5000:5000"networks:- app-networkdb:image: postgresenvironment:POSTGRES_DB: exampledbPOSTGRES_USER: exampleuserPOSTGRES_PASSWORD: examplepassnetworks:- app-networknetworks:app-network:

这里,我们定义了两个服务:web(Flask 应用)和 db(Postgres 数据库)。它们都连接到一个名为 app-network 的自定义网络。

步骤 4: 使用 Docker Compose 启动服务

运行以下命令来构建镜像并启动服务:

docker-compose up

这个命令会根据 docker-compose.yml 文件的定义来启动 Flask 应用和数据库服务。

步骤 5: 访问 Flask 应用

现在,你可以通过访问 http://localhost:5000 来测试 Flask 应用。它应该能正常响应,尽管它目前还未与数据库交互。

通过这个案例,你学会了如何使用 Docker Compose 来管理包含多个服务的应用。Docker Compose 不仅简化了容器和网络的管理,还使得整个部署过程更加清晰和一致。这对于开发和测试复杂的多容器应用非常有用。

通过这些案例,你将了解 Docker 容器网络的配置和管理,掌握如何在容器化环境中有效地实现服务间的通信。无论是简单的单容器应用还是复杂的多容器部署,合理的网络配置都是保证容器正常工作的关键。

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

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

相关文章

C++力扣题目 42--接雨水 84--柱状图中最大的矩形

42. 接雨水 力扣题目链接(opens new window) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释&#xff…

一键解锁本地大型语言模型!Ollama框架让你轻松运行Gemma

想要在本地运行大型语言模型吗? Ollama框架提供了这样的机会。 这个框架是专为在Docker容器中部署LLM而设计的,简化了部署和管理流程。 安装Ollama后,你只需执行一条命令,即可在本地运行开源大型语言模型。 它将模型权重、配置…

Less预处理器教程

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈 一、Less介绍 less官方文档 lesscss.org/ less中文文档 less.bootcss.com/ less是一种css预处理器,它扩展了css语言&#xff0c…

Docker复习笔记

Centos7安装Docker Docker官网:www.docker.com Docker官网仓库:hub.docker.com Docker文档是比较详细的 安装相关依赖 yum -y install gcc gcc-c yum install -y yum-utils 设置docker镜像仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/do…

OpenCV开发笔记(七十五):相机标定矫正中使用remap重映射进行畸变矫正

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/136293833 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿…

网络设备和网络软件

文章目录 网络设备和网络软件网卡交换机交换机的三个主要功能交换机的工作原理第二层交换和第三层交换交换机的堆叠和级联 路由器路由器工作原理 网关网关的分类 无线接入点(AP)调制解调器网络软件 网络设备和网络软件 网卡 网络接口卡又称网络适配器,简称网卡。网…

【计算机网络】数据链路层--以太网/MTU/ARP/RARP协议

文章目录 一、以太网1.以太网帧格式2.MAC地址3.局域网的转发原理 二、MTU1.什么是MTU2.MTU对IP协议的影响3.MTU对UDP影响4.MTU对于TCP协议的影响 三、ARP协议1.ARP协议的作用2.ARP数据报的格式3.ARP协议的工作流程 一、以太网 “以太网” 不是一种具体的网络, 而是一种技术标准…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题?比方说一个算法,它的 input 和 output 是什么?问题的条件是什么) 这篇文章提…

音视频剪辑|Windows|抽帧和合帧

什么是抽帧? FFmpeg 抽帧(Extracting frames)的作用是从视频文件中按需提取单张或多张静止图像(帧),并将它们保存为图片文件(如 JPEG、PNG 等格式)。这一功能在以下场合十分有用&am…

Python服务器监测测试策略与工具:确保应用的高可用性!

在构建高可用性的应用程序时,服务器监测测试是至关重要的一环。Python作为一种强大的编程语言,提供了丰富的工具和库来帮助我们进行服务器监测测试。本文将介绍一些关键的策略和工具,帮助你确保应用的高可用性。 1. 监测策略的制定&#xff…

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…

YOLOv9尝鲜测试五分钟极简配置

pip安装python包: pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码: import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…

苹果手机动画演示动画PR样机模板视频素材 iPhone Mockup 7.0

适用于Premiere苹果手机动画演示PR样机模板视频素材 iPhone Mockup 7.0 产品信息: 5款支持alpha频道的动画智能手机。 轻松关闭屏幕上的背景、阴影和反射。 适用于Premiere Pro 2023 每个样机持续时间为13秒。 4K分辨率。 轻松更改颜色。 适用于图像或视频。 包括视…

m估计及其c++简单实现

文章目录 什么是m估计怎么求解m估计呢?Huber函数时的线性m估计 什么是m估计 自20世纪60年代稳健统计建立以来,在国内外众多学者的研究之下,诞生了一系列稳健统计重要理论和成果。其中最主要且广泛使用的稳健统计有以下三类: L-e…

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器:Samplers(取样器)和Logical Controllers(逻辑控制器);它们驱动着测试的进行取样器:让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

@SpringBootApplication

目录 1. SpringBootApplication注解简介 2. 使用SpringBootApplication注解 3. 自定义SpringBootApplication注解 在Spring Boot中,SpringBootApplication是一个非常重要的注解,它用于开启自动配置,简化了我们的开发工作。本文将详细介绍这…

施华洛世奇 Swarovski EDI需求分析

施华洛世奇为全球首屈一指的光学器材及精确切割仿水晶制造商,为时尚服饰、首饰、灯饰、建筑及室内设计提供仿水晶元素。施华洛世奇有两个主要业务,分别负责制造及销售仿水晶元素,以及设计制造成品。 EDI传输协议 施华洛世奇 Swarovski 与合作…

自定义el-upload 上传文件

前言 最近在做一个文件上传的功能&#xff0c;后端接口写好了、发现前端上传文件的页面不会写……&#xff08;我很笨的&#xff09;然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的&#xff0c;可是就是这样我花了…

远程连接服务器及可视化方法(Win和Linux)

1.win端 1、通过SSH连接至服务器 在window下&#xff0c;打开命令行提示符&#xff08;快捷键winr后输入cmd回车&#xff09; 在命令行中输入 ssh 服务器上的用户名192.168.50.204回车并输入服务器上的用户登录密码 至此&#xff0c;已成功通过SSH连接至服务器。 2、通过…

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

Java根据excel模版导出Excel&#xff08;easyexcel、poi&#xff09;——含项目测试例子拿来即用 1. 前言1.1 关于Excel的一般导出2.2 关于easyexcel的根据模版导出 2. 先看效果2.1 模版2.2 效果 3. 代码实现&#xff08;核心代码&#xff09;3.1 项目代码结构3.2 静态填充例子…