使用docker-compose部署php-apche、Mysql、phpmyadmin

目录结构

├── conf                         配置目录
│   ├── mysql                    MySQL配置文件目录
│   │   └── my.cnf               MySQL配置文件
│   ├── nginx                    Nginx配置文件目录
│   │   ├── conf.d               站点配置文件目录
│   │   │   └── default.conf     默认站点配置文件
│   │   └── nginx.conf           Nginx通用配置文件
│   └── php                      PHP配置目录
│       │── php.ini              PHP配置文件
│       └── php-fpm.conf         PHP-FPM配置文件
├── log                          日志目录
│   ├── mysql                    MySQL日志目录
│   ├── nginx                    Nginx日志目录
│   └── php                      PHP日志目录
├── mysql                        MySQL数据文件目录
├── php                          PHP目录
│   └── php56                    PHP5.6目录
│       └── Dockerfile           Dockerfile配置文件
├── www                          站点根目录
│   └── index.php                index文件
└── docker-compose.yml           docker-compose配置文件

使用

1.安装 docker 和 docker-compose

2.git clone 代码到本地

$ git clone git@github.com:Gekkoou/dnmp.git

3.执行命令

$ cd dnmp
$ docker-compose up -d

4.默认站点在浏览器中访问 

phpmyadmin 访问 localhost:8080 , 帐号 root 密码 123456

# docker-compose up -d
# docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                      NAMES
dad39a530a83        phpmyadmin/phpmyadmin:latest   "/run.sh superviso..."   5 hours ago         Up 3 hours          9000/tcp, 0.0.0.0:8080->80/tcp             my-phpmyadmin
42cf670a099f        mysql:5.7                      "docker-entrypoint..."   5 hours ago         Up 3 hours          0.0.0.0:3306->3306/tcp                     my-mysql
9c832c8f271e        dnmp_php                       "php-fpm -F"             5 hours ago         Up 3 hours          9000/tcp                                   dnmp_php_1
ad61b06a4ec1        nginx:alpine                   "nginx -g 'daemon ..."   5 hours ago         Up 3 hours          0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   my-nginx

重启 nginx

docker exec -it my-nginx nginx -s reload 或 docker-compose restart nginx

重启 php-fpm

docker exec -it dnmp_php_1 kill -USR2 php-fpm的pid或docker-compose restart php

启动所有已经存在的服务容器

docker-compose start

停止所有已经处于运行状态的容器

docker-compose stop

重启所有已经存在的容器

docker-compose restart

删除所有 (停止状态的) 服务容器

docker-compose rm

5.docker-compose.yml 文件内容

version: '3.7'
 
services:
 
  #构建mysql服务
 
  mysql:
 
    image: mysql:lxc #容器运行使用的镜像
 
    build:
 
      context: .
 
      dockerfile: MySQL_dockerfile
 
    container_name: php_mysql #定义容器名称
 
    ports:
 
      - "3306:3306"  #映射端口,格式为 "主机端口:容器端口"
 
  #构建php变体php-apache服务
 
  web:
 
    image: php:lxc
 
    build:
 
      context: .
 
      dockerfile: php-apache_dockerfile
 
    container_name: php-apache
 
    depends_on:   #设置依赖的服务
 
      - mysql
 
    volumes:
 
      - ./www/:/var/www/html/ #将主机中的目录挂载到容器中的工作目录,易于对web服务的管理
 
    ports:
 
      - "8080:80"
 
  #构建phpmyadmin服务
 
  phpmyadmin:
 
    image: phpmyadmin:lxc
 
    build:
 
      context: .
 
      dockerfile: phpmyadmin_dockerfile
 
    environment:
 
      PMA_HOST: php_mysql #设置所连接的MySQL服务器名称
 
    container_name: phpmyadmin
 
    depends_on:
 
      - mysql
 
      - web
 
    ports:
 
      - "8081:80"

创建一个index.php文件,输入以下内容

<!-- ./php/index.php -->
 
<html>
 
    <head>
 
        <title>phpinfo</title>
 
    </head>
 
 
 
    <body>
 
        <?php
 
            echo phpinfo(); #显示php信息
 
        ?>
 
    </body>
 
</html>

创建一个mysql.php文件,输入以下内容

<html>
 
<body>
 
<head>
 
<title>Mysql Test</title>
 
</head>
 
<?php
 
$servername = "php_mysql";#这里的数据库服务器名称为MySQL容器的名称
 
$username = "root";
 
$password = $_ENV["MYSQL_ROOT_PASSWORD"];
 
