docker搭建nginx+php+mysql
- 官方:Docker、PHP、Laravel
- 环境:mac、nginx-1.14、php-7.2(多版本)、mysql-5.7
- 目标:实现本地服务docker化,nginx、php、mysql容器互联、docker容器对外开放
1、获取镜像(官方地址:https://hub.docker.com/)
#获取nginx docker pull nginx:1.14 #获取php docker pull php:5.6-fpm docker pull php:7.2-fpm #获取mysql docker pull mysql:5.7
2、先启动MySQL(映射本地MySQL数据目录和配置目录)
docker run --name mysql \ -p 33060:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -v /local/docker/mysql/mysql5.7/data:/var/lib/mysql \ -v /local/docker/mysql/mysql5.7/conf:/etc/mysql \ -d mysql:5.7
配置MySQL
cd /local/docker/mysql/mysql5.7/conf # 创建my.cnf 并配置参数并保存 vi my.cnf # 重启MySQL docker restart mysql
3、启动PHP7.2(映射本地的项目目录、php配置、php日志目录)
--link mysql:mysql 表示docker用来链接2个容器 (php7.2访问mysql)
docker run \ --name php7.2 \ --link mysql:mysql \ -v /local/www:/data/www \ -v /local/docker/php/php7.2/conf:/usr/local/etc/php \ -v /local/docker/php/php7.2/logs:/phplogs \ -d php:7.2-fpm # 配置php.ini /local/docker/php/php7.2/conf vi php.ini # 重启php7.2 docker restart php7.2
4、启动nginx(映射配置文件目录为本地、本地的配置文件需要手动拷贝一份不然启动不了、映射/data/www为本地的项目目录这个配置的时候需要注意)
docker run -p 80:80 \ --name nginx \ --link php7.2:php7.2 \ -v /local/docker/nginx/nginx1.14/logs:/var/log/nginx \ -v /local/docker/nginx/nginx1.14/etc:/etc/nginx:ro \ -v /local/www:/data/www \ -d nginx:1.14
5、配置nginx配置文件(注意事项:root中/data/www为容器内目录对应本机目录为docker启动时候指定的映射目录、fastcgi_param中需要配置的是php容器中的/data/www目录也是对应本机中的目录、fastcgi_pass中配置的是容器的name) 这里使用的是配置一个简单的laravel项目
fastcgi_pass php7.2:9000; // php7.2为启动时候的link名称
cd /local/docker/nginx/nginx1.14/etc vi conf.d/default.conf #配置default文件 server { listen 80; server_name laravel.tyl.com; index index.html index.htm index.php; root /data/www/laravel/public; #支持PHP的Fast-CGI 模式 location ~ .*\.(php|php5)?$ { include fastcgi.conf; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME /data/www/laravel/public/$fastcgi_script_name; fastcgi_pass php7.2:9000; fastcgi_index index.php; } location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ { access_log off; } } # 重启nginx docker restart nginx
6、本地配置项目env文件
cd /local/www/laravel vi .env #laravel中env文件配置DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=mysql DB_USERNAME=root DB_PASSWORD=root
7、本地访问
nginx: http://localhost
mysql: 127.0.0.1:33060
项目地址:laravel.tyl.com
8、php增加扩展(官方文档:https://hub.docker.com/_/php/)
# 进人容器php7.2 docker exec -it php7.2 /bin/bash # 查看扩展 php -m # 官方扩展 docker-php-ext-install php_mysql # 退出容器后重启php7.2
9、保存镜像(需要在镜像官方网站申请账号)
# 保存为自己的扩展镜像 docker commit --author "taoyl <[email protected]>" --message "增加扩展" php7.2 php:7.2-new # 提交镜像到官方 docker push php:7.2-new # 停止和删除当前镜像 docker stop php7.2 docker rm php7.2 # 重新启用新的php镜像 此镜像即为包含扩展的镜像 docker run \ --name php7.2 \ --link mysql:mysql \ -v /local/www:/data/www \ -v /local/docker/php/php7.2/conf:/usr/local/etc/php \ -v /local/docker/php/php7.2/logs:/phplogs \ -d php:7.2-new