• 系统综合实践3


    完成Docker-compose的安装

    • 换源
    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    • 修改目录权限,否则后续docker-compose up命令会报错
    sudo chmod +x /usr/local/bin/docker-compose
    
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    docker-compose --version
    

    在这里插入图片描述

    Dockerfile编写

    • 使用docker pull 下载各自的镜像
    sudo docker pull php:5.6-fpm
    

    在这里插入图片描述

    创建如下各个文件

    html

    #index.html
    welcome to jasonginx 
    
    #index.php
    <?php phpinfo();?>
    

    mysql

    #Dockerfile
    #基础镜像
    FROM mysql:5.7
    
    #维护者信息
    MAINTAINER jaso
    

    nginx

    #Dockerfile
    # Base images 基础镜像
    FROM nginx:latest
    
    #MAINTAINER 维护者信息
    MAINTAINER jaso
    
    #default.conf
    server {
            listen       80;
            server_name  localhost;
        
            location / {
                root   /var/www/html;
                index  index.html index.htm index.php; # 增加index.php
            }
        
            #error_page  404              /404.html;
        
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /var/www/html;
            }
            location ~ .php$ {
                root           /var/www/html; # 代码目录
                fastcgi_pass   phpfpm:9000;    # 修改为phpfpm容器
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改为$document_root
                include        fastcgi_params;
            }
        }
    

    phpfpm

    #Dockerfile
    FROM php:5.6-fpm
    
    RUN apt-get update && apt-get install -y 
    libfreetype6-dev 
    libjpeg62-turbo-dev 
    libpng12*-dev 
    vim 
    && docker-php-ext-install pdo_mysql 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
    && docker-php-ext-install gd 
    

    在这里插入图片描述

    使用Compose实现多容器运行机制

    docker-compose.yml

    version: "3"
    services:
     nginx:
       build: ./nginx
       ports:
         - "80:80"
       links:
         - "phpfpm"
       volumes:
         - ./html/:/var/www/html/
         - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
     phpfpm:
       build: ./phpfpm
       ports:
         - "9000:9000"
       volumes:
         - ./html/:/var/www/html/
       links:
         - "mysql"
     mysql:
       build: ./mysql
       ports:
         - "3306:3306"
       volumes:
         - ./mysql/data/:/var/lib/mysql/
       environment:
         MYSQL_ROOT_PASSWORD : 123456
    
    • 在compose文件夹打开终端
    docker-compose up -d
    

    在这里插入图片描述

    • 构建成功

    在这里插入图片描述

    服务测试

    测试访问index.html和index.php,
    在这里插入图片描述
    在这里插入图片描述

    • PDO安装成功

    在这里插入图片描述

    • 连接mysql
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
     
    try {
        $conn = new PDO("mysql:host=$servername;", $username, $password);
        echo "连接成功"; 
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    ?>
    

    servername我采用本地的IP地址

    • 创建数据库
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
    
        // 设置 PDO 错误模式为异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "CREATE DATABASE myDBPDO";
    
        // 使用 exec() ,因为没有结果返回
        $conn->exec($sql);
    
        echo "数据库创建成功<br>";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
    
    $conn = null;
    ?>
    

    在这里插入图片描述

    • 用终端进入mysql容器,查看数据库是否创建成功
    docker  exec -it compose_mysql_1 /bin/bash
    mysql -u root -p
    show databases;
    

    在这里插入图片描述
    在这里插入图片描述

    • 在数据库内建表
    <?php
    $servername = "192.168.10.139";
    $username = "root";
    $password = "123456";
    $dbname = "myDBPDO"; 
     
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // 设置 PDO 错误模式,用于抛出异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
        // 使用 sql 创建数据表
        $sql = "CREATE TABLE palyer (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
        firstname VARCHAR(30) NOT NULL,
        lastname VARCHAR(30) NOT NULL,
        email VARCHAR(50),
        reg_date TIMESTAMP
        )";
     
        // 使用 exec() ,没有结果返回 
        $conn->exec($sql);
        echo "数据表 player 创建成功";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    在这里插入图片描述

    use myDBPDO
    show tables;
    

    在这里插入图片描述
    在这里插入图片描述

    • 插入数据
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDBPDO";
     
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // 设置 PDO 错误模式,用于抛出异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO player(firstname, lastname, email)
        VALUES ('John', 'Doe', 'john@example.com')";
        // 使用 exec() ,没有结果返回 
        $conn->exec($sql);
        echo "新记录插入成功";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    在这里插入图片描述

    select * from player;
    

    在这里插入图片描述

    • 修改数据
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDBPDO";
     
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
        // 开始事务
        $conn->beginTransaction();
        // SQL 语句
        $conn->exec("INSERT INTO player (firstname, lastname, email) 
        VALUES ('John', 'Doe', 'john@example.com')");
        $conn->exec("INSERT INTO player (firstname, lastname, email) 
        VALUES ('Mary', 'Moe', 'mary@example.com')");
        $conn->exec("INSERT INTO player (firstname, lastname, email) 
        VALUES ('Julie', 'Dooley', 'julie@example.com')");
     
        // 提交事务
        $conn->commit();
        echo "修改成功";
    }
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    在这里插入图片描述

    增加phpmyadmin容器(选做)

    • pull phpmyadmin
    docker pull phpmyadmin/phpmyadmin
    
    • 在文件夹compose中创建以下文件

    在这里插入图片描述

    Dockerfile

    #Dockerfile
    FROM phpmyadmin/phpmyadmin:latest
    

    在这里插入图片描述

    在docker-compose.yml文件末端加上

     phpmyadmin:
        build: ./phpmyadmin
        container_name: "phpmyadmin"
        ports:
         - "9090:80"
        links:
         - "mysql"
        environment:
         - PMA_ARBITRARY=1  
    
    • 重构docker-compose

    在这里插入图片描述

    • 在web端使用phpmyadmin,用自己数据库的账号密码进入
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    • 插入数据

    在这里插入图片描述

    • 使用phpmyadmin查询

    在这里插入图片描述

    小结

    • docker-compose官方安装速度太慢,换源轻松起飞
    • 配置文件路径未改正,浏览器访问404
    • ubuntu悄悄断网(中国农村联不通),数据库断连,还再不停地研究语法错误,浪费了很多时间
    • build过程中apt-get update更新很慢,试了几个网上常见的加速方式也不见效,无奈挂机慢慢下
    • 跟着大佬的步骤加上自己的一些理解,学起来会比较顺,简单学习了docker-compose的使用、php连接MySQL、docker-compose.yml编写,但是仍有很多东西没摸透,博客写完得再捋捋
    • 用时:加起来差不多一天半
  • 相关阅读:
    C#中正则表达式的使用
    Asp.Net MVC 身份验证-Forms
    ASP.NET MVC:窗体身份验证及角色权限管理示例
    asp.net mvc forms身份认证
    ASP.NET MVC Form验证
    C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
    参考例子,学习Func<T, TResult>委托
    Razor 中的@helper 与 @function 用法
    @Helper辅助方法和@functions自定义函数
    ASP.NET MVC传递参数(model), 如何保持TempData的持久性
  • 原文地址:https://www.cnblogs.com/JasonL-S/p/12832134.html
Copyright © 2020-2023  润新知