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

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

1. 从 docker hub拉取nginx作为基础镜像

sudo docker pull nginx

此时sudo docker images,可以看到镜像拉取成功

2. 创建并运行容器

  • 创建容器

    sudo docker run -it nginx /bin/bash

  • 查看容器的工作目录, 可见容器工作在根目录下

    pwd

3. 修改nginx容器的配置文件

  • 查看容器的ID

    sudo docker ps

  • 复制default.conf文件到根目录下

    sudo docker cp <容器ID>:/etc/nginx/conf.d/default.conf .

    此时可以看到虚拟机根目录下已经出现了default.conf文件(此时文件的权限为只读权限)

  • 修改文件的权限为可读写

  • 修改 default.conf 文件

    listen是监听的端口号,从80改为了1127

    root/usr/share/nginx/html改为/myweb

4. 创建一个自己的html文件

5. 创建一个dockerfile文件

6. 构建自己的定制镜像

进入dockerfile所在的目录内打开终端

sudo docker build -t mynginx .

7. 运行一个容器查看效果

sudo docker run --name my_nginx -p 8888:1127 -d mynginx

8. 在浏览器查看8888端口,是自己之前写的html文件

二、实现一个自定义的数据库容器服务

  • 首先pull一个mysql镜像,5.7版本

    sudo docker pull mysql:5.7

  • 之后要创建四个文件,分别是Dockerfile,setup.sh(启动脚本),schema.sql(创建数据库文件),privileges.sql(权限文件)

    • dokerfile:

      #基础镜像
      FROM mysql:5.7
      
      #维护者信息
      MAINTAINER yxy
      
      #设置不允许空密码登陆,且设置root密码
      ENV MYSQL_ALLOW_EMPTY_PASSWORD no
      ENV MYSQL_ROOT_PASSWORD=root1999
      
      #将所需文件放到容器中
      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` varchar(20) NOT NULL,
        `name` varchar(40) DEFAULT NULL,
        `sex` varchar(10) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      
      -- 插入数据
      INSERT INTO test (`id`, `name`, `sex`)
      VALUES
      ('031702108','yxy','female');
      
    • privileges.sql:

      use mysql;
      select host, user from user;
      -- 因为mysql版本是5.7,因此新建用户为如下命令:
      create user docker identified by '111111';
      -- 将docker_mysql数据库的权限授权给创建的docker用户,密码为111111:
      grant all on docker_mysql.* to docker@'%' identified by '111111' with grant option;
      -- 这一条命令一定要有:
      flush privileges;
      
  • 创建镜像,在Dockerfile所在的文件夹中打开终端,运行命令

    sudo docker build -t yxymysql .

  • 运行容器

    sudo docker run --name sql -p 3306:3306 -d yxymysql

  • 查看是否创建成功

    docker ps

  • 进入容器

    docker exec -it [容器id] /bin/bash

  • 使用指定用户名和密码进入数据库

    mysql -u docker -p

  • 查看已经存在的数据库

    show databases;

  • 进入到 docker_mysql 数据库

    use docker_mysql

  • 查看 test 表中的数据

    select * from test;

  • 使用exit退出登录,然后使用root登录

    mysql -u root -p

  • 查看数据库

    show databases;

  • 查看mysql的配置信息

    show variables;

  • 使用exit退出这个容器

  • 查看日志信息

    sudo docker logs sql

  • 查看这个容器的信息

    sudo docker inspect sql

posted @ 2020-04-24 18:00  大口吃肉  阅读(302)  评论(0编辑  收藏  举报