• 系统结构综合实践-第二次作业


    今天早上一醒来看到这个实践作业的时候完全是懵的,听完老师的说明还是懵的T_T(流下不学无术的泪水

    于是在网上看了不少资料。尚硅谷的docker视频教程挺不错的(安利一下),看完之后才比较清楚这个dockerfile是怎么一回事。

    截取视频教程中一些方便理解docker和Dockerfile的图片。过于详细的内容就不复述了

    (1) 实现一个自定义的web容器服务

    准备工作

    在根目录下新建一个文件夹用于保存接下来要编写的dockerfile

    mkdir mydocker
    cd ~/dockerfile
    vim Dockerfile
    

    这里就用vim新建好了一个Dockerfile文件

    1587201032342

    使用docker build搭建镜像

    使用docker build有两种方式

    docker build -t 新镜像名:TAG  #这个是在Dockerfile所在目录下
    docker build -f xxxx -t 新镜像名:TAG   #这个在-f后指定具体目录
    

    安装的东西有点多,等的有点久

    使用docker run运行镜像

    运行成功

    进入容器,运行一下ifconfig查看一下基本的网络信息

    出现的问题

    安装过程中曾经碰到的问题

    由于网络原因,open-ssh安装失败了,我就不安装了

    在vim中修改了原本的Dockerfile,接下来就可以了

    附上修改完以后的Dockerfile

    #设置基础镜像
    FROM ubuntu
    
    #镜像作者信息
    MAINTAINER zhong_wei_qi<897948297@qq.com>
    
    #下载并安装nginx,还有必要的维护工具
    RUN apt-get update && apt-get install -y nginx vim net-tools
    
    #将默认端口改为自定义端口
    EXPOSE 8000
    
    #web工作目录设置为/var/tmp
    ENV WEBPATH /var/tmp
    
    #启动时登录到工作目录
    WORKDIR $WEBPATH
    
    RUN echo "success============OK"
    

    (2) 实现一个自定义的数据库容器服务

    这里选择比较熟悉的MySQL。

    参考了博客https://www.cnblogs.com/UniqueColor/p/11150314.html对于如何搭建MySQL的介绍

    以及https://www.cnblogs.com/rimmy/p/7679076.html对于如何在mysql中创建新用户

    https://www.cnblogs.com/yfalcon/p/9044246.html对于docker run命令的详解

    1、首先拉取一个较稳定的mysql版本,这里选择MySQL5.7,然后使用dockerfile对于我们的要求进行定制

    2.新建一个文件夹用于存放Dockerfile还有跟MySQL相关的配置文件

    3.编写Dockerfile文件

    #设置基础镜像
    FROM mysql:5.7
    
    #镜像作者信息
    MAINTAINER zhong_wei_qi<897948297@qq.com>
    
    #配置基础环境,不允许空密码登录,并设置初始密码
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    ENV MYSQL_ROOT_PASSWORD=wayne
    
    
    #设置容器启动时执行的命令
    CMD ["sh", "/mysql/setup.sh"]
    

    4.编写容器启动脚本setup.sh

    以下信息会在容器的日志中出现,使用echo会更加方便我们解读日志,找出错误

    #!/bin/bash
    set -e
    
    #查看mysql服务的状态,方便调试,这条语句可以删除
    echo `service mysql status`
    
    echo '1.启动mysql....'
    #启动mysql
    service mysql start
    sleep 3
    echo `service mysql status`
    
    echo '2.开始导入数据....'
    #导入数据
    mysql < /mysql/schema.sql
    echo '3.导入数据完毕....'
    
    sleep 3
    echo `service mysql status`
    
    #为数据库指定新用户并创建密码
    echo '4.开始修改密码....'
    mysql < /mysql/privileges.sql
    echo '5.修改密码完毕....'
    
    #sleep 3
    echo `service mysql status`
    echo `mysql容器启动完毕,且数据导入成功`
    
    tail -f /dev/null
    

    5.编写数据库创建脚本schema.sql

    -- 创建数据库并带上字符集!!
    create database `docker_mysql` default character set utf8 collate utf8_general_ci;
    
    use docker_mysql;
    
    -- 建一张图书馆表
    DROP TABLE IF EXISTS `library`;
    
    CREATE TABLE `library` (
      `id` varchar(20) NOT NULL,
      `bookname` varchar(255) DEFAULT NULL,
      `auther` varchar(255) DEFAULT NULL,
      `class` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- 导入初始数据
    INSERT INTO `library` (`id`, `bookname`, `auther`, `class`)
    VALUES
        ('0001','English','MRw','language');
    

    6.编写数据库权限配置文件privileges.sql

    -- 使用MySQL中自带的user表创建新用户
    use mysql;
    select host, user from user;
    -- 因为mysql版本是5.7,因此新建用户为如下命令:
    create user docker identified by '123456';
    -- 将docker_mysql数据库的权限授权给创建的docker用户,密码为123456
    --create user 'username'@'host';localhost为本地登录,'%'表示任意一台计算机都可远程登录
    grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option;
    -- 这一条命令一定要有:
    flush privileges;
    

    7.运行Dockerfile创建镜像

    8.运行容器,指定容器为后台运行,即使exit以后容器仍不会停止工作;指定容器名;并进行端口映射

    9.查看日志

    docker logs msql#后跟容器名
    

    从博客里学了一手,这个很重要,能查看我们的配置文件是否正常使用了,还可以查出发生的问题。

    10.进入容器并使用账户docker登录mysql

    11.显示已存在的数据库

    12.查看在schema.sql文件中创建按的数据库和表

    13.使用在schema.sql中创建的root用户登录数据库

    可以看到root用户具有更高的权限

    14.查看MySQL的配置情况

    show variables;
    

    到此mysql的搭建和配置就差不多了

    出现的错误

    查看日志时发现运行到导入数据便没有再运行下去,说明build由于错误中断了

    解决办法:

    检查schema.sql文件

    发现使用的标点符号不匹配,修改为``这样的就可以了(不要使用'')

  • 相关阅读:
    密码学中矩阵相关计算
    系统调用
    用户空间栈&系统空间栈
    drupal重置管理员密码
    中断&异常
    再谈文件描述符
    linux下libpcap抓包分析
    模拟LRU算法&通道处理算法
    [转载] Mysql常用命令行大全
    [转载] php java交互 php/java bridge
  • 原文地址:https://www.cnblogs.com/WAYNEEZHONG/p/12755716.html
Copyright © 2020-2023  润新知