一.創(chuàng)建帶有swoole-redis-pdo_mysql-gd擴(kuò)展的docker image
1.創(chuàng)建dockerfile文件
vim?dockerfile
2.在dockerfile文件寫(xiě)入
from?php:7.1-fpm run?apt-get?update?&&?apt-get?install?-y? ??libfreetype6-dev? ??libjpeg62-turbo-dev? ??libpng-dev? &&?docker-php-ext-install?-j$(nproc)?iconv? &&?docker-php-ext-configure?gd?--with-freetype-dir=/usr/include/?--with-jpeg-dir=/usr/include/? &&?docker-php-ext-install?-j$(nproc)?gd? &&?docker-php-ext-configure?pdo_mysql? &&?docker-php-ext-install?pdo_mysql? &&?pecl?install?redis-4.3.0? &&?pecl?install?swoole? &&?docker-php-ext-enable?redis?swoole
3.創(chuàng)建自定義的php鏡像,主要不要漏了最后的 ‘.’,是指定當(dāng)前目錄構(gòu)建鏡像
docker?build?-t?myphp4?.
運(yùn)行指令,由于網(wǎng)絡(luò)問(wèn)題等,需要等比較長(zhǎng)的時(shí)間,成功后會(huì)出現(xiàn)類(lèi)似下面的代碼
…
build process completed successfully
installing ‘/usr/local/include/php/ext/swoole/config.h’
installing ‘/usr/local/lib/php/extensions/no-debug-non-zts-20160303/swoole.so’
install ok: channel://pecl.php.net/swoole-4.3.1
configuration option “php_ini” is not set to php.ini location
you should add “extension=swoole.so” to php.ini
removing intermediate container ad1420f7554f
—> 2f2f332d73ce
successfully built 2f2f332d73ce
successfully tagged myphp4:latest
至此docker 的自定義myphp4 image創(chuàng)建成功!
二.創(chuàng)建docker-compose.yml文件
mkdir?pnsmr cd?pnsmr vim?docker-compose.yml
寫(xiě)入下面代碼
version:?'3.0' services: nginx: ??image:?"nginx:latest" ??ports: ???-?"10000:80" ??volumes: ???-?/var/www/html:/usr/share/nginx/html php-fpm: ??image:?"myphp4" ??volumes: ??-?/var/www/html:/usr/share/nginx/html mysql: ??image:?"mysql:latest" redis: ??image:?"redis:4.0"
運(yùn)行指令
docker-compose?up?-d
成功可以看到
warning: the docker engine you’re using is running in swarm mode.
compose does not use swarm mode to deploy services to multiple nodes in a swarm. all containers will be scheduled on the current node.
to deploy your application across the swarm, use `docker stack deploy`.
creating network “pnsmr_default” with the default driver
creating pnsmr_php-fpm_1 … done
creating pnsmr_redis_1 … done
creating pnsmr_mysql_1 … done
creating pnsmr_nginx_1 … done立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
至此,已開(kāi)啟nginx mysql redis php 服務(wù)
三.修改各服務(wù)配置文件
1.瀏覽器輸入 127.0.0.1:9998 #此處應(yīng)輸入你的服務(wù)器ip地址,可以看到下圖
2.接下來(lái)要修改容器里nginx的配置文件,先使用指令查看各容器的docker ip地址
docker?inspect?-f?'{{.name}}?-?{{range?.networksettings.networks}}{{.ipaddress}}{{end}}'?$(docker?ps?-aq)
此指令可以查看所有用docker-compose 開(kāi)啟的容器的ip,結(jié)果類(lèi)似下圖,可以用對(duì)應(yīng)的ip地址進(jìn)行內(nèi)部通訊
3.復(fù)制nginx容器的配置文件出來(lái),并修改替換,使nginx能解析php
docker?cp?pnsmr_nginx_1:/etc/nginx/conf.d/default.conf?nginx.conf vim?nginx.conf
修改為下列代碼
server?{ ??listen????80; ??server_name?localhost; ??#charset?koi8-r; ??#access_log?/var/log/nginx/host.access.log?main; ??location?/?{ ????root??/usr/share/nginx/html; ????index?index.html?index.htm; ??} ??#error_page?404???????/404.html; ??#?redirect?server?error?pages?to?the?static?page?/50x.html ??# ??error_page??500?502?503?504?/50x.html; ??location?=?/50x.html?{ ????root??/usr/share/nginx/html; ??} ??#?proxy?the?php?scripts?to?apache?listening?on?127.0.0.1:80 ??# ??#location?~?.php$?{ ??#??proxy_pass??http://127.0.0.1; ??#} ??#?pass?the?php?scripts?to?fastcgi?server?listening?on?127.0.0.1:9000 ??# ??location?~?.php$?{ ????root??????html; ????fastcgi_pass??172.24.0.3:9000;#此處需要填寫(xiě)你的php容器的docker內(nèi)部通訊ip ????fastcgi_index?index.php; ????fastcgi_param?script_filename?/usr/share/nginx/html/$fastcgi_script_name; ????include????fastcgi_params; ??} ??#?deny?access?to?.htaccess?files,?if?apache's?document?root ??#?concurs?with?nginx's?one ??# ??#location?~?/.ht?{ ??#??deny?all; ??#} } docker?cp?nginx.conf?pnsmr_nginx_1:/etc/nginx/conf.d/default.conf?#將修改好的配置文件拷貝到容器里 docker?container?stop?pnsmr_nginx_1? docker?container?start?pnsmr_nginx_1?#重啟nginx容器使配置文件生效 vim?/var/www/html/index.php?#在服務(wù)器本地目錄新建?index.php?文件,輸入<?php phpinfo(); 并保存 vim /var/www/html/index.html #在服務(wù)器本地目錄新建 index.html 文件,輸出helloworld
訪(fǎng)問(wèn)127.0.0.1:9998, html文件解析正常
訪(fǎng)問(wèn)127.0.0.1:9998/index.php,php文件解析正常
4.測(cè)試mysql,redis是否生效
vim?/var/www/html/redis.php?#用于測(cè)試redis是否配置成功 <?php $redis = new redis(); $redis->connect("172.24.0.4",6379); $redis->set('test','this?is?a?test?for?redis'); echo?$redis->get('test');
訪(fǎng)問(wèn)127.0.0.1:9998/redis.php,redis已生效
進(jìn)入mysql容器
docker?exec?-it?pnsmr_mysql_1?bash
進(jìn)入mysql并更改root用戶(hù)密碼
創(chuàng)建測(cè)試文件
vim?/var/www/html/mysql.php <?php $pdo = new pdo('mysql:host=172.24.0.2;dbname=mysql;port=3306','root','root123'); var_dump($pdo);
訪(fǎng)問(wèn)127.0.0.1:9998/mysql.php,mysql已生效