目前我有一个托管网页(主要是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,还是需要创建一个单独的?
答案 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。如果您将服务作为单独的容器,则上述任何一种都不会有任何问题。