Docker容器内链接另一个容器的数据库

在现代应用开发中,Docker已成为一种流行的方法来创建和管理容器化的应用程序。通过使用Docker,我们可以轻松搭建出类似于生产环境的开发环境。本文将介绍如何在一个Docker容器内链接到另一个容器的数据库,并给出具体的代码示例和图示。

基本概念

Docker容器是轻量级的虚拟化单元,允许开发者打包应用及其所有依赖环境。你可以把不同的服务(如Web服务和数据库服务)放在不同的容器中。在这种架构下,一个容器可以通过网络与另一个容器通信。我们将在下面的示例中使用一个Flask Web应用容器与一个MySQL数据库容器。

创建Docker网络

首先,我们需要创建一个Docker网络,使得两个容器能在同一网络内相互访问。

docker network create my_network
  • 1.

启动MySQL容器

接下来,我们将启动一个MySQL容器,并将其连接到创建的网络中。

docker run --name mysql-container --network my_network -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -d mysql:latest
  • 1.

这里,MYSQL_ROOT_PASSWORD用于设置MySQL的root密码,MYSQL_DATABASE用于创建初始数据库。

启动Flask应用容器

现在,我们将启动一个Flask应用容器,该容器将连接到MySQL数据库。我们使用Dockerfile来构建Flask应用:

Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

requirements.txt

flask
mysql-connector-python
  • 1.
  • 2.

app.py

from flask import Flask
import mysql.connector

app = Flask(__name__)

@app.route('/')
def index():
    db = mysql.connector.connect(
        host="mysql-container",  # MySQL容器的名字
        user="root",
        password="root",
        database="mydb"
    )
    cursor = db.cursor()
    cursor.execute("SHOW DATABASES")
    databases = cursor.fetchall()
    return str(databases)

if __name__ == '__main__':
    app.run(host='0.0.0.0')
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

构建和启动Flask应用容器:

docker build -t flask-app .
docker run --name flask-container --network my_network -p 5000:5000 -d flask-app
  • 1.
  • 2.

访问Web服务

现在,我们可以在浏览器中访问 http://localhost:5000,Flask应用将会展示MySQL数据库中的所有数据库。

任务时间线

以下是项目的甘特图,展示了创建和连接容器的过程。

Docker容器创建和连接时间线 2023-10-01 2023-10-01 2023-10-01 2023-10-01 2023-10-02 2023-10-02 2023-10-02 2023-10-02 2023-10-03 2023-10-03 2023-10-03 2023-10-03 2023-10-04 创建Docker网络 启动MySQL容器 启动Flask应用容器 创建网络 启动数据库容器 启动应用容器 Docker容器创建和连接时间线

状态图

下面是一个状态图,描述容器的不同状态。

停止 运行 销毁

结论

通过上面的示例,我们展示了如何在一个Docker容器中连接到另一个容器的数据库。Docker的网络功能使得容器间的通信变得简单而高效。在实际开发中,这种容器化的方法极大地提高了开发效率和应用的可移植性。相信在将来的项目中,你会发现Docker是一个不可或缺的工具。