Docker多容器部署LNMP环境

网友投稿 867 2022-09-20

Docker多容器部署LNMP环境

Docker多容器部署LNMP环境

使用单一进程容器,即一个容器只运行一种服务,而不是把所有服务放在一个容器的设计,让PHP项目需要的Nginx、PHP、MySQL组件,分别运行在各自镜像创建出来的独立容器中。

文章提到的完整脚本请移步docker-lnmp,内辅详细的注释(欢迎大家关注!)。

整个流程:

客户端build --tag addcn/mysql -f mysql/Dockerfile .docker build --tag addcn/php7 -f php7/Dockerfile .docker build --tag addcn/nginx -f nginx/Dockerfile .启动容器:

整个流程可以看到,Nginx、PHP、MySQL三者的关系:Nginx容器---->PHP容器,PHP容器---->MySQL容器。即容器之间是有关联的,两两容器的数据通信通过容器启动命令docker run加参数--link解决。

docker run --name mysql -p 3306:3306 -v /root/bo/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it addcn/mysqldocker run --name php7 -p 9000:9000 -v /var/--link mysql:mysql -it addcn/php7docker run --name nginx -p 80:80 -v /var/--link php7:php7 -it addcn/nginx测试 PHP & MySQL:

vi /var/date("Y-m-d H:i:s")."
\n";

//mysqltry {$conn = new PDO('mysql:host=mysql;port=3306;dbname=mysql;charset=utf8', 'root', '123456');} catch (PDOException $e) {echo 'Connection failed: ' . $e->getMessage();}//$conn->exec('set names utf8');$sql = "SELECT * FROM user WHERE 1";$result = $conn->query($sql);while($rows = $result->fetch(PDO::FETCH_ASSOC)) {echo $rows['Host'] . ' ' . $rows['User']."
\n";}

Q&A

Nginx如何支持PHP脚本?Nginx容器启动时候,通过--link php7:php7参数共享PHP容器的网络,配置nginx.conf文件(见nginx/Dockerfile),当处理PHP脚本时,转给PHP容器解析:location ~ \.php$ {root html;fastcgi_pass php7:9000; #此处为关键!!其中php7为PHP容器的名称,见启动PHP容器docker run --name指定的值fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #关键!!/usr/local/nginx/html为web目录include fastcgi_params;}PHP如何读取MySQL数据?PHP容器启动时候,通过--link mysql:mysql参数,与MySQL容器共享网络,类似两者处于同一台机器,因此PHP代码连接的时候使用$conn = new PDO('mysql:host=mysql;port=3306;dbname=mysql;charset=utf8', 'root', '123456');就可以连接上MySQL(其中host=mysql的mysql为MySQL容器的名称,见启动MySQL容器docker run --name指定的值)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Shell脚本切换用户
下一篇:Pytorch中自定义神经网络卷积核权重(pytorch实现cnn卷积)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~