zoukankan      html  css  js  c++  java
  • 系统综合实践 第2次实践作业 ——学习Dockerfile

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

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

    (1)镜像拉取

    • 拉取nginx镜像
    sudo docker pull nginx
    


    查看是否拉取成功

    sudo docker images
    

    • 运行nginx容器
    sudo docker run --name nginx-test -p 8080:80 -d nginx
    


    查看容器id

    sudo docker ps -a
    

    使用容器id进入容器

    sudo docker exec -it 1761814f6e4b /bin/bash
    

    (2)配置文件

    需要配置的文件有:default.conf、Dockerfile、index.html(自定义一个简单的网页),要将这三个文件放在一个目录下

    • 配置default.conf
      找到初始default.conf文件,复制出来到前面设置好的目录下修改配置
    cd /etc/nginx/conf.d
    cat default.conf
    

    两处需修改:
    ①修改监听窗口listen,我这里改为2208
    ②修改location为放置三个配置文件的目录

    • 配置Dockerfile
    FROM nginx
    #基础镜像
    MAINTAINER yezi
    #维护者
    COPY default.conf /etc/nginx/conf.d/
    COPY index.html /home/yeyanling/docker/nginx_web/
    
    WORKDIR /home/yeyanling/docker/nginx_web/
    #工作目录
    EXPOSE 2208
    #映射端口
    

    (3)镜像构建及容器运行

    build指令构建镜像(注意最后有一个英文句号)

    sudo docker build -t nginx_webtest .
    


    运行容器

    docker run --name my_nginx_web -p 2208:2208 -d nginx_webtest
    

    --name:以什么名字启动容器
    -p:将容器端口映射到服务器端口
    -d:需要启动的容器的名称

    打开浏览器进入http://localhost:2208/看看

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

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

    (1)拉取镜像

    选择拉取mysql镜像

    sudo docker pull mysql:5.7
    

    images指令查看

    docker images
    

    (2)配置文件

    需要的文件:Dockerfile、容器启动脚本setup.sh、mysql权限设置命令privileges.sql、导入数据的mysql脚本命令schema.sql共4个,也是要放在同一目录下

    • Dockerfile
    FROM mysql:5.7
    #基础镜像
    
    MAINTAINER yezi
    #维护者
    
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    ENV MYSQL_ROOT_PASSWORD=123456
    #不允许空密码登陆,设置初始密码
    
    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
    
    • mysql权限设置命令privileges.sql
    use mysql;
    select host, user from user;
    
    -- 对mysql5.7,新建用户为如下命令:
    create user yezi identified by '123456';
    
    -- 将docker_mysql数据库的权限授权给创建的yezi用户,密码为123456:
    grant all on docker_mysql.* to yezi@'%' identified by '123456' with grant option;
    
    flush privileges;
    
    • 导入数据的mysql脚本命令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` varchar(25) NOT NULL,
      `name` varchar(25) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- 插入数据
    INSERT INTO user (`id`, `name`)
    VALUES
        ('0208','yezi');
    

    (3)镜像构建及容器运行

    • 构建镜像mysql_test
    sudo docker build -t mysql_test .
    
    • 运行容器
    sudo docker run --name mysql_test -p 2208:2208 -d mysql_test
    

    ps指令查看容器

    sudo docker ps
    

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

    (4)mysql基本操作

    • 登录
      两种登录方式:
      ①用户名登录
      使用之前在配置文件中设置的用户名和密码登录,可以输入exit登出
    mysql -u yezi -p
    

    ②root登录
    输入的密码也是配置文件中设置的

    mysql -u root -p
    

    • 查看数据库
    show databases
    

    • 进入数据库
    use docker_mysql
    

    • 执行查表操作

    • 查看配置信息
    show variables
    

    (三) 心得体会

    上次做完实验直接虚拟机关机了,没有关闭docker,导致这次实验每执行一条docker指令后面都要带一句warning,搜了一下网上类似的问题不太能对得上,因为不影响指令执行想先做完实验再解决。希望以后都记得“随手关门”。
    对于这次实验的话,感觉要求写的有点简单,讲了几个指令但是不知道怎么用,所以一开始有点摸不着头脑无从下手的感觉。百度了不知道是不是关键字的原因,也没有类似的样例。所以做得比较晚,参考了前面交作业的大家的流程,包括在mysql版本的选择上也是看了群里大家出现的问题才选择的。希望下次作业要求或引导可以详细些。

  • 相关阅读:
    navicat 创建查询失败 can not create file
    使用Themeleaf时, HTML内嵌的JS代码需要注意< 和 >的问题
    window下查杀占用端口的进程
    Spring MVC的Rest URL 被错误解析成jsp, 导致404错误(XML方式下@Controller和@RestController需要配置<mvc:annotation-driving/>)
    一个本地DNS解析和mysql授权导致的Mysq连接失败问题(Access denied for user 'loan'@'kfcsdb1' (using password: YES))
    taglib报错The content of element type "taglib" must match "(tlib-version,...)
    cvc-complex-type.2.4.a: Invalid content was found starting with element 'display-name'
    在eclipse中运行spring web application时的异常: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    Spring3升级到Spring4时, 运行时出现找不到MappingJacksonHttpMessageConverter的情况
    如何在Spring MVC Test中避免”Circular view path” 异常
  • 原文地址:https://www.cnblogs.com/-yyl/p/12768919.html
Copyright © 2011-2022 走看看