• 第2次实践作业


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

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

    •  直接运行nginix镜像(不需要pull,没有nginx的时候回自动从镜像库下载) 
    sudo docker run -it nginx /bin/bash

    • 运行完后复制容器id然后输入exit退出容器
    exit
    • 进入根目录
    cd /home/<username>

    •   从docker nginx中将default.conf复制到主目录(最后的.代表主目录),运行完后可以在主目录看见default.conf
    sudo docker cp b570ec53f841:/etc/nginx/conf.d/default.conf .

     

    •  修改default.conf
    sudo gedit default.conf

    •  将文件内的root路径修改为自己喜欢的路径,修改端口号为自己喜欢的端口号

    • 创建一个叫Dockerfile的文件,输入以下内容(其中index.html后的路径为上面的root路径,这两个地方必须保持一致)

    •  创建一个index.html文件,输入以下内容
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <body>
    
        <h1>Hello World!!!</h1>
    
        <p>This is a small test</p>
    
    </body>
    
    </html>

    •  三个文件全部创建完成,如下所示

    •  通过dockerfile构建镜像
    sudo docker build -t mynginx .

    • 运行mynginx

     

    •  第一次测试,出现未知问题

    •  查询日志,发现没有权限

    • 询问度娘(花了我5个多小时)
    • 先停止这在运行的mynigix
    sudo docker stop mynginx

    •  删除mynginx容器
    sudo docker rm mynginx

    •  以特权模式运行mynginx
    sudo docker run --privileged=true -p 7890:7890 -d mynginx

    •  再次测试(成功)

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

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

    实验2参考自https://www.jb51.net/article/115422.htm

    • 在主目录创建四个文件,分别是Dckerfile、schema.sql、setup.sh、privileges.sql
    #dockerfile
    FROM mysql:5.7
    #不允许空密码登录
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    
    #root密码
    ENV MYSQL_ROOT_PASSWORD=123456
    
    maintainer xuxuxu
    #将所需文件放到容器中
    COPY setup.sh /mysql/setup.sh
    COPY schema.sql /mysql/schema.sql
    COPY privileges.sql /mysql/privileges.sql
     
    #设置容器启动时执行的命令
    CMD ["sh", "/mysql/setup.sh"]
    --schema.sql
    -- 创建数据库 create database `docker_mysql` default character set utf8 collate utf8_general_ci; use docker_mysql; -- 建表 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(15) NOT NULL, `name` varchar(25) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- 插入数据 INSERT INTO `user` (`id`, `name`) VALUES (71708131,'xuhongjian');
    #setup.sh
    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
    
    
    -- privileges.sql
    use mysql;
    
    select host, user from user;
    
    -- 因为mysql版本是5.7,因此新建用户为如下命令:
    
    create user xuxuxu identified by '123456';
    
    -- 将docker_mysql数据库的权限授权给创建的qyanzh用户,密码为123456:
    
    grant all on docker_mysql.* to xuxuxu@'%' identified by '123456' with grant option;
    
    -- 这一条命令一定要有:
    
    flush privileges;
    • 创建镜像docker-mysql
    sudo docker build -t docker-mysql .

    • 根模式运行mysql
    sudo docker run --name docker-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d docker-mysql

    • 查看运行日志,如果有问题根据日志修改错误

    • 成功后,通过进入容器在命令行验证
    sudo docker exec -it <容器ID> /bin/bash

    •  使用privileges.sql注册的用户名登录,并输入密码
     mysql -u <user> -p

    •  转到docker-mysql数据库
    use docker_mysql;

    •  查询数据库中的表格信息
    show tables;

    • 使用sql查询
    select * from user ;

     3.实验心得

           这次的实验比较考验学习能力,如果没有对dockerfile的原理有一定的了解的话,可能会做的比较艰难。刚开始即使有同学的博客作为参考,也出了各种问题,但是知道怎么使查看日志后才有了很大的改善(不得不说英语真的是很重要)。

     

  • 相关阅读:
    postgresql-uuid重复问题
    postgresql-revoke 回收权限及删除角色
    postgresql
    postgresql -ALTER ROLE
    postgresql-行级安全-RLS
    postgresql 列级安全,列权限
    postgres 只读账号
    postgresql 对未来的表赋权限
    postgres权限管理
    特定元素个数的数组作为函数入参的两个方法
  • 原文地址:https://www.cnblogs.com/xhongj/p/12766937.html
Copyright © 2020-2023  润新知