• 2020系统综合实践 第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编写

    创建如下各个文件

    html

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

    mysql

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

    nginx

    #Dockerfile
    # Base images 基础镜像
    FROM nginx:latest
    
    #MAINTAINER 维护者信息
    MAINTAINER cth
    #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,


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

    • 创建数据库
    <?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;
    

    • 插入数据

    • 验证

    • 更新数据

    • 验证

    • 删除数据

    • 验证

    增加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官方安装速度太慢,加速器用后就好
    • 编写docker_phpmyadmin运行失效,换名字就行
    • build过程中apt-get update更新很慢,试了几个网上常见的加速方式也不见效,无奈挂机慢慢下
    • 跟着大佬的步骤加上自己的一些理解,学起来会比较顺
    • 用时:加起来差不多一天
  • 相关阅读:
    HDU
    HDU
    HDU
    2016蓝桥杯省赛C/C++A组第二题 跳蚱蜢
    2016蓝桥杯决赛C/C++A组第四题 路径之谜
    【洛谷P2397】yyy loves Maths VI (mode)【模拟】
    【洛谷P2397】yyy loves Maths VI (mode)【模拟】
    【NOIP2018】【洛谷P5017】摆渡车【DP】
    【NOIP2018】【洛谷P5017】摆渡车【DP】
    2018NOIP普及组 划水记
  • 原文地址:https://www.cnblogs.com/xzytxdy/p/12852727.html
Copyright © 2020-2023  润新知