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有些復雜;

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275976.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

epoll監聽文件_介紹一下 Android Handler 中的 epoll 機制?

介紹一下 Android Handler 中的 epoll 機制?目錄:IO 多路復用select、poll、epoll 對比epoll APIepoll 使用示例Handler 中的 epoll 源碼分析IO 多路復用IO 多路復用是一種同步 IO 模型,實現一個線程可以監視多個文件句柄。一旦某個文件句柄就…

前端工程師的一大神器——puppeteer

大家好,我是若川。歡迎加我微信 ruochuan12,長期交流學習。今天推薦神器puppeteer,我猜有挺多人不知道。文章不長,看完有空也可以試玩。我18年也寫過一篇puppeteer爬取生成pdf的文章,時間真快。前端使用puppeteer 爬蟲…

selenium界面元素定位

一、 Selenium界面元素定位 本文元素定位以das2為例 #導入包 from selenium import webdriver #打開火狐驅動 driverwebdriver.Firefox() #訪問網址 driver.get("http://192.168.3.217:8080/das/seatlogin.jsp ") 進行web頁面自動化測試,對頁面上…

vue.js ui_UI / UX開發:考慮Vue.js

vue.js uiBecause sometimes we have to add logic to our concepts, and Vue makes it a whole lot easier.因為有時我們必須在概念中添加邏輯,而Vue使其變得更加容易。 FULL DISCLOSURE: THIS IS NOT A COMPLETE JAVASCRIPT OR VUE COURSE. There’s no way I co…

Silverlight學習筆記十七BingMap(三)之地圖的地區標識

如果我們需要在Bing Maps中加入一個小圖釘標記&#xff0c;該如何實現了&#xff1f; Bing Maps控件已經為我們提供了這個功能&#xff0c;在Microsoft.Maps.MapControl名稱空間下提供了實現圖釘應用的圖釘層Pushpin類用該類來實現普通標識 在Xaml中添加<map:Pushpin Locati…

win10查看pcie設備_壹拓網科技解密WIN10系統使用向日葵開機棒遠程開機需要設置幾個地方...

向日葵開機棒&#xff0c;是一款非常好用的遠程智能遠程開機硬件&#xff0c;它一頭接網線&#xff0c;另外一頭和被開電腦接在同一個路由器下&#xff0c;不需要和被開電腦或者設備直接連接&#xff0c;當然&#xff0c;被開電腦需要有線聯網&#xff0c;暫時不支持使用無線方…

如何成為公司獨當一面的工程師

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天推薦黃老師的這篇文章&#xff0c;你可能看到過了&#xff0c;但值得再看一遍。之前常有小伙伴問&#xff0c;大多情況下我都會分享這篇文章。點擊下方卡片關注我、加個星標&#xff0c;或者…

webpack4.0配置記錄(2)

接上一篇webpack4.0配置記錄(1),繼續記錄學習webpack配置。 定義環境變量 new Webpack.DefinePlugin({//用來定義全局環境變量DEV:JSON.stringify(dev),FLAG:true }), webpack簡單優化 noParsemodule:{noParse:/jquery/,//不去解析設置的包所依賴的關系,如jquery } ignorePlugi…

flex如何做響應式設計_響應式設計-您做錯了!

flex如何做響應式設計Responsive design is not just about the web that automatically adjusts to different screen resolutions and resizeable images, but designs that are crucial for web performance.自適應設計不僅涉及可自動適應不同屏幕分辨率和可調整大小圖像的網…

怎么查看和獲取SQL Server實例名

查看實例名時可用 1、服務—SQL Server(實例名)&#xff0c;默認實例為(MSSQLSERVER) 或在連接企業管理時-查看本地實例 2、通過注冊表 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/InstalledInstance 3、用命令 sqlcmd/osql sqlcmd -L sqlcmd -Lc osql -L 獲…

30萬手表推薦_今年六十歲生日,兒子說要送只30萬的手表,請問有哪些推薦?...

關注腕表部落&#xff0c;盡享腕表生活一位讀者向筆者提出這樣一個問題&#xff1a;今年六十歲生日&#xff0c;兒子說要送只30萬的手表&#xff0c;請問有哪些推薦&#xff1f;首先要恭喜這位老爺子&#xff0c;一來是生日馬上就要到了&#xff0c;二來是還有這么孝順而且慷慨…

關注博客

https://blog.51cto.com/oldboyhttps://blog.51cto.com/yw666轉載于:https://blog.51cto.com/11732716/2348556

寫 Node.js 代碼,從學會調試開始

大家好&#xff0c;我是若川&#xff08;點這里加我微信 ruochuan12&#xff0c;長期交流學習&#xff09;。今天推薦這篇調試文章&#xff0c;熟悉我的讀者都知道我寫的源碼文章都多次強調要調試&#xff0c;而且寫了調試方法。點擊下方卡片關注我、加個星標&#xff0c;或者查…

創建用戶友好的表單

Forms are a common way to engage with users and could be a user’s first impression of your product. Since forms aren’t always the user’s favourite thing, it is essential to make filling out forms as easy as possible. Let’s go over a few tips for creati…

細節決定成敗—關于.net的.dll.refresh文件

一直在做.net的項目&#xff0c;c/s的、b/s的&#xff0c;一直沒有注意這個東西。眾所周知&#xff0c;.net的程序生成后會在bin目錄下生成.dll文件&#xff0c;而.dll.refresh這個文件從何而來呢&#xff1f;那天無聊地google了下才知&#xff0c;這個東東是在你的項目中引用第…

環境在c盤_如何給女朋友解釋為什么 Windows 上面的軟件都把自己安裝在 C 盤

本文經授權轉載自漫畫編程(ID&#xff1a;mhcoding)周末&#xff0c;我在家里面看電視&#xff0c;女朋友正在旁邊鼓搗她的電腦&#xff0c;但是好像并不是很順利&#xff0c;于是就有了以下對話。計算機存儲我們使用的計算機中&#xff0c;保存信息的介質有兩類&#xff1a;一…

能讓你縱享絲滑的SSR技術,轉轉這樣實踐

大家好&#xff0c;我是若川&#xff08;點這里加我微信 ruochuan12&#xff0c;長期交流學習&#xff09;。今天推薦這篇圖文并茂的SSR技術文章。這是江西前端群里一個小伙伴的文章。群里小伙伴很多都在知名大廠&#xff0c;但他們都很低調。點擊下方卡片關注我、加個星標&…

魅族魅藍mirror簡單打開usb調試模式的步驟

經常我們使用安卓手機鏈接電腦的時候&#xff0c;或者使用的有些應用比如我們企業營銷團隊經常使用的應用引號精靈&#xff0c;以前使用的老版本就需要開啟USB調試模式下使用&#xff0c;現經常新版本不需要了&#xff0c;如果手機沒有開啟USB調試模式&#xff0c;電腦則無辦法…

hp-ux 單用戶 啟動_UX備忘單:搜索與瀏覽

hp-ux 單用戶 啟動重點 (Top highlight)When designing search results and interest sites, you have to keep in mind what ‘mode’ your user is in. Are they in ‘searching mode’ or ‘browsing mode’? This will help you determine how to design your platform to…

細數開源歷史上的九個重大事件

開放源碼&#xff08;開源&#xff09;的精神在于使用者可以使用、復制、散布、研究和改進軟件。這可以追溯到20世紀60年代&#xff0c;至今已有半個世紀了。伯樂在線-職場博客的這篇文章將列舉開源歷史上的九大重要事件。雖然本文不是專門對開源產品&#xff0c;但還是說到了一…