如何簡單迅速地初始化一個全新的PHP開發環境呢?
筆者在嘗試起一個新web項目時,每每會陷入從新創建一套Docker環境的繁雜事當中。我想你們在開始作一個新項目時,或者快速爲了和之前的項目作徹底的隔離,也會起一套新docker環境。php
採用docker-compose
容器編排技術,一步啓動所有服務。php容器在官方的基礎上還打包了一些經常使用拓展(附帶build源碼,動手能力強能夠本身打包),php,nginx,mysql都附帶有自定義配置文件(便於開發測試的配置調整),都供下載。mysql
本片文章搭建出來的環境如上圖。nginx
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
目前筆者尚未寫相關自動化腳本自動適配用戶的使用環境,因此這裏須要先調整一下下載後的配置文件。
這個文件有大量的文件掛載配置,這塊就須要調整,拿一個舉例。git
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項目後的目錄。web
若是你也使用了vbox
虛擬機,那麼你須要./
要替換爲docker
的運行環境的路徑!
在ports
這裏,http服務爲了避免和本機的80端口衝突,以及sudo
權限才能申請的小於1024的端口,這裏我以8080做爲默認值。其餘容器的端口配置也遵循以上的規則,爲的是能一個命令就能啓動起來。redis
爲每一個容器都配置了時區。sql
網絡ip這部分,爲了便於配置就手動分配ip了。docker
配置好了php-fpm之間tcp通信,以及php路由的rewrite。配置了靜態資源緩存。shell
開啓記錄了通常性的查詢日誌,便於debug程序。注意這裏掛載的配置文件讀寫權限要配置只讀!json
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
配置路徑下有什麼可用的記錄,那麼這裏填什麼。
沒有特殊配置
沒有特殊配置
能夠經過以下命令拉取:
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
## 當前線程運行,要中止時,鍵入`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 要求配置文件的權限爲只能讀,你須要已只讀方式掛載
禁用xdebug,搭建好環境並啓動,在IDE運行的環境(由於xdebug
須要和IDE通信)訪問以http
(在瀏覽器訪問,注意端口映射)的方式訪問php容器內代碼,在Nginx
的access.log
裏查看訪問的ip就是remote_host
.
遇到這種狀況,若是時一些沒關係的報錯,能夠選擇忽略他們。能夠在命令後面追加 exit 0
來屏蔽錯誤
祝願你們能一步到位,有問題留言,遇到疑難雜能夠試試本地起虛擬機裏跑docker容器的那種方案。