第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 mynginx:/etc/nginx/conf.d/default.conf ./nginx/myweb

      • 修改conf文件

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

      • 修改完成后编辑dockerfile

        from nginx
        #base image
        
        copy default.conf /etc/nginx/conf.d/
        # cover file
        
        copy index.html /usr/my_html/
        # copy my file
        
        maintainer HuangYH <HuangYH723@outlook.com>
        #author
        
        expose 8080
        #expose port 8080
        
      • 构建镜像
        docker build -t mynginx ~/nginx/myweb/

      • 创建容器验证结果
        sudo docker run --name mynginxhyh -p 8080:2000 -d mynginx

        访问浏览器http://localhost:8080/致命404,怀疑是index.html文件内容问题,下面提示是nginx1.17,更感觉是html文件写歪了

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

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

  • 参考文档:dockerfile运行mysql并初始化数据

  • 首先,pull一个mysql镜像
    sudo docker pull mysql:5.7(看别人说加个5.7不会出问题)

  • 创建命令文档

    • dokerfile:

      from mysql:5.7
      #基础镜像
      
      maintainer HuangYH <HuangYH723@outlook.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
      (0723,'hyh');
      
    • privileges.sql

      use mysql;
      select host, user from user;
      -- 因为mysql版本是5.7,因此新建用户为如下命令:
      create user lyh identified by '123456';
      -- 将docker_mysql数据库的权限授权给创建的qyanzh用户,密码为123456:
      grant all on docker_mysql.* to hyh@'%' identified by '123456' with grant option;
      -- 这一条命令一定要有:
      flush privileges;
      
  • 创建镜像
    sudo docker build -t mysql_hyh .

  • 创建容器
    sudo docker run --name mysqlhyh -p 8000:2000 -d mysql_hyh

  • 查看日志
    sudo docker logs msql

    不运行,再输入一次

  • 验证

    • 进入容器
      sudo docker exec -it mysqlhyh /bin/bash

    • root登录:
      mysql -u root -p
      输入密码

    • 进行一些查询操作

    • 退出,重新用自定义的用户和密码登录

  • 结束

原文地址:https://www.cnblogs.com/HuangYH723/p/12771265.html