问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何开发一个 PHP + MySQL 的 Docker 化应用

发布网友 发布时间:2022-04-26 19:56

我来回答

1个回答

热心网友 时间:2022-04-07 10:58

首先要理解Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
"Docker 化"的主要作用是方便移植问题,类似java和java虚拟机的开发思想,“一次编写,到处运行”;
php和mysql一般是独立的两个服务,一般运行于apache、iis 或者Nginx之中,跟你开发php没有关系。
创建 PHP 应用容器
> 因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,DaoCloud 提供了一套境内镜像源,并与官方源保持同步。
首先,选择官方的 PHP 镜像作为项目的基础镜像。
dockerfile
FROM cloud.io/php:5.6-apache

接着,用官方 PHP 镜像内置命令 docker-php-ext-install 安装 PHP 的 MySQL 扩展依赖。
dockerfile
RUN docker-php-ext-install pdo_mysql

依赖包通过 docker-php-ext-install 安装,如果依赖包需要配置参数则通过docker-php-ext-configure 命令。
安装 pdo_mysql PHP 扩展。
然后,将代码复制到目标目录。
dockerfile
COPY . /var/www/html/

因为基础镜像内已经声明了暴露端口和启动命令,此处可以省略。
至此,包含 PHP 应用的 Docker 容器已经准备好了。PHP 代码中访问数据库所需的参数,是通过读取环境变量的方式声明的。
```php
$serverName = env("MYSQL_PORT_3306_TCP_ADDR", "localhost");
$databaseName = env("MYSQL_INSTANCE_NAME", "homestead");
$username = env("MYSQL_USERNAME", "homestead");
$password = env("MYSQL_PASSWORD", "secret");
/**
* 获取环境变量
* @param $key
* @param null $default
* @return null|string
*/
function env($key, $default = null)
{
$value = getenv($key);
if ($value === false) {
return $default;
}
return $value;
}
```
这样做是因为在 Docker 化应用开发的最佳实践中,通常将有状态的数据类服务放在另一个容器内运行,并通过容器特有的 link 机制将应用容器与数据容器动态的连接在一起。
绑定 MySQL 数据容器(本地)
首先,需要创建一个 MySQL 容器。
bash
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d cloud.io/mysql:5.5

之后,通过 Docker 容器间的 link 机制,便可将 MySQL 的默认端口(3306)暴露给应用容器。
bash
docker run --name some-app --link some-mysql:mysql -d app-that-uses-mysql

绑定 MySQL 数据服务(云端)
比起本地创建,在云端创建和绑定 MySQL 数据服务会更简单。
在 GitHub 上 Fork DaoCloud/php-apache-mysql-sample 或者添加自己的代码仓库。
注册成为 DaoCloud 用户。
在 DaoCloud 「控制台」中选择「代码构建」。
创建新项目,选择代码源,开始构建镜像。
在「服务集成」创建 MySQL 服务实例。
将构建的应用镜像关联 MySQL 服务实例并部署在云端。
DaoCloud 使用图文介绍
了解如何用 DaoCloud 进行代码构建:参考 代码构建 。
了解如何用 DaoCloud 进行持续集成:参考 持续集成 。
了解如何用为应用准备一个数据库服务:参考 服务集成 。
了解如何部署一个刚刚构建好的应用镜像:参考 应用部署 。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
arrive in和arrive at 有什么区别? 磁力泵为什么可空转? 为什么不让衬氟塑料磁力泵空转?怎样提升设备稳定性? 工业软管泵 塑料磁力泵为什么不能空转 求推荐男主和女配在一起的小说? 《红衣天下》txt全集下载 检测公司检测哪些 检测公司是怎么样的 检测公司属于什么企业 养胃的菜家常菜有哪些? 经常吃哪些蔬菜可以起到养胃的效果?为什么呢? windows装的docker;mysql保存操作问题 经常吃哪些蔬菜,就可以起到养胃的效果? 形容窘迫的句子有哪些? 经常吃哪些蔬菜可以起到养胃的效果?有推荐的吗? 你知道哪些养胃的菜?有什么推荐的? mysql可以部署到docker吗 docker容器跑起mysql后,在宿主机无法进去mysql? docker上安装mysql,mysql日志存在什么位置 如何用docker搭建mysql 虎年女宝宝名字大全2022有寓意 快递员把快递寄错了怎么办 我快递地址写的没错,快递给我寄错了地址怎么办 EMS快递把我的东西发错了 怎么办 快递邮错了会咋样? 快递公司把我的东西和别人的邮错了怎么办? 申通快递邮错了怎么办? 梦见自己送快递? 快递给我送错了我应该怎么处理? 描写自己内心窘迫羞赧的句子 养胃必知,五种天然养胃菜,到底有哪些呢? 养胃的菜有哪些 描写人很窘迫的好句 描写心情尴尬的句子 入冬后有哪些暖和又养胃的菜? 如何描写人物内心的尴尬。50字左右 跪求 人物神态片段描写 窘迫的 养胃的菜家常菜炒菜 描写人物尴尬的好词好句好段落 什么菜对胃好 养胃 描写人窘迫样子的句子 形容窘迫的句子 哪些菜是可以养胃 描写人物尴尬 片段(急~!) 形容人狼狈不堪的段落。速度 描写尴尬、哭泣、发呆的片段 描写气氛尴尬的成语 越多越好,谢谢 用尴尬写一段话,描写某个人的神态,要运用比喻的修辞手法(80字以内) 描写尴尬的表情。。