MySQL在Docker容器中

目前我有一个托pipe网页(主要是PHP)的Docker容器。 数据库现在存储在AWS上的服务器上。 为了开发的目的,我想在Docker容器中创build一个本地数据库。 我做了一些Googlesearch,看起来像大多数人build议创build一个完整的独立容器来托pipeMySQL。 由于这只是一个开发数据库,​​所以我想知道是否可以避免设置另一个容器,并将MySQL直接放入承载网页的容器中。 为此,我尝试安装MySQL服务器:

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吗?还是我需要创build一个单独的?

真的没有努力设置单独的MySQL容器。 真正的努力是将其安装在现有的容器内。

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

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

 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撰写,您可以轻松设置复杂的环境。 而当部署到生产或其他testing环境时,你不需要改变你的Dockerfile。

有许多专业人士为每个服务分开容器。 要在同一个容器中使用php + apache + mysql,您必须find像https://github.com/tutumcloud/lamp这样的图像,或者从Dockerfile中自行构build它。

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