zoukankan      html  css  js  c++  java
  • 2020系统综合实践 第3次实践作业

    一、Docker Compose的安装

    • 因为直接用curl命令下载太慢了,所以我换了其他的下载方法,解决github release下载过慢的方法我会在文章后面的问题及解决方法中说明。
      我们把docker compose下载过后,放到指定的文件夹中。因为我是在主机中下载的,然后直接放在共享文件夹中,在虚拟机中,从共享文件夹复制到指定的文件夹。

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

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

    • 创建软链
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
    • 测试是否安装成功,如图,如果显示出版本号即代表安装成功
    docker-compose --version
    

    二、Dockerfile编写(LNMP)

    Nginx

    #Dockerfile
    FROM nginx:latest
    
    #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;
            }
        }
    
    

    mysql

    #Dockerfile
    FROM mysql:5.7
    

    php

    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 
    

    web

    #index.html
    NGINX SUCCESS
    
    #index.php
    <?php phpinfo();?>
    
    • 最后文件结构如图。

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

    yml文件

    #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
    
    
    • 接下来我们使用docker compose来构建LNMP环境,进入存放构建环境的文件的文件夹内打开终端。
    sudo docker-compose up -d
    

    四、服务测试

    • 参考菜鸟教程---PHP PDO

    • 首先测试去访问index.html和index.php,如图。

    • 因为我装的PHP只有PDO,其他的模块好像没有,所以本次就用PDO去连接数据库并进行操作,可在php配置信息的页面中找到,就是我的index.php里的内容。

    • 首先我们尝试去连接mysql,如图,连接成功,我在这里修改了一些内容,把servername改成自己的ip地址,可能是因为我在大数据实验中改了一些本机的地址配置,所以才需要这样做,正常情况下应该使用localhost就可以。建议在安装php的时候装一个vim编辑器,直接在PHP容器里修改index.php,然后主机通过浏览器访问index.php就可以,也可以在挂载的目录里修改index.php。vim还可以修改php容器中其他配置文件,比较方便。

    • 我们线尝试用PHP去创建一个数据库,如图创建成功,在PHP容器中编辑index.php,创建一个名为mytest的数据库。

    • 在mysql容器中可以看到这个数据库已经创建完成。

    • 接下来创建一个名为Students的表

    • 显示创建成功,然后到mysql容器中查看是否有这个表,可以看到已经有这个表了。

    • 下一步尝试去插入一些数据到这个表中。

    • 我们到mysql容器中去查看是否插入成功,如图,插入成功,并且数据和我们输入的一样。这里用到了事务和回滚很好,因为是插入多条数据,如果插入数据失败不会造成数据库内的数据混乱。

    • 接下来去修改学号为111111111同学的专业,也就是修改表内数据。

    • 可以看到,该同学的专业已经被修改为electronic engineering。

    • 最后我们进行删除测试,删除学号为222222222的同学这条数据。

    • 如图,表内已经没有该同学的数据,测试完毕,基本的数据库操作都可以使用。

    五、phpmyadmin的增加

    • 参考博客---docker-compose搭建phpmyadmin
    • 在原来的yml文件后面加上这几行,就是增加一个新的容器phpmyadmin
    • 新的文件结构,就是多增加一个文件夹,里面放一个phpmyadmin的Dockerfile
    #Dockerfile
    FROM phpmyadmin/phpmyadmin:latest
    
    • 之后访问9090端口即可进入,输入服务器,用户和密码即可进入,这里的服务器我输的是自己的静态ip地址。

    • 这是进入之后的界面

    • 这就是我之前实验中的数据库、表及表中的数据。

    • 接下来进行一个简单的插入数据测试,如图,插入了学号为123456789的学生的一条数据。我们可以在图形化的界面进行各种数据库的操作,很方便,其余操作这里就不一一测试了。

    问题&解决方法

    • github中下载docker compose过慢怎么办?

      • 当时下载的时候显示剩余时间三十多个小时,我就直接放弃了官方文档给出的方法,而且这个好像也没有办法换下载源,后来在网上查到一种解决方法,速度不算很快,但是下载一个小文件还是够用了,几分钟就可以搞定。我这里已经操作过一次,如果和我版本相同的可以直接点击下载---docker-compose-Linux-x86_64百度网盘下载,提取码6jz8。下载好之后为了按照教程中的流程走,注意改一下名称,并且把它移到指定的位置。下面是下载的操作流程。
        点击这个网站注册一个账号,只需要一个邮箱即可offcloud,注册登录之后,可以见到左侧有instant选项,点击进入。

        之后再把需要下载的文件地址输入中间的框中,再点击download即可。
    • PHP无法连接到mysql,显示没有该文件或目录。

      • 因为我的大数据实验课也是用这台虚拟机做的实验,我配置了静态ip地址,并且把localhost修改了,可能是因为这个原因,servername换成我的静态ip地址就可以正常运行。
    • 创建LNMP环境时nginx会报错。

      • 注意参考博客中的目录和我们自己的目录一般是不一样的,需要修改yml文件里的目录。
    • Tips:

      • 在PHP容器要安装PDO等和数据库连接的model,还有建议在PHP容器内安装一个vim,到时候修改文件比较方便,或者直接在你挂载的目录里修改都可以。
      • 有一些小小的错误可能就卡我了一个小时,另外还需要注意的是index.php中的语句语法一定要仔细检测,有时候连接出错可能就是语句有问题,比如说单词拼错,少写一个分号等等,很不容易检查出来,所以一定要细心细心细心。
      • 需要查询PHP文件配置时可在PHP配置显示的网页查看,就是我最初的index.php中。

    小结

    docker compose其实并不难使用,难的地方是容器的配置,我对这些容器的配置基本上不了解,只能上网一篇一篇翻博客去查找,在查找资料的过程也是一种学习,从最初的想着完成难度太大,到最后一步一步做完,完成测试后才有种恍然大悟的感觉。整个过程比较难,一些简单的错误可能卡我数十分钟,而且还不能完全按照博客的去做,有些地方比如说路径,每个人都是不同的,这个时候就需要去理解这一步为什么这样做,我的该改成什么样,而不是简单的直接搬过来。没有能直接搬过来的博客,都需要自己理解和加工修改。同一个错误也可能有不同的原因,每个人不都是相同的,这个时候也需要自己一个一个去排查。

    时间花费

    基本任务+博客9小时。附加的选做1小时。

  • 相关阅读:
    JVM系列之:String.intern和stringTable
    一文了解JDK12 13 14 GC调优秘籍-附PDF下载
    JVM系列之:对象的锁状态和同步
    JVM系列之:Contend注解和false-sharing
    十分钟搭建自己的私有NuGet服务器-BaGet
    .Net Core in Docker极简入门(下篇)
    .Net Core in Docker极简入门(上篇)
    Flutter 实现酷炫的3D效果
    2020年20个Flutter最漂亮的UI库和项目
    Python 为什么能支持任意的真值判断?
  • 原文地址:https://www.cnblogs.com/ambition-hhn/p/12772003.html
Copyright © 2011-2022 走看看