MySQL 如何使用docker-compose和MySQL容器

MySQL 如何使用docker-compose和MySQL容器

在基于Django的Web应用程序中,MySQL是一个非常流行的数据库,但是在构建Web应用程序时,我们需要正确设置数据库。在这篇文章中,我们将使用Docker Compose来为Django应用程序设置带有MySQL数据库的容器。我们会经历一个简单的例子,在其中我们将用Django编写一个具有MySQL作为后端数据库的CRUD应用程序。在这个过程中,我们将看到如何使用docker-compose和MySQL容器。

阅读更多:MySQL 教程

Docker Compose是什么?

Docker Compose是Docker工具箱的一个更高级别的组件之一,它允许你定义和运行多容器的Docker应用程序。它使用单个YAML文件以简单的方式来定义你的Docker容器。一旦你定义了一个文件,就可以使用一个命令来启动整个应用程序。

准备工作

在启动创建我们的应用程序之前,我们需要一些准备工作。首先,需要安装Docker和Docker Compose。使用以下命令安装Docker和Docker Compose:

sudo apt install docker.io
sudo apt install docker-compose

然后,需要创建一个新的项目目录并在其中创建两个文件:Dockerfile和docker-compose.yml。在这里,我们定位到名为“demo”的目录下并创建文件。

mkdir myproject
cd myproject
touch Dockerfile docker-compose.yml

现在,我们已经准备好开始创建我们的Django应用程序与MySQL后端了!

配置MySQL数据库

要创建一个连接到Django应用程序的MySQL容器,我们需要从MySQL官方Docker镜像中拉取一个镜像。在我们的Dockerfile中,我们将使用这个镜像来配置MySQL容器。

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=mysecretpassword 

我们定义密码,以便在启动容器时自动设置。在这种环境下,要使用的MySQL的根密码为“mysecretpassword”。

现在,在创建我们的应用程序之前,我们需要配置一个连接到MySQL并创建模型的Django应用程序。

创建Django应用程序

按照惯例,在Django的根目录中创建一个新的Django应用程序。如果你不记得如何创建一个Django应用程序,请仔细阅读官方文档。

django-admin startapp demo

这里我们为我们的应用程序选择了“demo”。在这个应用程序中,我们将创建Django的模型,然后将其连接到数据库。

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField(max_length=200)

    def __str__(self):
        return self.name

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

在这个模型中,我们定义了Author和Article的两个模型。作者有一个姓名和电子邮件字段。文章有一个标题,内容,以及通过键与作者的关联。在这里,我们使用ForeignKey使文章模型与作者模型相关联。

接下来,我们需要在settings.py文件中配置我们的数据库设置。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'demo_db',
        'USER': 'root',
        'PASSWORD': 'mysecretpassword',
        'HOST': 'mysql',
        'PORT': '3306',
    }
}

在这里,我们定义了连接到MySQL数据库的凭据。我们需要指定数据库引擎、数据库名称、数据库用户和密码、MySQL容器名称以及MySQL容器的端口号。

现在我们已经完成了我们的Django应用程序的配置和MySQL容器配置。在下一步中,我们将使用Docker Compose来启动我们的应用程序。

使用Docker Compose启动应用程序

在docker-compose.yml文件中,我们可以定义整个应用程序和它的依赖关系,以及启动容器的其他设置。以下是我们的docker-compose.yml文件的内容:

version: '3'

services:
  mysql:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: mysecretpassword
    volumes:
      - ./mysql:/var/lib/mysql
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    depends_on:
      - mysql
    volumes:
      - .:/code

在这个文件中,我们定义了两个容器:mysql和web。

mysql容器使用我们刚才创建的Dockerfile文件来创建MySQL容器,并将环境变量和数据卷设置添加到容器中。

web容器使用我们的Dockerfile文件来创建Django容器,并在容器中运行Python manage.py runserver命令来启动Django应用程序,并将它们绑定到主机端口8000上。

容器的依赖关系是由depends_on参数指定的。在这里,web容器依赖mysql容器,并且必须在mysql容器启动之后启动。这个参数不会等待mysql容器完全启动后再启动web容器。有时,这会导致一个已启动但无法访问的容器。

最后,通过MariaDB的映射卷可以将我们的数据保存在宿主机上。如果容器被删除,数据仍可以被保留,以便下次容器被创建时可以访问这些数据。

现在,我们可以使用Docker Compose命令来启动我们的应用程序。

docker-compose up --build

在启动命令中,我们使用–build参数来构建我们定义的所有容器。

现在,我们已经完成了我们的Django应用程序和MySQL容器的配置。在下一节中,我们将看到我们应用程序的输出。

运行示例

运行我们的应用程序时,我们可以使用以下命令将一个author和一篇article添加到我们的应用程序中。

http POST http://localhost:8000/api/author/ name="test" email="test@test.com"
http POST http://localhost:8000/api/article/ title="test" content="test content" author=1

在这里,我们使用了Httpie工具向我们的Django应用程序提交请求。首先我们添加一个作者,然后我们添加一篇文章,这篇文章是与作者相关联的。

现在,你可以查询在我们的数据库中是否有一篇文章。

http GET http://localhost:8000/api/article/1/

在这个命令中,我们使用了Httpie工具来获取ID为1的文章。结果应该是如下所示:

{
    "author": "test",
    "content": "test content",
    "id": 1,
    "title": "test"
}

恭喜!我们已经使用Docker Compose使我们的Django应用程序连接到MySQL容器并构建了一个CRUD应用程序。

总结

在这篇文章中,我们通过Docker Compose创建了一个Django应用程序与MySQL容器相连,展示了一个简单的CRUD应用程序。我们了解了如何使用Docker Compose来启动多个容器和使用MySQL数据库。这个简单的示例可以让我们更好地理解这些概念。现在,你可以开始在自己的应用程序中使用这些概念,并且让他们工作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程