MySQL在Docker容器中

时间:2016-09-19 21:00:37

标签: mysql linux sockets docker

目前我有一个托管网页(主要是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,还是需要创建一个单独的?

2 个答案:

答案 0 :(得分:3)

设置单独的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

这将解除你的app容器和单独的MySQL容器(故意没有root密码,因为这是用于开发目的)。 现在您可以从您的应用容器中访问mysql服务器,如此

mysql -h db -u root

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

答案 1 :(得分:1)

每个服务都有许多专业人员可以使用单独的容器。 要在同一个容器中安装php + apache + mysql,你必须找到像这个https://github.com/tutumcloud/lamp这样的图像,或者自己从Dockerfile构建它。

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