在本地搭建了Docker和LAMP环境之后,遇到了连接到maridDB的问题
我本想学习使用PHP创建一个论坛应用程序,
特意搭建了Docker环境来进行开发,并记录下此时的备忘录。
用Docker建立LAMP环境。
首先,您可以参考这篇文章并按照其步骤进行操作,很容易就能够查看到默认包含的「phpinfo()」页面。
按照文章的指示进行配置,使用docker-compose up -d命令启动容器。
只要使用本地主机访问此URL,就可以访问我们这次创建的文件夹内的index.php文件。非常方便。
接下来,我们将输入以下命令以连接至MariaDB。
$ docker exec -it コンテナID mysql -u ユーザ名 -p
运行中的容器可以在 $ docker ps 中查看到容器ID。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c876e4a6be4 bitnami/apache:2.4 "/opt/bitnami/script…" 39 minutes ago Up 3 minutes 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp apache_docker_sample
5008ca456e72 (フォルダ名)_php-fpm "php-fpm -F" 39 minutes ago Up 3 minutes 9000/tcp php-fpm_docker_sample
22695d443a79 mailhog/mailhog "MailHog" About an hour ago Up 3 minutes 0.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp (フォルダ名)_mailhog_1
没有MariaDB。
使用”$ docker ps -a”命令进行搜索(此命令将显示未启动的容器)。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e852d2ec700b mariadb:10.3 "docker-entrypoint.s…" About a minute ago Exited (1) 30 secounds ago 3306/tcp, 0.0.0.0:3307->3307/tcp mariadb_docker_sample
好像发生了。看起来好像在启动的瞬间就停止了。(详细的机制我自己还没有完全理解……)
研究了解这个问题的解决方案后,发现需要进行MariaDB的持久化设置。
根据Docker的文档,有一个叫做“卷”的概念,它被描述为:“用于在Docker容器中生成和使用数据,并保持数据的持久性”。
以下是我修正过的有问题的地方。
修改docker-compose.yml文件
(修正前)
#MARIADB
mariadb:
image: mariadb:10.3
container_name: mariadb_docker_sample
working_dir: /application
hostname: 127.0.0.1
ports:
- '3307:3307'
volumes:
- .:/application
- ./mysql-data:/var/lib/mysql
- ./mariadb/my-overrider.cnf:/etc/mysql/my.cnf
environment:
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
env_file:
- .env
mailhog:
image: mailhog/mailhog
ports:
- '8025:8025'
- '1025:1025'
(修正後)
#MARIADB
mariadb:
image: mariadb:10.3
container_name: mariadb_docker_sample
working_dir: /application
hostname: 127.0.0.1
ports:
- '3307:3307'
volumes:
- .:/application
#- ./mysql-data:/var/lib/mysql
- ./mariadb:/var/lib/mariadb
- ./mariadb/my-overrider.cnf:/etc/mysql/my.cnf
environment:
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
env_file:
- .env
mailhog:
image: mailhog/mailhog
ports:
- '8025:8025'
- '1025:1025'
在此之后,应用Docker-compose的修改
docker-compose up -d
当我使用 $ docker ps 命令进行确认时,我发现mariaDB也已经启动了。
使用以下命令重新输入:$docker exec -it 容器ID mysql -u 用户名 -p。您可以通过$docker -s确认容器ID。
输入.env文件中设置的值作为用户名和密码(如果按照第一个链接中的文章设置,则用户名应为docker,密码应为pass1234)。
我此刻已经成功连接了!
最后
未来我将不再使用MAMP,而是可以轻松地搭建PHP环境,但由于我对Dockerfile和docker-compose中的代码理解不够,所以将来我希望能够继续学习。
以下是我参考的网站
( Docker加上LAMP环境的构建)
在Docker中验证操作。
(mariaDB连接测试)
(面向初学者的Docker Compose命令速查)