zoukankan      html  css  js  c++  java
  • 第3次实践作业

    一、安装Docker-compose

    1.下载Docker Compose

    sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    2.将可执行权限应用于二进制文件

    sudo chmod +x /usr/local/bin/docker-compose
    

    3.创建软链

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    

    4.测试是否安装成功

    docker-compose --version
    

    二、Dockerfile编写(选择LNMP进行构建)

    1.拉取php镜像

    sudo docker pull php:7.4-fpm
    

    2.编写default.conf文件

    server {
        listen       3333;
        server_name  localhost;
    
        location / {
            root   /home/c/Desktop/docker_compose/web/html;
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location ~ .php$ {
            root           /home/c/Desktop/docker_compose/web/php;
            fastcgi_pass   laikaphp:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
            include        fastcgi_params;
        }
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }
    

    3.编写docker-compose.yml文件

    version: "3"
    services:
        nginx:
            image: laikanginx_image                
            container_name: laikanginx             
            build:
                context: .
                dockerfile: dockerfile_nginx     
            ports:
                - "3332:3333"                       
            volumes:
                - ./web:/home/c/Desktop/docker_compose/web/html                  
                - ./default.conf:/etc/nginx/conf.d/default.conf     #配置文件
        php:
            image: laikaphp_image 
            container_name: laikaphp 
            build:
                context: .
                dockerfile: dockerfile_php 
            environment:
                MYSQL_PASSWORD: 123
            volumes:
                - ./web:/home/c/Desktop/docker_compose/web/php                
    
        mysql:
            image: laikasql_image 
            container_name: laikasql
            build:
                context: .
                dockerfile: dockerfile_mysql
            ports:
                - "3306:3306"
            volumes:
                - ./mysql_data:/var/lib/mysql
    

    4.编写php的Dockerfile文件

    FROM php:7.4-fpm
    MAINTAINER laika
    FROM php:7.4-fpm
    RUN apt-get update && apt-get install -y 
            libfreetype6-dev 
            libjpeg62-turbo-dev 
            libpng-dev 
        && docker-php-ext-install pdo_mysql 
        && docker-php-ext-configure gd --with-freetype --with-jpeg 
        && docker-php-ext-install -j$(nproc) gd
    

    5.编写nginx的Dockerfile文件

    from nginx
    maintainer laika
    expose 3333
    

    6..编写mysql的Dockerfile文件

    FROM mysql
    MAINTAINER laika
    ENV MYSQL_ROOT_PASSWORD 123
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    

    7.编写index.html文件

    <!DOCTYPE html>
    <html>
    <head>
    <title>HTML页面</title>
    </head>
    <body>
    <p>hello!</p>
    </body>
    </html>
    

    8.编写index.php文件

    <?php phpinfo();?>
    

    编写好后将文件统一放入一个目录下。

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

    1.在编写好文件的目录下执行命令

    sudo docker-compose up -d --build
    


    2.查看镜像以及容器

    sudo docker images
    sudo docker ps
    

    3.访问localhost/index.html

    4.访问localhost/index.php查看配置信息

    四、服务测试

    1.修改index.php,连接mysql

    <?php
    $servername = "laikasql";    #要写当前自己命名的容器名
    $username = "root";
    $password = "123";   
    
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
        echo "连接成功";
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    ?>
    

    2.修改index.php,创建数据库

    <?php 
    $servername = "laikasql";    
    $username = "root";
    $password = "123"; 
     
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
    
        $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;
    ?>
    

    3.进入容器,查看myDBPDO数据库是否创建成功

    sudo docker exec -it laikasql /bin/bash
    mysql -u root -p
    show databases;
    

    4.进入数据库后,再次改index.php,创建数据表

    <?php
    $servername = "laikasql";
    $username = "root";
    $password = "123";
    $dbname="myDBPDO"; 
     
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);  
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // 使用 sql 创建数据表
        $sql = "CREATE TABLE car (
        no int(7) UNSIGNED PRIMARY KEY, 
        band varchar(35) NOT NULL
        )";
        // 使用 exec() ,没有结果返回 
        $conn->exec($sql);
        echo "数据表 car 创建成功";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    5.查看数据表car是否创建成功

    use myDBPDO
    show tables;
    

    6.修改index.php,往数据库中插入数据

    <?php
    $servername = "laikasql";    
    $username = "root";
    $password = "123";   
    $dbname="myDBPDO";   
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // 开始事务
        $conn->beginTransaction();
        // SQL 语句
        $conn->exec("INSERT INTO car (no,band) 
        VALUES (6789, 'Ford')");
        $conn->exec("INSERT INTO car (no,band) 
        VALUES (3267, 'toyota')");
    
        // 提交事务
        $conn->commit();
        echo "新记录插入成功";
    }
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    7.查看数据表是否插入成功

    use myDBPDO
    select * from car;
    

    8.修改index.php,修改和删除数据

    <?php
    $servername = "laikasql";    
    $username = "root";
    $password = "123";     #密码也可以直接使用yml中的变量名
    $dbname="myDBPDO";        #变量设置
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // 开始事务
        $conn->beginTransaction();
        // SQL 语句(更新和删除)
        $conn->exec("UPDATE car SET band='Benz' WHERE no=3267");
        $conn->exec("DELETE FROM car where no=6789");
        // 提交事务
        $conn->commit();
        echo "修改,删除成功";
    }
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    9.查看数据表是否修改和删除成功

    select * from car;
    

    五、增加一个phpmyadmin容器,实现web端的数据库管理

    1.因为之前正在运行,所以在修改前先停止运行

    sudo docker-compose down
    

    2.修改docker-compose.yml文件,在底部新增

    phpmyadmin:
                image: laikaphpmya_image
                container_name: laikaphpmyadmin
                build: 
                    context: .
                    dockerfile: dockerfile_phpmyadmin
                ports: 
                    - "3334:80" # phpmyadmin默认监听80
                environment:
                    PMA_HOST: mysql   #指定mysql服务所在的host
    

    3.新建dockerfile_phpmyadmin文件并编写

    FROM phpmyadmin/phpmyadmin
    MAINTAINER laika
    EXPOSE 3334
    

    4.再次运行docker-compose

    sudo docker-compose up -d --build
    

    5.输入网址并输入密码登录

    http://localhost:3334/index.php
    

    6.查看数据库

    7.查看表

    8.插入数据

    9.查找数据

    10.删除数据

    六、实验报告

    1.遇到的问题

    • 下载Docker Compose时太慢甚至卡了,可以采用换源的方法,这时候速度就很快了
    • 在执行sudo chmod +x /usr/local/bin/docker-compose命令时出现
    sudo: unable to execute /usr/local/bin/docker-compose: Text file busy
    

    存在进程被占用的情况,把运行中的进程停止重新执行就可以了

    • 访问localhost/index.php时页面出现
    file not found!
    

    经过检查发现,将nginx的配置文件中的fastcgi_param参数进行修改后就可以了

    2.完成作业所花的时间

    名称 时长(分)
    下载Docker compose 30
    查找资料 60
    编写文件 120
    操作运行 150
    检查错误 120
    整理博客 100

    3.感想

    上次就因为无意把小数点漏了导致花了很长时间去修改,但是这次还是会出现多了个空格之类的情况,这提醒了我一定要认真,不然很容易出错。每当遇到困难的时候,百度百度,多尝试几种方法,会学到更多的知识。一些时候下载的速度很慢,如果一直干等着会消耗很多耐心和时间,还是要活用换源的方法较为方便快捷。端口也要注意改成新的,否则用以前用过的端口容易出错。

  • 相关阅读:
    【shell脚本】系统硬件信息数据库收集(普通版和导入Excel版)auto_system_collect.sh
    【linux命令】sz、rz命令安装及使用
    【shell脚本】全备份和增量备份Linux系统脚本auto_bak_system.sh
    【shell脚本】截取恶意端口ip,禁止远程登录22端口auto_deny_ip.sh
    【shell脚本】自动生成网卡文件主要内容auto_network_scripts.sh
    java 多个数 组合成不同的组
    linux jdk配置
    ubuntu sh脚本激活conda 虚拟环境
    liunx mysql数据库目录迁移
    liunx 定时任务执行java程序配置流程
  • 原文地址:https://www.cnblogs.com/solareye/p/12853902.html
Copyright © 2011-2022 走看看