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

    一个最终的应用通常需要组装多个容器提供的多个服务。以web服务为例,需要完成web服务器、数据库、开发程序等服务的组装,典型的如LAMP(Linux+Apache+Mysql+PHP)或LNMP(Linux+Nginx+Mysql+PHP)。Docker compose是作为定义和运行多容器的工具,用户可以使用 YML 文件来配置应用程序需要的所有服务。本次作业需要各位实践Docker compose,各位可以在第二次实践作业的基础之上开展,要求如下:

    (1)完成Docker-compose的安装

    参考资料:Install Docker Compose

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    

    (不是参考资料中的命令

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

    这个命令是将可执行权限应用于二进制文件

    docker-compose --version
    

    查看版本,确认安装成功。

    (2)Dockerfile编写

    要求:

    • LNMP/LAMP选择一种;
    • 分别构建web、php应用、数据库等镜像服务,php镜像亦有提供php:-apache的变体;
    • 提示:php连接数据库需要安装必要的核心扩展部件(PHP Core Extensions)安装方法可参考官方镜像介绍。
    选择LNMP(linux,nginx,mysql,php)

    各文件如下

    default.conf
    server {
        listen       8010;        #修改映射端口
        server_name  localhost;
    
        location / {
            root   /home/docker-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/docker-web/php;          #修改工作目录
            fastcgi_pass   sphp:9000;        #修改为容器名
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
            include        fastcgi_params;
        }
    
    }
    
    dockerfile_nginx
    FROM nginx
    MAINTAINER sayoko
    EXPOSE 8010
    
    dockerfile_php
    FROM php:7.4-fpm
    MAINTAINER sayoko
    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
    
    dockerfile_mysql
    FROM mysql
    MAINTAINER sayoko
    ENV MYSQL_ROOT_PASSWORD 123456
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    

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

    docker-compose.yml
    version: "3"
    
    services:
    
     nginx:
    
    image: snginx_image                #指定镜像名
    
    container_name: snginx             #指定容器名
    
    build:
    
      context: .
    
      dockerfile: dockerfile_nginx      #指定dockerfile文件
    
    ports:
    
      - "80:8010"                       #修改端口映射
    
    volumes:
    
      - ./web:/home/docker-web/html                 #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
    
      - ./default.conf:/etc/nginx/conf.d/default.conf     #挂载配置文件
    
    
    
     php:
    
    image: sphp_image 
    
    container_name: sphp 
    
    build:
    
      context: .
    
      dockerfile: dockerfile_php 
    
    environment:
    
      MYSQL_PASSWORD: 123456            #设置好环境变量,在php代码中使用变量名直接引用
    
    volumes:
    
      - ./web:/home/docker-web/php                  #挂载工作目录到本机web目录
    
    
    
     mysql:
    
       image: mysql_image 
    
       container_name: mysql
    
       build:
    
      context: .
    
      dockerfile: dockerfile_mysql
    
       ports:
    
     - "3306:3306"
    
       volumes:
    
     - ./mysql_data:/var/lib/mysql       #挂载容器卷,实现数据同步,防止数据丢失
    
    
    
     phpmyadmin:
    
    image: myphpmyadmin_image
    
    container_name: myphpmyadmin
    
    build: 
    
      context: .
    
      dockerfile: dockerfile_phpmyadmin
    
    ports: 
    
      - "8050:80" # phpmyadmin默认监听80
    
    environment:
    
    
    
      PMA_HOST: mysql                     #指定mysql服务所在的host
    




    (4)服务测试

    要求和提示:

    • 包括但不限于测试数据库连接、数据库新建、表新建、表记录的插入修改和删除是否成功(pdo或mysqli均可);
    • 相关测试代码可直接参考PHP与MySQL的教程

    修改index.php文件
    连接成功:

    创建数据库成功:

    创建表成功:

    插入数据成功:

    修改数据成功:

    删除数据成功:

    (5)选做

    • 增加一个phpmyadmin容器,实现web端的数据库管理。
    dokcerfile_phpmyadimin
    FROM phpmyadmin/phpmyadmin           
    MAINTAINER sayoko
    EXPOSE 8050
    

    打开8050口

    (6)总结问题以及解决方法

    Q:光荣的在第一步安装就出小问题了,用教程里的太慢了慢到卡掉

    解决:使用了其他命令,成功完成安装。

    Q:执行docker-compose build时候的错误,应该是php那里什么地方没写好(我忘记了)(因为改了好多好多好多次了)

    解决:重新把每个文件重新认真检查了一下

    Q:打开网页发现显示 SQLSTATE[HY000] [2002] No such file or directory

    解决:

    [这里](https://segmentfault.com/q/1010000007356940/a-1020000007367966 里这么说) 这么说

    以及其实很多地方我都不懂,看别人博客都不知道为什么要这样的,去学习了很多比如容器挂载,mysql和php的连接,yml文件的书写规则,简单的了解了一下php语言,收获还是挺多的。总用时记不清了,因为中间有时候失败了就隔两天再重新继续做,但我估计应该是2个下午+1个晚上+1个早上(写博客)的时间。

    还有就不知道为啥我下载东西(比如开头这个)就特别慢,执行docker-compose build命令的时候也特别特别特别慢,装东西慢然后我去干其他事情,回来就发现失败的事情发生了好多好多好多次。

    希望下次作业能做的顺利(每次都祈祷)

  • 相关阅读:
    Linux C语言编程基础
    《信息安全系统设计与实现》学习笔记二
    《信息安全系统设计与实现》选做一
    《信息安全系统设计与实现》学习笔记一
    商用密码调研
    20191212斯廷响 2020-2021-2 《Python程序设计》实验四报告
    20191212 2020-2021-2 《Python程序设计》实验三报告
    20191212 2020-2021-2 《Python程序设计》实验二报告
    20191212 2020-2021-2 《Python程序设计》实验一报告
    学习笔记2
  • 原文地址:https://www.cnblogs.com/sayoko/p/12829697.html
Copyright © 2011-2022 走看看