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

完成Docker-compose的安装

  • github的release下载在国内被墙的原因,导致按照官方文档方式下载无数次都失败。最后折腾了半天在ubuntu里配置了qv2ray,还折腾了一下路由的规则判断(github的流量会自动不走代理),结果还是不行。
  • 猜测可能是因为终端使用crul下载的原因导致无法走代理。于是跑到github官网上把文件下下来
  • 将下载的文件复制到目标文件夹中,并将可执行权限应用于二进制文件
  • 安装完后发现失败了,查了一下发现自己下载的两个文件中docker-compose-Linux-x86_64.sha256好像是没有用的,每次cp操作的时候都前面的二进制文件内容都被后面的docker-compose-Linux-x86_64.sha256覆盖,最终是用了后缀sha256的文件(不知道是干嘛的),改成只用docker-compose-Linux-x86_64。至此,docker-compose安装完成。

Dockerfile编写

  • dockerfile-nginx
FROM nginx
MAINTAINER by jamwong
EXPOSE 2525
  • dockerfile-php
FROM php:7.4-fpm
MAINTAINER by jamwong
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
  • default.conf
server {
    listen       2525; #修改映射端口
    server_name  localhost;

    location / {
        root   /home/docker-compose/web; #修改工作目录
        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-compose/php;  
        fastcgi_pass   zxhphp_container:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
        include        fastcgi_params;
    }
}
  • docker-compose.yml
# docker-compose.yml
version: "3"
services:
 php:
    image: zxhphp_image
    container_name: zxhphp_container 
    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:2525"                       #修改端口映射
    volumes:
      - ./web:/home/docker-compose/web           #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
      - ./default.conf:/etc/nginx/conf.d/default.conf     #挂载配置文件

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

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

  • 执行docker-compose文件
sudo docker-compose up -d --build
  • 但是这个时候,build php的时候发生的错误,判断是镜像源的问题
  • 为了解决debian源无法下载的问题,进行了多次尝试。最后选择修改php镜像中的原来的sources.list。
  • 但是!还是没有效果…… 开始怀疑是我网络的问题,我又修改了虚拟机当中的dns
  • 结果!还是没有解决…… 最后在经历了一下午的崩溃之后,我发现在vmware当中虚拟机似乎没有与主机共享网络,可能有些潜在的问题。我又到vmware当中调整了网络适配器,设置为internet共享,使得虚拟机与主机共享流量,然后挂上了VPN,并接上了手 机 热 点 😈
  • 最后! 是的,就像上图一样,我终于成功了😭 走到这一步真的是心力交瘁,因为莫名其妙的网络问题耗掉了将近8个小时的时间。

服务测试

  • 修改index.php 连接数据库并查看结果

  • 修改index.php 创建数据库并查看结果

  • 修改index.php 创建数据表并查看结果

  • 修改index.php 表记录的插入并查看结果

  • 修改index.php 表记录的修改并查看结果

  • 修改index.php 表记录的删除并查看结果

选做

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

  • 添加文件 dockerfile-phpadmin

FROM phpmyadmin/phpmyadmin           
MAINTAINER jamwong
EXPOSE 8080
  • 在yml中添加
phpmyadmin:
    image: zxh_phpmyadmin
    container_name: zxh_phpmyadmin_container
    build: 
      context: .
      dockerfile: dockerfile-phpadmin
    ports: 
      - "8080:80" # phpmyadmin默认监听80
    environment:
      PMA_HOST: zxhmysql_container # 第一次忘了写环境变量 导致无法登陆 将对应的mysql容器写上就可以了
  • 第一次出现无法连接到mysql的情形,原因和解决方法已经补充在注释当中
  • 成功登陆phpMyAdmin

总结

写到这里属实是有些心力交瘁了。利用五一假期期间换上了ubuntu 20.04(LTS),花了不少时间重新配环境重新采坑,但是这一次对ubuntu的源有了更深的理解。因为网络的问题,这次采坑花费的时间保守估计超过了24小时……不过幸好一直有大佬传授经验一起踩坑,除了网络玄学其他都还算顺利。
一些问题和解决方法都写在上文的博客中了,总结下来其实只有一句话 z a q n y 永 远 滴 神

posted @ 2020-05-07 19:08  Jamwong  阅读(281)  评论(0编辑  收藏  举报