docker 的php 安装环境

镜像选择
nginx
nginx使用latest tag。

php
由于php比较多版本,读者在php offical选一个tag,本文使用7.2-fpm(笔者使用latest启动不起来,不知道为什么)。

PHP Dockerfile
要让php连接mysql,还要在docker官方的php镜像上,安装插件。于是,我们使用Dockerfile来构建一个新镜像。

新建php-mysqli目录:

$ mkdir php-mysqli
$ cd php-mysqli
$ vi Dockerfile
编辑Dockerfile,内容如下:

FROM php:7.2-fpm

RUN apt-get update
&& apt-get install iputils-ping
&& docker-php-ext-install mysqli && docker-php-ext-enable mysqli
FROM php:7.2-fpm表示基于php:7.2-fpm tag镜像;
RUN后面的指令,是创建完该镜像的容器后,再在容器上执行这些指令。

这里先不用手动build镜像,等会用docker-compose会自动build。

关于Dockerfile参考 《Docker — 从入门到实践》——使用 Dockerfile 定制镜像。

mysql
mysql offical,本文选5.7tag。

docker compose
官方Guide

安装
1.下载最新版(本文使用1.19.0):

sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
读者可以到Compose GitHub查看所有发布版本。

2.设置权限

sudo chmod +x /usr/local/bin/docker-compose
3.测试是否安装成功

$ docker-compose --version
docker-compose version 1.19.0, build 1719ceb
构建目录结构
我们做一个demo,新建如下目录结构:

php-nginx-compose/
├── conf.d
│ └── nginx.conf
├── docker-compose.yml
├── html
│ └── index.php
└── php-mysqli
└── Dockerfile
php-mysqli
就是刚才在PHP Dockerfile中创建的目录,直接放在php-nginx-compose目录中。

docker-compose.yml:
version: '3'
services:
nginx:
image: nginx:latest
# 端口映射
ports:
- "80:80"
# 依赖关系 先跑php
depends_on:
- "php"
# 数据卷
volumes:
# 映射主机./conf.d目录到容器/etc/nginx/conf.d目录
- "$PWD/conf.d:/etc/nginx/conf.d"
- "$PWD/html:/usr/share/nginx/html"
networks:
- app_net
# 容器名称
container_name: "compose-nginx"
php:
build: ./php-mysqli
# image指定build Dockerfile生成镜像的名称
image: php:7.2-fpm-mysqli
ports:
- "9000:9000"
volumes:
- "$PWD/html:/var/www/html"
networks:
- app_net
container_name: "compose-php"
mysql:
image: mysql:5.7
ports:
- "3306:3306"
# 环境变量
environment:
# mysql密码
- MYSQL_ROOT_PASSWORD={自己填密码}
networks:
app_net:
# 固定子网ip,网段必须在子网络10.10..
ipv4_address: 10.10.10.1
container_name: "compose-mysql"
networks:
# 配置docker network
app_net:
driver: bridge
ipam:
config:
# 子网络
- subnet: 10.10.0.0/16
关于Compose file配置,官方详细说明。网上还有一篇中文配置说明《如何写docker-compose.yml,Docker compose file 参考文档》。笔者建议先看官方文档,不懂了再找翻译。

conf.d/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ .php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
html/index.php

80/tcp compose-nginx 4e681d94c146 php:7.2-fpm-mysqli "docker-php-entrypoi…" 7 seconds ago Up 5 seconds 0.0.0.0:9000->9000/tcp compose-php fcdf6ac20bac mysql:5.7 "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp compose-mysql nginx、php、mysql容器都启动了。如果三者没全启动,尝试再docker-compose up -d;如果还启动不成功,就排查一下是否配置有误。 浏览index.php: 这个画面出现,证明nginx与php容器关联起来了。 可以用Navicat等数据库工具连接mysql,账号:root,密码是刚才配置的MYSQL_ROOT_PASSWORD环境变量的值,端口:3306。 停止服务 1.docker-compose停止 2.docker命令停止 docker-compose停止 用docker-compose up -d。即使用docker命令停止部分容器,也可以用docker-compose up来启动未成功启动的容器。 $ docker-compose stop Stopping compose-nginx ... done Stopping compose-php ... done Stopping compose-mysql ... done docker命令停止 docker stop 容器名/容器id 重启服务 直接用docker-compose up -d重启即可,即使停止了部分容器。 php连接mysql 在php-nginx-compose/html/目录,新建connect_mysql.php: "; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL. "
"; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL. "
"; exit; } echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL. "
"; echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; mysqli_close($link); ?>

ip是刚才docker-compose.yml配置的子网ip ipv4_address: 10.10.10.1。php语法参考官方文档:mysqli_connect。

浏览connect_mysql.php:

出现Success: A proper connection to MySQL was made! The my_db database is great. Host information: 10.10.10.1:3306 via TCP/IP证明连接mysql成功。

Demo
kkmike999/docker-compose-php-nginx-mysql

作者:键盘男
链接:https://www.jianshu.com/p/0561d3cfccda
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考:https://www.jianshu.com/p/0561d3cfccda

posted @ 2020-10-22 09:54  鲁哒哒  阅读(416)  评论(0编辑  收藏  举报