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

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

推荐apache或nginx,要求标明镜像作者信息,安装必要的工具以方便维护;设定你自己的web存放目录,安全起见,请将默认的监听端口80更改为你自定义的端口,并且声明暴露的端口,容器启动时,能直接进入web代码的存放目录。

  • 1.拉取nginx镜像:
    docker pull nginx
  • 2.创建并运行容器
    • 创建容器
      sudo docker run -it nginx /bin/bash
    • 查看容器的工作目录,方便进行后续操作
      pwd

      可见容器工作在根目录下
  • 3.更改nginx的web存放目录
    • 修改nginx.conf文件
      • 直接修改好像很复杂,所以先复制出来修改,再将原文件覆盖
        sudo docker cp <容器ID>:/etc/nginx/conf.d/default.conf .

      • 然后就能顺利地修改conf文件啦

        修改箭头指向的参数
        listen是监听的端口号,从80改为了2049
        root为Web默认目录,从/usr/share/nginx/html改为/usr/my_html/

      • 修改完成后编辑dockerfile

        from nginx
        #base image
        
        copy default.conf /etc/nginx/conf.d/
        # cover file
        
        copy index.html /usr/my_html/
        # copy my file
        
        maintainer lyh<471727250@qq.com>
        #author
        
        expose 8000
        #expose port 8000
        
      • 构建镜像
        docker build -t mynginx .

        构建成功,但是不知道为什么报错了,但是没有影响?

      • 创建容器验证结果
        sudo docker run --name my_nginx -p 8000:2049 -d mynginx

        访问浏览器http://localhost:8000/

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

可选择Mysql,Mariadb等,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。

  • 参考文档:dockerfile运行mysql并初始化数据
  • 首先,pull一个mysql镜像
    sudo docker pull mysql[红色]大坑预警!!!
  • 创建命令文档
    • dokerfile:
      from mysql:5.7
      #基础镜像
      
      maintainer lyh<471727250@qq.com>
      #维护者信息
      
      ENV MYSQL_ALLOW_EMPTY_PASSWORD no
      #不允许空密码登录
      
      ENV MYSQL_ROOT_PASSWORD=123456
      #root密码
      
      COPY setup.sh /mysql/setup.sh
      COPY schema.sql /mysql/schema.sql
      COPY privileges.sql /mysql/privileges.sql
      #所需文件
      
      CMD ["sh", "/mysql/setup.sh"]
      #启动命令
      
    • setup.sh
      #!/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`
      
      #重新设置mysql密码
      echo '4.开始修改密码....'
      mysql < /mysql/privileges.sql
      echo '5.修改密码完毕....'
      
      #sleep 3
      echo `service mysql status`
      echo `mysql容器启动完毕,且数据导入成功`
      
      tail -f /dev/null
      
    • schema.sql
      -- 创建数据库
      create database `docker_mysql` default character set utf8 collate utf8_general_ci;
      
      use docker_mysql;
      
      -- 建表
      DROP TABLE IF EXISTS test;
      
      CREATE TABLE test (
       `id` bigint(20) NOT NULL,
       `name` varchar(255) DEFAULT ""
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      
      -- 插入数据
      INSERT INTO test (`id`, `name`)
      VALUES
      (0209,'lyh');
      
    • privileges.sql
      use mysql;
      select host, user from user;
      -- 因为mysql版本是5.7,因此新建用户为如下命令:
      create user lyh identified by '123456';
      -- 将docker_mysql数据库的权限授权给创建的用户,密码为123456:
      grant all on docker_mysql.* to lyh@'%' identified by '123456' with grant option;
      -- 这一条命令一定要有:
      flush privileges;
      
  • 创建镜像
    sudo docker build -t mysql_lyh .
  • 创建容器
    sudo docker run --name msql -p 8000:2049 -d mysql_lyh
  • 查看日志
    sudo docker logs msql

    ???有问题 不对劲不对劲
    查看当前容器的运行状态:

    我那么大一个容器,它不见了!然后我就在怀疑人生搁置实验的时候,QQ群传来的喜讯,mysql镜像换5.7就可以了
  • 回炉
    • sudo docker pull mysql:5.7
    • 然后将dokerfile中from mysql改为from mysql:5.7
    • 删除上一个容器sudo docker rm 173
    • sudo docker build -t mysql_lyh .
    • sudo docker run --name msql -p 8000:2049 -d mysql_lyh

      创建容器正常成功
  • 验证
    • 进入容器
      sudo docker exec -it 8c8c31980a69 /bin/bash
    • root登录:
      mysql -u root -p
      输入密码
    • 进行一些查询操作
    • 退出,重新用自定义的用户和密码登录
  • 结束
posted @ 2020-04-22 13:46  方道友  阅读(263)  评论(0编辑  收藏  举报