docker php项目,Docker化PHP项目指南

文章亮点

将PHP应用及其依赖的服务容器化步骤

如何将应用容器镜像的构建自动化

应用容器如何快速部署到测试环境和生产环境中

快速上手

PHP官方在 hub.docker.com 上维护了官方的PHP Docker镜像,包含了从PHP 5.5到7.0的多种不同版本的镜像。

6299e0dec1f1a2b9a1a55ba434ab79ee.png

我们将以PHP官方的Docker镜像为基础,介绍如何将一个简单的PHP应用Docker化。

创建一个新目录 php-quickstart,作为我们的项目目录

在项目目录下创建文件 app.php

echo “Hello Docker!”

?>

在项目目录下创建文件 Dockerfile

FROM php:5.6-cli

COPY . /project

WORKDIR /project

CMD ["php", "./app.php"]

上述 Dockerfile 中,通过 FROM 指令,我们将官方的 php-5.6-cli 作为我们的基础镜像。

通过 COPY 指令,我们把当前目录下的文件,复制到镜像的 /project 目录

CMD 指令设置了镜像默认执行的命令,WORKDIR 则是设置了镜像执行命令时的目录

构建镜像

docker build -t php-app .

这将会生成一个名为 php-app 的镜像

运行容器

docker run php-app

这时候,容器将会执行我们之前创建的 app.php, 并输出:

Hello Docker!

PHP + MySQL 的Docker化示例

接下来,我们通过一个 PHP + MySQL 的例子,介绍 PHP 应用 Docker 化之后,如何连接数据库。

创建一个新的目录 php-mysql 作为我们的项目目录

$mysql = new mysqli('db', 'root', $_ENV['MYSQL_ROOT_PASSWORD']);

echo 'Connected to mysql: '.$mysql->host_info;

?>

在 index.php 中,我们的 PHP 应用将会通过主机名称 db 连接到 mysql 数据库,同时使用用户名 root, 以及环境变量中的 MYSQL_ROOT_PASSWORD对数据库进行连接。这里简单地通过echo 连接信息来确认 MySQL 连接是否正常。

FROM php:5.6-apache

RUN docker-php-ext-install mysqli

COPY . /var/www/html

这里我们使用的是官方的 php:5.6-apache 镜像,因为我们这一次希望可以直接从浏览器访问这个 PHP 应用。

另外我们通过 RUN 指令运行 docker-php-ext-install mysqli 额外安装了PHP的mysqli扩展

构建镜像

docker build -t php-mysql-app .

创建 MySQL 容器

docker run --name db -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.6

我们在这里使用官方的 mysql:5.6 镜像创建了一个 MySQL 的容器

--name 参数将容器命名为 db

-e MYSQL_ROOT_PASSWORD=secret 通过环境变量,我们将 MySQL 的 root 用户密码设置为 secret

-d 参数将这个容器设置为后台运行

启动 PHP 容器,并将其连接到 MySQL 容器

docker run --link db -e MYSQL_ROOT_PASSWORD=secret -p 8080:80 php-mysql-app

我们运行了之前构建的 php-mysql-app 镜像,并将上一步创建的 mysql-instance 这个MySQL容器和它连接,同时我们把MySQL的root密码通过环境变量MYSQL_ROOT_PASSWORD 传到容器内部-p 8080:80 将容器的 80 端口映射到了主机的 8080 端口

Connected to mysql: db via TCP/IP

我们将从浏览器得到 index.php 的执行结果。

基于cSphere 私有Docker Registry的镜像自动构建

在一个Docker化的项目中,项目的Docker镜像成为了项目交付的最终元件。因此在项目的持续集成和持续交付环节中,镜像的自动构建是必不可少的一个环节。

这里介绍如何利用cSphere的私有镜像仓库配置镜像自动构建,实现在代码Push到仓库之后,自动构建Docker镜像。

创建私有Docker Registry在通过cSphere的镜像仓库页面,点击新建镜像仓库按钮,根据提示即可成功创建一个私有的镜像仓库.

