赞
踩
使用命令创建文件和文件夹
mkdir -p {php,nginx/{,conf.d},www,mysql}
touch nginx/conf.d/php.conf
touch nginx/nginx.conf
touch php/php.ini
touch www/index.php
将以下代码保存为docker-compose.yml文件
version: '3' services: nginx: image: nginx:latest container_name: nginx ports: - "80:80" volumes: - /etc/localtime:/etc/localtime:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./www/:/www:rw environment: - TZ=Asia/Shanghai depends_on: - php php: image: php:7-fpm container_name: php volumes: - /etc/localtime:/etc/localtime:ro - ./www:/var/www/html - ./php/php.ini:/usr/local/etc/php/php.ini - ./php/php-extensions:/usr/local/lib/php/extensions - ./mysql:/var/lib/mysql environment: - TZ=Asia/Shanghai - MYSQL_HOST=mysql - MYSQL_USER=root - MYSQL_PASSWORD=123456 - MYSQL_DATABASE=mydb depends_on: - mysql mysql: image: mysql:5.7.24 container_name: mysql environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=mydb command: "--default-authentication-plugin=mysql_native_password --server-id=1 --log-bin=mysql-bin --binlog-format=ROW --lower-case-table-names=1 --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --max_connections=3000 --event_scheduler=on --expire_logs_days=7 --socket=/var/lib/mysql/mysql.sock" ports: - "3306:3306" volumes: - /etc/localtime:/etc/localtime:ro - ./mysql:/var/lib/mysql
其中,nginx使用的是最新版本的nginx镜像,监听80端口,将本地的nginx.conf文件挂载到容器的/etc/nginx/nginx.conf路径下。
php使用的是php:7-fpm镜像,将本地的www目录挂载到容器的/var/www/html路径下,将本地的php.ini文件挂载到容器的/usr/local/etc/php/php.ini路径下,设置了连接mysql数据库的环境变量。
mysql使用的是mysql:5.7镜像,设置了root用户的密码和创建的数据库名称,并监听3306端口,将本地的mysql目录挂载到容器的/var/lib/mysql路径下。
在本地创建一个www目录,然后在该目录下创建一个index.php文件,内容如下:
<?php
$servername = "mysql";
$username = "root";
$password = "123456";
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
该文件是一个简单的mysql连接测试文件,使用mysqli连接mysql数据库,连接成功后输出“连接成功”。
在本地创建一个nginx目录, 然后在该目录下创建一个nginx.conf文件,内容如下:
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
在本地创建一个nginx/conf.d目录 然后在该目录下创建一个php.conf文件,内容如下:
server { listen 80; root /www; index index.html index.htm index.php; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location / { index index.html index.htm index.php ; try_files $uri $uri/ /index.php?$query_string; autoindex on; } location ~ \.php$ { #php73是容器命名 root /var/www/html; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; } }
该文件是一个简单的nginx配置文件,监听80端口,将/var/www/html目录设置为根目录,将php文件的请求转发到php容器的9000端口处理。
在本地创建一个php目录 然后在该目录下创建一个php.ini文件,内容如下:
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
date.timezone = Asia/Shanghai
pdo_mysql.default_socket= /var/lib/mysql/mysql.sock
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/mysqli.so
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo.so
docker-compose up -d
接下来给php安装msyql扩展
docker exec -it php bash #进入php容器
docker-php-ext-install pdo pdo_mysql mysqli
docker-php-ext-enable pdo pdo_mysql mysqli
#退出容器后重启容器
exit
docker restart php
等待容器启动完成后,访问http://localhost,即可看到“连接成功”的输出。
注意:在执行docker-compose up -d命令之前,需要先在本地创建好www和mysql目录,并将上述代码保存为docker-compose.yml、index.php和nginx.conf文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。