如何开发一个 PHP + MySQL 的 Docker 化应用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
daocloud
V2EX    程序员

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

  •  
  •   daocloud
    DaoCloud 2015-07-29 13:34:43 +08:00 2935 次点击
    这是一个创建于 3807 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目标:基于典型的 LAMP 技术栈,用 Docker 镜像的方式搭建一个 Linux + Apache + MySQL + PHP 的应用 。
    本项目代码维护在 DaoCloud/php-apache-mysql-sample 项目中。

    创建 PHP 应用容器

    因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,DaoCloud 提供了一套境内镜像源,并与官方源保持同步。

    首先,选择官方的 PHP 镜像作为项目的基础镜像。

    FROM daocloud.io/php:5.6-apache 

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

    RUN docker-php-ext-install pdo_mysql 
    • 依赖包通过 docker-php-ext-install 安装,如果依赖包需要配置参数则通过 docker-php-ext-configure 命令。
    • 安装 pdo_mysql PHP 扩展。

    然后,将代码复制到目标目录。

    COPY . /var/www/html/ 

    因为基础镜像内已经声明了暴露端口和启动命令,此处可以省略。

    至此,包含 PHP 应用的 Docker 容器已经准备好了。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 容器。

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d daocloud.io/mysql:5.5 

    之后,通过 Docker 容器间的 link 机制,便可将 MySQL 的默认端口(3306)暴露给应用容器。

    docker run --name some-app --link some-mysql:mysql -d app-that-uses-mysql 

    绑定 MySQL 数据服务(云端)

    比起本地创建,在云端创建和绑定 MySQL 数据服务会更简单。

    1. 在 GitHub 上 Fork DaoCloud/php-apache-mysql-sample 或者添加自己的代码仓库。
    2. 注册成为 DaoCloud 用户。
    3. 在 DaoCloud 「控制台」中选择「代码构建」。
    4. 创建新项目,选择代码源,开始构建镜像。
    5. 在「服务集成」创建 MySQL 服务实例。
    6. 将构建的应用镜像关联 MySQL 服务实例并部署在云端。

    DaoCloud 使用图文介绍

    • 了解如何用 DaoCloud 进行代码构建:参考代码构建
    • 了解如何用 DaoCloud 进行持续集成:参考持续集成
    • 了解如何用为应用准备一个数据库服务:参考服务集成
    • 了解如何部署一个刚刚构建好的应用镜像:参考应用部署

    DaoCloud 使用视频介绍

    php-apache-mysql-sample 应用截图

    php-apache-mysql-sample

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3027 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 12:41 PVG 20:41 LAX 04:41 JFK 07:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86