网站首页 > 精选教程 正文
痛点
笔者在尝试起一个新web项目时,往往会陷入重新建立一套Docker环境的繁琐事当中。我想大家在开始做一个新项目时,或者快速为了和以前的项目做完全的隔离,也会起一套新docker环境。
从这篇文章你会得到
采用`docker-compose`容器编排技术,一步启动全部服务。php容器在官方的基础上还打包了一些常用拓展(附带build源码,动手能力强可以自己打包),php,nginx,mysql都附带有自定义配置文件(便于开发测试的配置调整),都供下载。
架构
本片文章搭建出来的环境如上图。
环境说明
运行环境
* `Mac OS 10.13.6`
* `Virtual Box 5.2.14`
* `Ubuntu 16.04.4`
* `Docker 17.07.0-ce`
容器
* `Nginx 1.12.1-alpine`
* `PHP-fpm 5.6`
* `MySQL 5.7`
* `Redis 3.2`
* `Memcached 1.4.27`
这里说明一下笔者运行环境,采用了在Mac机上安装vbox虚拟机,在虚拟机里面的debian环境安装了Docker环境,文件放在Mac环境,通过文件挂载方式,达到Mac环境编辑,Docker环境实时更新效果。你要问为啥不在Mac下直接装Docker,历史原因~
运行材料
. ├── build ## docker 镜像build 材料 │ ├── php5.6 ## php 5.6 │ │ ├── Dockerfile │ │ ├── imagick-3.4.3.tgz │ │ ├── memcached-2.2.0.tgz │ │ ├── redis-4.0.2.tgz │ │ ├── sources.list │ │ └── xdebug-XDEBUG_2_5_5.tar.gz │ └── php-cli ## php cli 的自建镜像 │ ├── amqp-1.9.3.tgz │ ├── Dockerfile │ ├── Dockerfile-php-swoole │ ├── memcached-3.0.4.tgz │ ├── redis-4.1.1.tgz │ ├── sources.list.jessie │ ├── swoole-4.0.4.tgz │ ├── swoole-4.2.6.tgz │ ├── xdebug-2.6.1.tgz │ └── yaf-3.0.7.tgz ├── config ## 配置文件 │ ├── apt ## 由于使用的debian系列,所以命名apt │ │ └── sources.list ## 更新为国内源 │ ├── memcached ## memchached的配置 │ │ └── memcached.conf │ ├── mysql ## mysql 的配置 │ │ ├── conf.d │ │ │ └── mysqld_safe_syslog.cnf │ │ └── my.cnf │ ├── nginx ## nginx 的配置 │ │ ├── conf.d │ │ │ ├── default │ │ │ └── xiuno │ │ ├── mime.types │ │ ├── nginx.conf │ │ └── sites-enabled │ ├── php ## php的配置,分cli,和fpm配置 │ │ ├── cli │ │ │ ├── conf.d │ │ │ │ ├── 05-opcache.ini │ │ │ │ ├── 10-pdo.ini │ │ │ │ ├── 20-curl.ini │ │ │ │ ├── 20-gd.ini │ │ │ │ ├── 20-imagick.ini │ │ │ │ ├── 20-json.ini │ │ │ │ ├── 20-memcache.ini │ │ │ │ ├── 20-mysqli.ini │ │ │ │ ├── 20-mysql.ini │ │ │ │ ├── 20-pdo_mysql.ini │ │ │ │ ├── 20-readline.ini │ │ │ │ ├── 20-redis.ini │ │ │ │ ├── 20-xdebug.ini │ │ │ │ └── swoole.ini │ │ │ └── php.ini │ │ ├── fpm │ │ │ ├── conf.d │ │ │ │ ├── docker.conf │ │ │ │ ├── www.conf │ │ │ │ └── zz-docker.conf │ │ │ ├── docker-php-fpm.conf │ │ │ ├── php-fpm.conf │ │ │ ├── php.ini │ │ │ └── pool.d │ │ │ └── www.conf │ │ └── mods-available │ │ ├── curl.ini │ │ ├── gd.ini │ │ ├── imagick.ini │ │ ├── json.ini │ │ ├── memcache.ini │ │ ├── mysqli.ini │ │ ├── mysql.ini │ │ ├── opcache.ini │ │ ├── pdo.ini │ │ ├── pdo_mysql.ini │ │ ├── readline.ini │ │ ├── redis.ini │ │ └── xdebug.ini │ └── redis ## redis 配置 │ ├── redis.conf │ ├── redis-server.sh │ └── sentinel.conf ├── data ## 为了数据持久化 │ ├── mysql ## mysql 文件挂载 │ └── redis ## redis 持久化数据文件夹 ├── docker-compose.yaml ## 容器编排 !!! ├── log ## 各个容器产生的日志 │ ├── mysql ## mysql日志 │ │ ├── error.log │ │ └── mysql.log │ ├── nginx ## nginx 日志 │ │ ├── access.log │ │ ├── access_xiuno.log │ │ ├── error.log │ │ └── error_xiuno.log │ └── php ├── php ## php代码存放目录 │ └── xiunobbs ## php项目 └── tool ## php 一些工具 ├── composer.phar └── phpunit-4.8.36.phar
配置文件下载
git clone https://gitee.com/xupaul/docker_fast_init
配置说明
目前笔者还没有写相关自动化脚本自动适配用户的使用环境,所以这里需要先调整一下下载后的配置文件。
docker-compose.yml 文件调整
这个文件有大量的文件挂载配置,这块就需要调整,拿一个举例。
version: "2" services: http: image: nginx:1.12.1-alpine volumes: - ~/config/nginx/nginx.conf:/etc/nginx/nginx.conf:rw ports: - "8080:80" environment: TZ : "Asia/Shanghai" networks: tasker_net: ipv4_address: "192.63.0.11"
在例子中最后`volumes`的下一行,是将宿主机的`nginx.conf`配置文件挂载并覆盖容器内的`nginx.conf`文件,`~/`文件路径就是clone git项目后的目录直接替换即可。
如果你也使用了虚拟机,那么你需要`~/`要替换为`docker`的运行环境的路径!
在`ports`这里,http服务为了不和本机的80端口冲突,以及`sudo`权限才能申请的小于1024的端口,这里我以8080作为默认值。其他容器的端口配置也遵循以上的规则,为的是能一个命令就能启动起来。
为每个容器都配置了时区。
网络ip这部分,为了便于配置就手动分配ip了。
Nginx 配置
配置好了php-fpm之间tcp通讯,以及php路由的rewrite。配置了静态资源缓存。
MySQL 配置
额外配置了一般性的查询日志,便于debug程序。
PHP 配置
php:
image: paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2
volumes:
- ~/config/php/cli/php.ini:/usr/local/etc/php/php.ini/:rw
ports:
- "9000"
environment:
PHP_IDE_CONFIG: "serverName=bs"
XDEBUG_CONFIG: "remote_host=10.0.2.2 remote_port=9000"
我为php一起打包了一些常用拓展,其中xdebug需要调整一下`remote_host`的的ip(docker-compose.yaml, ~/config/php/cli/20-xdebug.ini 两个文件内的都需要调整). `server_name` 需要结合开发IDE一起调整,如PHPStorm里`Preferences | Languages & Frameworks | PHP | Servers`配置路径下有什么可用的记录,那么这里填什么。
Redis 配置
没有特殊配置
Memecached 配置
没有特殊配置
镜像构建
php镜像
可以通过如下命令拉取:
docker pull paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2
或者在到 `~/build/php5.6` 下自行打包:
docker build -t paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2 -f dockerfile .
如果自定义tag name,需要一并调整docker-compose.yml
启动
1. 从gitee下载配置
2. 根据自己的环境调整配置
3. 启动
启动命令
## 当前线程运行,要停止时,键入`Ctrl+C` docker-comose -f ./docker-compose.yaml up ## 后台运行 docker-comose -f ./docker-compose.yaml up -d
摧毁
docker-comose -f ./docker-compose.yaml down
常见问题
- MySQL 挂载的配置文件被忽略,不起作用
MySQL 要求配置文件的权限为只能读,你需要已只读方式挂载
- 不知道remote_host怎么办
禁用xdebug,搭建好环境并启动,在IDE运行的环境(因为`xdebug`需要和IDE通讯)访问以`http`(在浏览器访问,注意端口映射)的方式访问php容器内代码,在`Nginx`的`access.log`里查看访问的ip就是`remote_host`.
最后
祝愿大家能一步到位。
猜你喜欢
- 2024-10-04 私有云搭建ubuntu+php7.2+nginx+mysql+nextcloud
- 2024-10-04 【网络安全】关于PHP Study nginx解析高危漏洞的预警通报
- 2024-10-04 linux中docker配置nginx+php+mysql+thinkphp完整案例
- 2024-10-04 php为什么要用nginx做代理 为什么用php开发网站
- 2024-10-04 nginx限制php程序“跨站”访问 nginx限制只能域名访问
- 2024-10-04 nginx和php-fpm通信,使用unix socket还是TCP
- 2024-10-04 使用docker-compose安装php+nginx+memcached
- 2024-10-04 快速搭建NGINX-HTTPD-PHP-MySQL环境
- 2024-10-04 nginx无法解析PHP以及网站路径问题
- 2024-10-04 Nginx提升:Nginx+PHP+FastCGI加速模式
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)