摘要:痛點如何簡單迅速地初始化一個全新的開發環境呢筆者在嘗試起一個新項目時,往往會陷入重新建立一套環境的繁瑣事當中。架構本片文章搭建出來的環境如上圖。網絡這部分,為了便于配置就手動分配了。配置開啟記錄了一般性的查詢日志,便于程序。
痛點
如何簡單迅速地初始化一個全新的PHP開發環境呢?
筆者在嘗試起一個新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配置說明
目前筆者還沒有寫相關自動化腳本自動適配用戶的使用環境,所以這里需要先調整一下下載后的配置文件。
這個文件有大量的文件掛載配置,這塊就需要調整,拿一個舉例。
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項目后的目錄。
如果你也使用了vbox虛擬機,那么你需要./要替換為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啟動
從gitee下載配置
根據自己的環境調整配置
準備好鏡像,鏡像也可直接拉,我已上傳了官方了。
啟動
啟動命令## 當前線程運行,要停止時,鍵入`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.
docker build 時報錯導致打包鏡像失敗遇到這種情況,如果時一些不要緊的報錯,可以選擇忽略他們。可以在命令后面追加 exit 0 來屏蔽錯誤
最后祝愿大家能一步到位,有問題留言,遇到疑難雜可以試試本地起虛擬機里跑docker容器的那種方案。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27884.html
摘要:痛點如何簡單迅速地初始化一個全新的開發環境呢筆者在嘗試起一個新項目時,往往會陷入重新建立一套環境的繁瑣事當中。架構本片文章搭建出來的環境如上圖。網絡這部分,為了便于配置就手動分配了。配置開啟記錄了一般性的查詢日志,便于程序。 痛點 如何簡單迅速地初始化一個全新的PHP開發環境呢? 筆者在嘗試起一個新web項目時,往往會陷入重新建立一套Docker環境的繁瑣事當中。我想大家在開始做一個新...
摘要:痛點如何簡單迅速地初始化一個全新的開發環境呢筆者在嘗試起一個新項目時,往往會陷入重新建立一套環境的繁瑣事當中。架構本片文章搭建出來的環境如上圖。網絡這部分,為了便于配置就手動分配了。配置開啟記錄了一般性的查詢日志,便于程序。 痛點 如何簡單迅速地初始化一個全新的PHP開發環境呢? 筆者在嘗試起一個新web項目時,往往會陷入重新建立一套Docker環境的繁瑣事當中。我想大家在開始做一個新...
摘要:地址這是一份適用于生產和開發環境的。目前已經在我司的生產環境上并運行良好。日常開發中也是基于此鏡像進行的。如果想快速看看鏡像里有啥東西,只需要運行其中替換成你實際的鏡像。開發環境的使用單獨運行這個容器是沒有意義的。 GITHUB地址:https://github.com/banyancheu... 這是一份適用于生產和開發環境的 Dockerfile。 在 phuison/baseim...
閱讀 3490·2021-11-12 10:36
閱讀 2864·2021-09-22 15:35
閱讀 2814·2021-09-04 16:41
閱讀 1167·2019-08-30 15:55
閱讀 3580·2019-08-29 18:43
閱讀 2075·2019-08-23 18:24
閱讀 1419·2019-08-23 18:10
閱讀 1924·2019-08-23 11:31