Docker:Nginx-Redis-Mysql-PHP 部署
Docker:Nginx-Redis-Mysql-PHP 部署
網絡橋接
Docker容器之間默認網絡隔離,需要使用橋接網絡進行互通
創建網絡
docker network create net-local
docker network ls
NETWORK ID NAME DRIVER SCOPE da9c8fc3dc80 bridge bridge local 786414beb4b3 host host local 75b536a6e1ff net-local bridge local ac79ba73f784 none null local容器關聯網絡: —network [網絡名稱]
依賴redis和mysql容器,優先啟動
Redis
拉取鏡像
docker pull redis:latest
啟動容器
docker run -itd --name redis-local -p 6379:6379 --network net-local redis
Mysql
拉取鏡像
docker pull mysql:latest
docker run -itd --name mysql-local -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --network net-local mysql
PHP
選用7.4-buster版本
docker pull php:7.4-fpm-buster
++注意:alpine版本為了減輕鏡像體積,去除了很多命令和擴展,而buster版本中豐富了些基礎命令,如:apt++
新建鏡像配置文件
FROM php:7.4-fpm-buster #COPY [--chown=www-data:www-data] install.sh kafka_start.sh /tmp/ #RUN chmod 777 /tmp/install.sh && /tmp/install.shRUN apt update \# 相關依賴必須手動安裝&& apt-get install -y \libfreetype6-dev \libjpeg62-turbo-dev \libmcrypt-dev \libpng-dev \librdkafka-dev \autoconf \automake \libtool \curl \wget \# 生成php源碼默認擴展目錄&& docker-php-source extract \# 下載predis擴展包&& curl -L -o /tmp/reids.tar.gz "https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2" \&& cd /tmp/ \&& tar -zxvf reids.tar.gz \&& mv phpredis-5.0.2 /usr/src/php/ext/phpredis \# 安裝kafka&& wget http://archive.apache.org/dist/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz \&& tar -zxvf kafka_2.11-0.10.2.0.tgz \&& mv kafka_2.11-0.10.2.0/ /opt/kafka \# 安裝php-kafka&& wget https://github.com/arnaud-lb/php-rdkafka/archive/4.0.2.tar.gz \&& tar -zxvf 4.0.2.tar.gz \&& mv php-rdkafka-4.0.2 /usr/src/php/ext/kafka \# 安裝擴展&& cd /usr/src/php/ext \# 如果安裝的擴展需要自定義配置時#&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \&& docker-php-ext-install iconv phpredis pcntl pdo_mysql kafka \# 需要php.ini中配置"extension=mcrypt.so;"&& pecl install mcrypt按照配置文件建立鏡像
docker build -f ~/Documents/Work/Docker/Php/Dockerfile -t php:7.4-fpm-local-buster ~/Documents/Work/Docker/Php/
運行容器
docker run --name php7.4-fpm-local-buster -v ~/Documents/Work/Project:/www -v ~/Documents/Work/Docker/Php/php.ini:/usr/local/etc/php/php.ini --link redis-local:redis --link mysql-local:mysql --network net-local -d php:7.4-fpm-local-buster
Nginx
docker pull nginx:latest
配置文件
server {listen 80;server_name local.api.spm.tool.wwwnet.com;#spm-tool/public是映射的主機目錄root /usr/share/nginx/html/spm-tool/public;add_header X-Frame-Options "SAMEORIGIN";add_header X-XSS-Protection "1; mode=block";add_header X-Content-Type-Options "nosniff";index index.php;charset utf-8;location / {proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; index index.html index.htm index.php;try_files $uri $uri/ /index.php?$query_string;}location = /favicon.ico { access_log off; log_not_found off; }location = /robots.txt { access_log off; log_not_found off; }error_page 404 /index.php;location ~ \.php$ {fastcgi_pass php:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME #/www/spm-tool/public/是映射的容器內目錄/www/spm-tool/public/$fastcgi_script_name;fastcgi_param APP_ENV local; include fastcgi_params;}}運行
docker run --name nginx-local -p 80:80 -d -v ~/Documents/Work/Project:/usr/share/nginx/html:ro -v ~/Documents/Work/Docker/nginx/conf/conf.d:/etc/nginx/conf.d:ro -v ~/Documents/Work/Docker/nginx/logs:/var/log/nginx --link php7.4-fpm-local-buster:php --link redis-local:redis --link mysql-local:mysql --network net-local nginx
關于參數說明參考Docker教程
容器內安裝PHP擴展
進入docker的php容器
docker exec -it php7.4-fpm-local-buster sh
安裝擴展
# 生成php源碼默認擴展目錄 docker-php-source extract# 下載源碼包至/tmp目錄 curl -L -o /tmp/reids.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2 cd /tmp/ tar -zxvf reids.tar.gz# 將擴展包移至php源碼擴展目錄 mv phpredis-5.0.2 /usr/src/php/ext/phpredis# 進入擴展目錄 cd /usr/src/php/ext/# 安裝predis擴展 docker-php-ext-install phpredis pcntl pdo_mysql# 檢查php擴展 php -m | grep redis系統置入命令別名
vi ~/.bash_profile
cat ~/.bash_profile
alias ll='ls $LS_OPTIONS -lha'source ~/.bash_profile
Redis共享網絡HOST
進入PHP容器,查看當前ip
/usr/src/php/ext # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:04 inet addr:172.18.0.4 Bcast:172.18.255.255 Mask:255.255.0.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:40736 errors:0 dropped:0 overruns:0 frame:0TX packets:34103 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:48118457 (45.8 MiB) TX bytes:3098250 (2.9 MiB)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:18 errors:0 dropped:0 overruns:0 frame:0TX packets:18 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:1606 (1.5 KiB) TX bytes:1606 (1.5 KiB) # 此IP為redis鏈接地址 /var/www/html # ping 172.18.0.2 PING 172.18.0.2 (172.18.0.2): 56 data bytes 64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.583 ms 64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.152 ms對應env.local配置
REDIS_CLIENT=predis REDIS_HOST=172.18.0.2 REDIS_PASSWORD= REDIS_PORT=6379TOKEN_REDIS_HOST=172.18.0.2 TOKEN_REDIS_PASSWORD= TOKEN_REDIS_PORT=6379檢查運行php的用戶
/usr/local/php/php/fpm # php -i |grep user Configure Command => './configure' '--build=x86_64-linux-musl' '--with-config-file-path=/usr/local/etc/php' '--with-config-file-scan-dir=/usr/local/etc/php/conf.d' '--enable-option-checking=fatal' '--with-mhash' '--with-pic' '--enable-ftp' '--enable-mbstring' '--enable-mysqlnd' '--with-password-argon2' '--with-sodium=shared' '--with-pdo-sqlite=/usr' '--with-sqlite3=/usr' '--with-curl' '--with-libedit' '--with-openssl' '--with-zlib' '--enable-fpm' '--with-fpm-user=www-data' '--with-fpm-group=www-data' '--disable-cgi' 'build_alias=x86_64-linux-musl' ignore_user_abort => Off => Off user_dir => no value => no value user_ini.cache_ttl => 300 => 300 user_ini.filename => .user.ini => .user.ini bytes_received_change_user_packet => 0 packets_received_change_user => 0 com_change_user => 0 Registered save handlers => files user redis rediscluster user_agent => no value => no value PHP_EXTRA_CONFIGURE_ARGS => --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi $_SERVER['PHP_EXTRA_CONFIGURE_ARGS'] => --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi $_ENV['PHP_EXTRA_CONFIGURE_ARGS'] => --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi將代碼目錄權限更換為www-data
chown -R www-data:www-data /www/spm-tool
將緩存目錄賦予777權限
chmod -R 777 /www/spm-tool/storage/framework/cache
附錄
關于參數說明參考Docker教程
如果用到 composer,建議主機安裝和容器對應的php版本及擴展,docker-composer有些復雜;
?總結
以上是生活随笔為你收集整理的Docker:Nginx-Redis-Mysql-PHP 部署的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: matlab prn文件,教你妙用PRN
- 下一篇: php生成appid,PHP生成腾讯云C
