zoukankan      html  css  js  c++  java
  • 第三次系统实践作业

    一、Docker Compose的安装

    参考老师给的官网进行下载,尝试了好几次,速度有些慢,就边做其他事边等待

    下载 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

    将可执行权限应用于二进制文件:
    sudo chmod +x /usr/local/bin/docker-compose

    测试是否安装成功:
    docker-compose --version

    二、Dockerfile编写(LNMP)

    本次实验的 LNMP 为 Linux + Nginx + MySQL + PHP. 相应的dockerfile如下:

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

    首先是配置文件default.conf的修改


    然后是yml文件的建立,详细代码如下:

    version: "3"
    services:
    nginx:
    image: mynginx_image #指定镜像名
    container_name: mynginx #指定容器名
    build:
    context: .
    dockerfile: dockerfile_nginx #指定dockerfile文件
    ports:
    - "80:2341" #修改端口映射
    volumes:
    - ./web:/web/html #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
    - ./default.conf:/etc/nginx/conf.d/default.conf #挂载配置文件
    php:
    image: myphp_image
    container_name: myphp
    build:
    context: .
    dockerfile: dockerfile_php
    environment:
    MYSQL_PASSWORD: 123456 #设置好环境变量,在php代码中使用变量名直接引用
    volumes:
    - ./web:/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:
    - "8080:80" # phpmyadmin默认监听80
    environment:
    PMA_HOST: mysql

    接着构建LNMP环境

    执行代码: sudo docker-compose up -d --build

    查看相应的镜像和容器

    网页响应测试

    四.服务测试

    首先检测PHP是否能够成功连接Mysql数据库

    修改宿主机~/docker_compose/web目录下的index.php文件

    测试图:

    然后创建数据库

    在新建数据库中创建表



    向表中插入数据


    基本数据库操作



    五.问题与总结

    又一次遇到html映射的问题,在映射index文件的是出现了403错误.后来一步步排查后,发现了在更改配置文件default.conf时没有和后面执行的yml里设置index文件的位置对应起来,导致yml在执行时,没有创建在配置文件上的修改的index文件位置.导致无法映射成功.

    关于容器卷的相关知识:docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷。本次实验用到的相关特点是其可在容器之间共享或重用数据,卷中的更改可以直接生效。所谓的挂载操作,相当于在本地建立一个文件夹,然后容器里面定义一个工作目录,把本地的文件夹和容器的工作目录关联起来,不管是在容器工作目录或者在本地文件夹增加修改文件,两边都会同步.

    关于选做部分的phpmyadmin容器,看了同学的博客,发觉是实现web端的数据库管理,通过可视化的界面,能够更加方便快捷的对数据库进行操作.相关操作下,确实变得更加简单一些.

    本次的作业还是行走在先行者闯出来的路上,但也还是花费了大约两个下午的时间.遇到的问题不同,而时间也近乎还是花费在寻找问题以及解决的这一个过程.

  • 相关阅读:
    python 快速排序详述
    GitHub 小试牛刀(踩坑记录)
    python 内部类
    Django1.11搭建一个简易上传显示图片的后台
    Ubuntu16.04卸载opencv2.4.9并安装opencv3.2.0+contrib
    OpenCV4Android背景建模(MOG、MOG2)
    CentOS7.3安装NVIDIA-1080ti驱动、cuda、cudnn、TensorFlow
    TensorFlow Object Detection API(Windows下测试)
    关于git常见的一些问题
    聊聊Java中的反射(一)
  • 原文地址:https://www.cnblogs.com/yellow-2018/p/12830847.html
Copyright © 2011-2022 走看看