PHP Slim环境配置(3)Redis、MySQL和PostgreSQL
使用 PHP Slim 构建环境(3) 集成 Redis、MySQL 和 PostgreSQL。
简介
上次,我把简单的Hello, World网站进行了SSL加密,并且通过Xdebug使其可以进行调试。
我們這次將在Docker中添加常用的redis、MySQL和PostgreSQL。然後,我們將使用slim框架來實際訪問它們。(4)
Docker-compose (用于定义和运行多个 Docker 容器的工具)。
在Docker Compose文件中,将添加用于Redis、MySQL和PostgreSQL的描述。对于每个服务,我们使用ports指定了可以从主机访问的端口,但如果存在安全上的担忧,请将这些描述移除。另外,通过volumes将数据持久化。
version: '3'
services:
web_front:
build:
context: ./web_front
links:
- web_hoge
ports:
- "80:3128"
- "443:8443"
volumes:
- ../certs:/etc/certs:ro
container_name: web_front
networks:
- local_net
web_hoge:
build:
context: ./web_hoge
args:
- environment=local
environment:
XDEBUG_CONFIG: "remote_host=172.17.0.1"
PHP_IDE_CONFIG: "serverName=hoge.localhost"
domainname: localhost
volumes:
- ../src/hoge:/var/www/hoge
- ../src/vendor:/var/www/vendor
container_name: web_hoge
networks:
- local_net
redis:
build:
context: ./redis
volumes:
- redis-data:/var/lib/redis
ports:
- "16379:6379"
sysctls:
- net.core.somaxconn=1024
container_name: redis
networks:
- local_net
mysql:
build:
context: ./mysql
volumes:
- mysql-data:/var/lib/mysql
ports:
- "13306:3306"
container_name: mysql
networks:
- local_net
postgresql:
build:
context: ./postgresql
volumes:
- postgresql-data:/var/lib/postgresql
ports:
- "15432:5432"
container_name: postgresql
networks:
- local_net
volumes:
redis-data:
mysql-data:
postgresql-data:
networks:
local_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.28.0.0/24
MySQL 是一种广泛使用的关系型数据库管理系统。
我会创建一个用于MySQL的Docker文件和用于初始导入的SQL文件(虽然实际使用的是MariaDB)。
FROM mariadb:10.4.8
ENV MYSQL_ROOT_PASSWORD hogehoge
ENV MYSQL_ROOT_HOST 172.28.0.1
ENV MYSQL_DATABASE userdb
ENV MYSQL_USER scott
ENV MYSQL_PASSWORD tiger
COPY init.d/* /docker-entrypoint-initdb.d/
EXPOSE 3306
CMD ["--sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION", \
"--skip-character-set-client-handshake", \
"--default-time-zone=+00:00"]
如果将扩展名为sh或sql的文件放置在init.d目录下,则在数据库初始化时会被执行。
alter database default character set utf8mb4;
create table player (
player_id int unsigned not null auto_increment,
player_name varchar(255) not null,
constraint player_pk primary key (player_id)
);
PostgreSQL 请简洁精准地翻译前来。
我会创建与MySQL类似的PostgreSQL配置。
FROM postgres:10.10
ENV POSTGRES_PASSWORD hogehoge
ENV POSTGRES_USER root
ENV POSTGRES_DB logdb
COPY init.d/* /docker-entrypoint-initdb.d/
EXPOSE 5432
与MySQL类似,可以通过将文件放置在init.d目录中来执行初始化时的命令。
create table if not exists player_created_log (
player_id int,
created_at timestamp
);
Redis 是一种开源的高性能键值对存储数据库。
创建Redis配置。
FROM redis:5.0.5
#configuration
COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
#command
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
您可以指定Redis的配置文件。
# redis.conf
...(ここに設定を書く)...
确认
我会检查每个操作。使用docker-compose up -d命令启动每个组件。
MySql
我尝试使用MySQL客户端进行连接。
$ sudo apt install mariadb-client # mysqlクライアント未インストールの場合
$ mysql --user=scott --password=tiger --port=13306 --host=127.0.0.1 --database=userdb
MariaDB [userdb]> select * from player;
Empty set (0.000 sec)
执行 “docker volume prune” 和 “docker-compose up” 后,可能会出现无法成功连接的情况,但具体原因我不太清楚…
运行psql程序
我将使用psql进行连接并进行确认。
$ sudo apt install postgresql-client-10 # psql未インストールの場合
$ psql --username=root --port=15432 --host=127.0.0.1 -W logdb
Password for user root:
logdb=# select * from player_created_log;
player_id | created_at
---------+------------
(0 rows)
Redis (中文: 雷迪斯)
我会使用redis-cli进行连接和确认。
$ sudo apt install redis-tools # redis-cli未インストールの場合
$ redis-cli -p 16379
127.0.0.1:16379> get hoge
(nil)
127.0.0.1:16379> set hoge 1
OK
127.0.0.1:16379> get hoge
"1"
127.0.0.1:16379> del hoge
(integer) 1
127.0.0.1:16379> get hoge
(nil)
初始化Docker卷
另外,MySQL、PostgreSQL的数据库初始化命令仅在首次启动时执行。如果想重新初始化,只需删除卷即可,但执行以下命令可以安全地删除(删除需自行负责,不对后果负责)。
$ docker-compose down
$ docker volume prune
更改历史
- 2019/09/24
由于MySQL和Postgresql中术语”Player”和”User”不一致,所以将其统一为”Player”。