2020系统综合实践 第3次实践作业

1)完成Docker-compose的安装

  • 刚开始的时候直接通过老师给的参考手册来安装doDocker-compose发现实践会特别长
  • 接着通过curl命令下的链接可以知道只需要把这个包下载下来应该就可以提速了,后面看到有大佬发了链接,就直接在windows端下载下来然后复制到linux相应的文件目录下,这个过程会发现直接复制到文件夹下会出现权限不够的问题,所以使用如下语句复制到相应文件夹
    sudo cp '/home/y/桌面/docker-compose' '/usr/local/bin'
  • 将可执行权限应用于二进制文件:
    sudo chmod +x /usr/local/bin/docker-compose
  • 查看版本号
    docker-compose --version
    安装成功

2)Dockerfile编写

创建docker-compose文件夹,并创建相应的dockerfile文件

docker-nginx

FROM nginx
MAINTAINER by Yaobink
EXPOSE 2419

docker-php

FROM php:7.4-fpm
MAINTAINER by Yaobink
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

docker-mysql

FROM mysql:5.7
MAINTAINER by Yaobink

docker-myadmin

FROM phpmyadmin/phpmyadmin      
MAINTAINER by Yaobink
EXPOSE 8080

配置nginx的配置文件

server {
    listen       2419;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/myweb;
        index  index.html index.htm;
    }

    #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   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/myweb;
        fastcgi_pass   c_php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$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;
    #}
}

编写docker-compose.yml

version: "3"
services:
 php:
    image: my_php
    container_name: c_php 
    build:
      context: .
      dockerfile: dockerfile_php 
    environment:
      MYSQL_PASSWORD: 123456            #设置好环境变量,在php代码中使用变量名直接引用
    volumes:
      - ./web:/usr/myweb                  #挂载工作目录到本机web目录

 nginx:
    image: my_nginx                #指定镜像名
    container_name: c_nginx             #指定容器名
    build:
      context: .
      dockerfile: dockerfile_nginx      #指定dockerfile文件
    ports:
      - "80:2419"                       #修改端口映射
    volumes:
      - ./web:/usr/myweb                #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
      - ./default.conf:/etc/nginx/conf.d/default.conf     #挂载配置文件



 mysql:
   image: my_mysql
   container_name: c_mysql
   build:
      context: .
      dockerfile: dockerfile_mysql
   ports:
     - "3306:3306"
   volumes:
     - ./mysql_data:/var/lib/mysql       #挂载容器卷,实现数据同步,防止数据丢失

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

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

执行docker-compose文件

sudo docker-compose up -d --build

查看镜像创建和容器创建的结果


4)服务测试

测试访问index.html和index.php

修改index.php内容

访问index.php

发现成功实现php文件下的内容,成功连接数据库并创建表格

  • 进入容器查看数据库
sudo docker exec -it c_mysql /bin/bash
mysql -u root -p
show databases;

创建数据表

  • 编辑index.php文档
  • 查看结果

插入并查询数据

  • 编辑index.php文档

  • 查看结果

修改数据

删除数据


5)选做

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

docker-compose.yml和docker_phpmyadmin文件在前面已经给出

访问localhost:8080,并登陆

8080端口是在docker文件声明的暴露端口

可以直接实现插入删除修改等操作

6)问题

(1)在服务测试访问index.html和index.php出现无法连接的情况,后面找了半天defaul.conf里面的设置端口写的不对,接着还是不行,仍然连接失败
通过查看日志文件,发现是配置文件中的容器名没有对应上,于是做了修改,就正常连接了

sudo docker-compose up


(2)同样的解决方法,也是通过查询日志发现的,在查看容器的运行状态的时候发现mysql的容器的运行状态是Exited (1)的状态,查看后发现是没有设置初始的密码的缘故,因此更改了yml文件,从而得到结果

(3)在一些文件的编写上可能刚开始理解的不够,有些直接复制过来的地方有个别细节没有修改到,比如一些名称的问题,导致中途出现了较多的错误。因此对复制过来的地方应该花时间理解含义,我是由于设置的容器名称没有修改导致一些地方连接不上还有后面index.php文件的servername刚开始也忘记修改,这些细节应该注意。

7)花费时间

这次作业大概花了10个小时,主要花费的时间是在开始作业前的一些查阅、还有前面的dockerfile文件和yml文件的编写上,以及在nginx的配置问题上,虽然挂载文件没有出错,但是端口号和有个地方理解不够写错了容器名称停留了太多时间。

8)小结

开始作业前感觉这个作业好像特别难的样子,特别是刚开始看到那些文件感觉好多,有点无从下手,不过看了看别人的作业,在着手开始去做,做完了觉得其实并不难,有些地方通过查阅资料都是可以慢慢解决的,主要的问题还是应该马上动手去做,只有动手了才会遇到问题并解决问题,还有就是最重要的细节问题了,特别是在那些配置文件上,要是这些问题在刚开始就解决感觉可以节省很多时间。还有这次作业我是刚开始写了前面的配置文件,写完没有测试,后面过了好几天再来做,感觉很多之前写的东西都忘了,也是后面导致出现较多小错误的原因,所以感觉还是应该拿出比较充裕的时间把作业直接完成会更有效果也更有效率。
posted @ 2020-05-04 16:44  Yaobink  阅读(362)  评论(0编辑  收藏  举报