$dbname = "mydb";
 
 
 
function ShowData($result){ //显示数据的函数
 
   global $servername, $username, $password, $dbname;
 
   $conn = new mysqli($servername, $username, $password, $dbname);
 
   $sql = "select * from MyTable;";
 
   $result = $conn->query($sql);
 
   $table = "<table border='1' cellspacing='0'  width='200' height='50'>";
 
   $table .="<tr align='center'><td>ID</td><td>Name</td><td>Sex</td></tr>";
 
    // 输出数据
 
    for($i=1;$i<=$result->num_rows;$i++){ //行
 
$table.="<tr align='center'>";
 
$row = $result->fetch_assoc();  //列
 
$table .= "<td>" . $row['ID'] ."</td>" . "<td>" . $row['NAME'] ."</td>" . "<td>" . $row['SEX'] ."</td>";
 
 
 
    $table.="</tr>";
 
    }
 
$table.="</table>";
 
echo $table;
 
}
 
 
 
// 创建连接
 
$conn = new mysqli($servername, $username, $password);
 
// 检测连接
 
if ($conn->connect_error) {
 
    die("连接失败: " . $conn->connect_error . "<br>");
 
}
 
else{
 
    echo "连接成功!<br>";
 
}
 
// 创建数据库mydb
 
$sql = "DROP DATABASE "  . " IF EXISTS " . $dbname . ";create DATABASE " .$dbname;
 
 
 
// 检测数据库是否创建成功
 
if ($conn->multi_query($sql)){
 
    echo "create database " . $dbname . " successfully!<br>";
 
}
 
else{
 
    echo "failed:" . $conn->error . "<br>";
 
}
 
 
 
sleep(1);
 
// 创建连接,连接到数据库
 
$conn = new mysqli($servername, $username, $password,$dbname);
 
 
 
// 建表
 
$sql = "CREATE TABLE MyTable(
    ID BIGINT(10) NOT NULL PRIMARY KEY,
    NAME NVARCHAR(10) NOT NULL,
    SEX NVARCHAR(6),
    CHECK (SEX='male' or SEX='female' or SEX='男' or SEX='女')
)";
 
// 检测建表是否成功
 
if ($conn->query($sql) === TRUE){
 
    echo "create table MyTable successfully!<br>";
 
}
 
else{
 
    echo "failed:" . $conn->error . "<br>";
 
}
 
 
 
// 向表中插入数据
 
$sql = "INSERT INTO MyTable
   VALUES (1,'张三','male');";
 
$sql .= "INSERT INTO MyTable
   VALUES (2,'李四','男');";
 
$sql .= "INSERT INTO MyTable
   VALUES (3,'小兰','female');";
 
 
 
// 检测数据是否成功插入
 
if ($conn->multi_query($sql)){
 
    echo "insert data into MyTable successfully!<br>";
 
}
 
else{
 
    echo "failed:" . $conn->error . "<br>";
 
}
 
 
 
sleep(1);
 
echo "<br>查表:<br>";
 
ShowData($result);
 
 
 
 
 
// 修改数据
 
sleep(1);
 
echo "<br>修改数据:将李四的'Sex'改为'male'<br>";
 
$conn = new mysqli($servername, $username, $password, $dbname);
 
$sql = "UPDATE MyTable SET SEX='male' WHERE NAME='李四';";
 
$result = $conn->query($sql);
 
echo $result->num_rows;
 
ShowData($result);
 
 
 
// 增加数据
 
sleep(1);
 
echo "<br>增加数据:<br>";
 
$conn = new mysqli($servername, $username, $password, $dbname);
 
$sql = "INSERT INTO MyTable
   VALUES (4,'小红','female');";
 
$result = $conn->query($sql);
 
echo $result->num_rows;
 
ShowData($result);
 
 
 
// 删除数据
 
sleep(1);
 
echo "<br>删除数据:删除名为张三的信息<br>";
 
$conn = new mysqli($servername, $username, $password, $dbname);
 
$sql = "DELETE FROM MyTable WHERE NAME='张三'";
 
$result = $conn->query($sql);
 
echo $result->num_rows;
 
ShowData($result);
 
$conn->close();
 
?>
 
</body>
 
</html>

6.再输入docker-compose up --build,使容器运行起来

7.出现GPL,然后在浏览器运行0.0.0.0:8081,页面显示为index.php信息

8.在浏览器输入0.0.0.0:8081访问mysql,实现数据库的连接管理功能

 至此,使用docker-compose部署php-apche、Mysql、phpmyadmin已经顺利部署成功!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值