【问题标题】:MySQL in Docker containerDocker 容器中的 MySQL
【发布时间】:2016-09-19 21:00:36
【问题描述】:

目前我有一个托管网页(主要是 php)的 Docker 容器。现在,数据库存储在 AWS 上的服务器上。出于开发目的,我想在 Docker 容器中创建一个本地数据库。我做了一些谷歌搜索,似乎大多数人建议创建一个完整的单独容器来托管 mysql。由于这只是一个用于开发的数据库,我想知道是否可以避免设置另一个容器并将 MySQL 直接放入托管网页的容器中。为此,我尝试安装 MySQL-Server:

sudo apt-get install mysql-server

Mysql 安装得很好。然后我尝试运行 MySQL 交互式 shell:

mysql -u root -p

当我这样做时,我收到以下错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我可以在同一个 Docker 容器中运行 mysql 还是需要创建一个单独的容器?

【问题讨论】:

  • 嗨@tyler-hilbert,你试过mysql -u root -p吗?
  • @Andy K um 是的,这就是问题中出现错误的命令
  • 抱歉@tyler-hilbert 来晚了。我明天早上去看看。
  • @AndyK 好酷

标签: mysql linux sockets docker


【解决方案1】:

设置单独的 MySQL 容器真的不费吹灰之力。真正的努力是将其安装在现有容器中。

我建议您创建 docker compose 文件并定义应用程序和数据库容器(确保您在开发环境中安装了 docker compose,在大多数情况下它应该已经安装)。

创建一个文件 docker-compose.yml(你可以在 Dockerfile 为你的项目所在的同一文件夹中创建它,通常是项目根文件夹),内容如下:

version: '2'
services:
  app:
    image: your_app_docker_image_name
    ...more config options depending on your project (volumes, ports, etc)
  db:
    image: mariadb
    volumes:
      - './user/db:/var/lib/mysql'
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=true

开始你的项目运行

docker-compose up

这将提升您的应用程序容器和单独的 MySQL 容器(故意没有 root 密码,因为这是用于开发目的)。 现在你可以像这样从你的应用容器访问 mysql 服务器了

mysql -h db -u root

使用 docker compose,您可以轻松设置复杂的环境。在部署到生产环境或其他测试环境时,您无需更改 Dockerfile。

【讨论】:

    【解决方案2】:

    有很多专业人士可以为每项服务提供单独的容器。 要将 php+apache+mysql 放在同一个容器中,您要么必须找到类似 https://github.com/tutumcloud/lamp 的图像,要么自己从 Dockerfile 构建它。

    但是试着想象有一天你决定将你的数据库存储引擎从 Mysql 切换到 Percona 或 Maria,或者你想开始在你的应用程序中使用 Memcached/Redis。如果您将服务作为单独的容器,上述任何一种都不会有任何问题。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2019-06-10
      • 1970-01-01
      • 2019-04-14
      • 2022-01-09
      • 2019-04-07
      • 2020-03-26
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多