Docker最全教程之使用PHP搭建个人博客站点(二十二)
目录
官方镜像
编写简单的Hello world!
1. 编写Hello world!
2. 编写Dockerfile
3. 构建并运行
4. 直接使用PHP Docker镜像运行PHP脚本
构建自己的WordPress镜像用于搭建个人博客站点
1. 准备MySQL数据库
2. 跑起来
修改PHP的文件上传大小限制
1. 修改Dockerfile,构建自己的镜像
2. 通过“-v”参数将容器内指定路径映射到主机目录的自定义的配置文件
3. 通过“exec”命令进入容器内部修改相关配置
PHP(全名:PHP: Hypertext Preprocessor)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
官方镜像
官方镜像地址:https://hub.docker.com/_/php
编写简单的Hello world!
1. 编写Hello world!
代码及其简单,如下所示:
<?php echo "Hello world"; ?>
2. 编写Dockerfile
Dockerfile文件如下所示:
#镜像版本见:https://hub.docker.com/_/php FROM php:7.3-cli-alpine3. COPY . /usr/src/myapp WORKDIR /usr/src/myapp #运行php脚本 CMD [ "php", "./test.php" ]
这里之所以选择了alpine的镜像,主要是体积更小:
3. 构建并运行
构建命令如下所示:
docker build --rm -f "dockerfile" -t phptest1:latest .
运行:
4. 直接使用PHP Docker镜像运行PHP脚本
在日常开发中,如果我们只是编写简单的PHP脚本用于简单的实践,那么我们完全可以
直接使用PHP Docker镜像来运行PHP脚本,避免反复的构建过程,从而加速开发:
docker run -it --rm ` --name php-running-script ` -v D:\temp\php:/usr/src/myapp ` -w /usr/src/myapp ` php php test.php
运行命令参数说明大家可以回顾前面的内容,以上命令主体操作如下:
- 运行php最新镜像,运行完成后自动删除容器。其中“-it”等同于“-ti”等同于“-i -t”,也就是让容器的标准输入保持打开,然后分配一个伪终端并绑定到容器的标准输入上;
- 容器名称为“php-running-script”;
- 将主机目录“D:\temp\php”加载为数据卷,映射到容器内目录“/usr/src/myapp”。关于数据卷的相关讲解,我们在后续的章节会结合相关实践进一步讲解;
- 指定工作目录“/usr/src/myapp”;
- 执行PHP脚本“test.php”。
构建自己的WordPress镜像用于搭建个人博客站点
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。
WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客。
WordPress官方镜像地址为:https://hub.docker.com/_/wordpress
接下来,我们就基于官方镜像开始搭建。
1.准备MySQL数据库
我们先需要准备一个MySQl数据库,大家可以使用现成的MySQL数据库,也可以参考数据库容器化的相关章节来进行搭建。
参考命令如下所示:
docker run --name mysql -e MYSQL_ROOT_PASSWORD= -p : -d mysql
注意:MySQL容器创建完成后,需要对root账号进行设置才能够通过数据库连接访问MySQL,具体见数据库容器化相关章节。
2.跑起来
接下来,我们就可以运行WordPress镜像了,参考命令如下所示:
docker run ` --name myblog ` --link mysql:wordpressdb ` -e WORDPRESS_DB_HOST=wordpressdb: ` -e WORDPRESS_DB_PASSWORD= ` -e WORDPRESS_DB_NAME=wordpress ` -p : ` wordpress
如上述命令,我们基于WordPressWordPress镜像创建了一个名为myblog的容器,外部端口为3000,容器端口为80。然后使用“--link”参数将该容器和mysql容器(上一步创建的MySQL容器)建立了链接,是其能否访问mysql容器,并且建立了别名wordpressdb。接下来,通过环境变量设置了WordPress的MySQL的一些参数,比如数据库服务器、密码、库名称。运行结果如下图所示:
接下来,我们访问我们的博客网址“http://localhost:3000/”试试:
经过一些简单设置,我们又为WordPress添加了一个即将关站的博客站:
修改PHP的文件上传大小限制
基于Docker运行PHP应用,经常会遇到文件上传大小限制的问题。比如刚刚部署的WordPress个人博客站点,如果我们上传一些个人主题,很容易就突破了PHP的文件上传大小限制(默认2M,对应设置key为“upload_max_filesize”),这时我们有以下方式进行处理:
1.修改Dockerfile,构建自己的镜像
使用自己的php配置文件(php.ini)替换默认的php配置文件。如基于wordpress镜像构建自己的镜像,添加类似于“COPY ./config/php.ini /usr/local/etc/php/conf.d/”的复制命令。
2.通过“-v”参数将容器内指定路径映射到主机目录的自定义的配置文件
例如“-v d:/tmp/php/php.ini:/usr/local/etc/php/conf.d/uploads.ini”。
3.通过“exec”命令进入容器内部修改相关配置
Docker最全教程之使用PHP搭建个人博客站点(二十二)的更多相关文章
- Docker最全教程之使用Node.js搭建团队技术文档站(二十三)
前言 各种编程语言均有其优势和生态,有兴趣的朋友完全可以涉猎多门语言.在平常的工作之中,也可以尝试选择相对适合的编程语言来完成相关的工作. 在团队技术文档站搭建这块,笔者尝试了许多框架,最终还是选择了 ...
- Docker最全教程——从理论到实战(七)
在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...
- Docker最全教程——从理论到实战(六)
托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅. 自建还是托管? 在开始之前,我们先来讨论一个问题——是自建 ...
- Docker最全教程
摘自雪雁大佬的博客,地址:https://www.cnblogs.com/codelove/default.html 目录: Docker最全教程——从理论到实战(一) Docker最全教程——从理论 ...
- Docker最全教程之使用Tencent Hub来完成CI(九)
使用Tencent Hub来完成CI 关于Tencent Hub Tencent Hub是腾讯出品的DevOps服务.主要提供多存储格式的版本管理,支持Docker Image.Binary.Helm ...
- Docker最全教程——从理论到实战(八)
在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...
- Docker最全教程——从理论到实战(五)
往期内容链接 Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持 ...
- Docker最全教程——从理论到实战
Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) Docker最全教程—— ...
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...
随机推荐
- C#中打开文件、目录、保存窗口
打开文件代码: try { OpenFileDialog of = new OpenFileDialog(); of.ShowDialog(); txt_destFilePath.Text = of. ...
- JVM类加载(3)—初始化
3.初始化 在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量(静态变量)和其他资源,或者从另外一个角度表达:初始化过程是执行类构造器< ...
- docker Get started part 4: Accessing your cluster cannot curl
1. 问题描述 docker Get started part 4 can't visit myvm1 or myvm2. curl: (7) Failed to connect to 192.168 ...
- kvm ip查看
1.virsh --list(查看有哪些服务器) 2.virsh dumpxml 虚拟机名称 查看服务器对应的mac地址 3.然后再宿主机上arp -a 查看对应的mac地址对应的ip
- 针对nginx的内核优化
关于内核参数的优化: net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000.net.ipv4.ip_local_port_range = 10 ...
- 报错:Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): cn.itcast.bos.domain.base.SubArea
因为 实体类中的主键 是String类型 不能自动为其分配id 所以需要手动设置在service层 model.setId(UUID.randomUUID().toString());
- Python + winpcap抓包和发包
winpcapy Python的winpcapy库可以简单地实现收发Layer2层(数据链路层,以太网)数据. winpcapy主页:https://github.com/orweis/winpcap ...
- 20169201 实验三 敏捷开发与XP实践报告
敏捷开发与XP介绍 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法."敏捷流程"是一系列价值观和方法论的集合.从2001年开始,一些软件界 ...
- C++多线程框架
Thread线程框架 线程定义:线程可以理解为一个特立独行的函数.其存在的意义,就是并行,避免了主线程的阻塞. ----------------------------thread与函数------- ...
- FUI- 我离钢铁侠还差几步?
本文来自网易云社区 作者:马宝 什么是FUI本文不累赘的可以自行Google,喜欢科幻的同学们都看一张图就能感受到FUI的魅力. 本文算是一篇所见即所的,可边学边干的原创教程.总结全文就一句话,&qu ...