d0e962e0bcc9273cd1f633c07c80d403.png

配置项目进入上一步创建的镜像仓库页面,点击添加自动构建按钮,填写项目的 Git 仓库地址和Dockerfile路径:

56c488d590227e947e17accb2b6b1c17.png

然后根据提示,设置镜像构建后,在镜像仓库的存放位置,和需要进行自动构建的分支:

0bcd1911e2b9a868b2b1aa5452e5ddb2.png

设置项目的Web Hook和 Deploy key

08ac1290df57f0567653db840e8a2c15.png

根据提示,为项目设置好Webhook和Deploy Key. 这样当项目有新的代码push到上一步中设置的分支之后,私有Docker Registry就会进行镜像的自动构建, 在构建成功之后,自动将镜像Push到镜像仓库的指定位置

386b15535c2d38299fc13d67697ab84c.png

使用cSphere部署和管理PHP应用

在实现了自动构建项目的镜像之后,接下来我们来看如何通过cSphere快速将会项目部署到各种环境中。

创建应用模板进入cSphere的应用模板页面,点击创建新模板按钮,根据提示新建一个应用模板

50f76f90c97207f6df44685bf628bab5.png

添加MySQL服务在之前的PHP + MySQL 项目Docker化示例中,我们通过以下的命令启动了MySQL容器:

docker run --name db -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.6

这时我们把上述命令配置成应用模板中的一个服务:db

fc80ba2f177911f20d8304e8f3621e57.png

同时设置好环境变量

b8b588dbccdfc738866b420f74e7cabb.png

添加PHP服务在 PHP + MySQL 项目Docker化示例中,我们通过以下的命令启动了PHP容器:

docker run --link db -e MYSQL_ROOT_PASSWORD=secret -p 8080:80 php-mysql-app

同时,我们在自动构建镜像中,设置了自动构建镜像为 192.168.1.130/tsing/php-mysql-app:latest

这里我们把上述信息配置成应用模板的另一服务:php

859d9b775fa295c49a9bb9d0c95e9aa4.png

设置PHP代码中使用的环境变量值

8110b247d57c76ab03d847ca5c4a8a67.png

--link db 这个参数无需在应用模板中设置,因为cSphere应用管理会自动根据服务的名称,自动处理不同容器的连接关系。

-p 端口映射也不需要设置,因为cSphere应用管理创建的容器都有独立的IP,不再需要把容器的端口映射到主机上

保存模板

6eed8023431f418e7dc23999c0d134f4.png

部署应用点击上一步刚刚创建成功的模板版本,最右边的部署按钮,便可以开始进行部署。

c312b9dff7d48db3fb7042e49516abd8.png

在这个界面中,你可以选择将应用部署到哪一个主机分组中, 可以根据需要,把应用部署到开发、测试、生产不同环境的主机上。当然,也可以在一个环境部署多个实例, 这些实例之间是互相隔离的。

a7badf9669b68c942353516b3aa4df12.png

应用模板管理在应用模板页面,你可以对应用模板进行修改,每次模板的修改都会产生一个新的版本,方便进行升级和回滚。

38cac5e835f2ef0ba314a47408dcfcda.png

应用管理在应用实例的页面,你可以对应用实例进行管理, 对应用的服务进行扩容,重启

4c46b3957ad666a7c32e55b3734f7f9f.png

点击升级 · 回滚按钮,可以快速将应用更新至指定版本的模板

0c9253547d2026a30dc144d9481b2c57.png

应用部署自动化

当镜像重新构建之后,可以在 cSphere 面板上点击服务的重新部署按钮来升级服务, 也可以直接使用 cSphere 的 API 来实现自动化升级。

在调用cSphere的API前,请先在cSphere的设置页面生成一个API Key:

调用以下 API,即可实现自动升级应用

curl -H 'cSphere-Api-Key: 6bbdc50dd0561b47ca8186f8ac29acde70bc65b3' \

-X PUT http://192.168.1.130/api/instances/php-mysql-example/redeploy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值