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.mzph.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;但还是说到了一…