• 补交:第2次&第5次实践作业


    第2次实践作业

    • 上一次作业同学们实现了docker环境的安装和基本配置,已经能够从docker的官方镜像仓库中拉取镜像,初步实现了入门。然而,从官方仓库拉取的镜像是最简单的镜像,在实际应用中经常需要根据需求额外修改镜像,这就涉及到了镜像的定制。在docker中我们可以使用Dockerfile文件实现自定义镜像,本次作业需要完成2个Dockerfile编写实践,掌握编写Dockerfile文件的基本方法。

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

    • 拉取nginx镜像

    • 在主目录中创建docker文件夹,以存放Dockerfile等配置文件

    • 通过命令 docker run --name nginxtest -d nginx
      启动一个名为nginxtest的容器

    • 将容器内的default.conf文件(nginx配置文件)拷贝到docker目录,并修改配置文件中的监听端口和web存放目录

    • 编写Dockerfile文件和index.html文件

    • 构建自定义镜像

    • 启动容器并进入

    • 查看网页

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

    • 拉取mysql5.7镜像

    • docker_mysql目录下的四个文件

    • Dockerfile:用来构建自定义镜像
      setup.sh:用来初始化sql,并导入sql配置语句
      priviliges.sql:用来新建数据库用户及分配表的权限
      schema.sql:用来新建数据库,新建表并插入数据

    四个文件的配置及说明如下:

    Dockerfile

    FROM mysql:5.7#不允许空密码登录
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    #设置root密码
    ENV MYSQL_ROOT_PASSWORD admin
    
    #拷贝所需文件
    COPY setup.sh /mysql/setup.sh
    COPY schema.sql /mysql/schema.sql
    COPY privileges.sql /mysql/privileges.sql
    
    #设置容器启动时执行的命令
    CMD ["sh","/mysql/setup.sh"]
    
    #设置暴露端口
    EXPOSE 3306
    

    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`
    
    #增加用户docker
    mysql < /mysql/privileges.sql
    echo '成功添加用户docker'
    
    #sleep 3
    echo `service mysql status`
    echo `mysql容器启动完毕,且数据导入成功`
    
    tail -f /dev/null
    

    schema.sql

    create database `S_C` default character set utf8 collate utf8_general_ci;
    
    use S_C;
    
    DROP TABLE IF EXISTS `S`;
    
    CREATE TABLE `S`(
    `Sno` varchar(255) NOT NULL,
    `Sname` varchar(255) NOT NULL,
    `Sex` varchar(5) NOT NULL,
    CHECK(`Sex`='男' OR `Sex`='女'),
    PRIMARY KEY(`Sno`)
    );
    
    INSERT INTO `S`(`Sno`,`Sname`,`Sex`) VALUES('031702533','吕瑞峰','男');
    

    privileges.sql

    use mysql;
    select host, user from user;
    create user docker identified by '123456';
    -- 将S_C数据库的权限授权给创建的用户docker,密码为123456:
    grant all on S_C.* to docker@'%' identified by '123456' with grant option;
    -- 这一条命令一定要有:
    flush privileges;
    
    • 构建自定义镜像

    • 运行容器并查看日志

    • 使用数据库中的docker身份登录并查看数据表内容

    第5次实践作业

    • 本次作业为Python专题。Python是将练习使用docker容器运行Python程序。Python是很常用的程序设计语言,但是Python程序的运行依赖于提前的系统环境配置,为了降低系统配置的复杂度,同时减小资源开销,将系统环境容器化是一种解决方案。请根据Python官方镜像的镜像说明,自定义Python镜像文件,将Python程序运行起来。

    1.目录与配置文件

    Dockerfile

     #DockerfileFROM python:3
    
     #工作路径
    WORKDIR /usr/src/app    
    
     #拷贝文件
    COPY requirements.txt ./    
    
     #根据requirement.txt安装项目所需包
    RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.douban.com/simple 
    
     #指定容器启动时默认要运行的程序
    CMD [ "python", "./hello.py" ]
    

    requirments.txt

    #requirement.txt
    PyMySQL
    opencv-python
    

    hello.py

    print("hello world!")
    

    date.py

    import calendar
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy,mm))
    

    mysql.py

    import pymysql
    class Mysql():
        def __init__(self,ipaddress,urname,pd,db_name,table_name):
            self.ip=ipaddress
            self.username=urname
            self.password=pd
            self.db_name=db_name
            self.table_name=table_name
        def connect(self):
            self.conn=pymysql.connect(self.ip,self.username,self.password,self.db_name)
            if(self.conn!=None):
                    print("yes")
            self.cursor=self.conn.cursor()
        def createtable(self,sql):
            self.cursor.execute('drop table if exists %s;' %self.table_name)
            self.cursor.execute(sql)
        def insertdata(self,sql):
            try:
                self.cursor.execute(sql)
                self.conn.commit()
            except :
                self.conn.rollback()
        def selectall(self):
            sql='select * from %s' %self.table_name
            self.cursor.execute(sql)
            return self.cursor.fetchall()
        def updatedata(self):
            try:
                self.cursor.execute(sql)
                self.conn.commit()
    
            except :
                self.conn.rollback()        
        def deletedata(self):
            try:
                self.cursor.execute(sql)
                self.conn.commit()
            except :
                self.conn.rollback()
        def close(self):
            self.conn.close()
    
    ip='lnmp_mysql-container'          #容器名
    username='root'         #用户名
    password='123'      #密码
    db_name='myDB' #数据库名
    table_name='Stu'    #表名
    db=Mysql(ip, username, password, db_name,table_name)
    db.connect()
    
    sql="""create table Stu (
           id varchar(10) primary key,
           name varchar(20)
            );"""
    db.createtable(sql)
    sql1="insert into Stu values(123,'abc');" 
    sql2="insert into Stu values(456,'bcd');" 
    db.insertdata(sql1)
    db.insertdata(sql2)
    print(db.selectall())
    
    db.close()
    

    opencv.py

    import cv2 as cv
    
    img1 = cv.imread("photo1.png")
    img2 = cv.imread("photo2.png")
    
    result = cv.addWeighted(img1,0.3,img2,0.3,0)  
    cv.imwrite('re.png', result)
    print("success!")
    

    2.生成镜像

    docker build -t mypython .
    

    3.项目构建

    • 简单helloworld

    • 日历输出

    • mysql数据库操作&&查看数据库

    • opencv

    总结

    • 补做的时候参考了其他同学的经验,还是很有帮助的,遇到的问题主要是ubuntu系统内存爆满了,于是重新格式化再做了一遍。
  • 相关阅读:
    ACDream
    HDU
    拼音码和五笔码生成规则
    XML与DataTable相互转换
    如何给gridControl动态的添加合计
    SqlBulkCopy将DataTable中的数据批量插入数据库中
    截取中间字符
    将Excel表格数据转换成Datatable
    DevExpress GridControl 使用方法技巧 总结 收录整理
    C#小技巧
  • 原文地址:https://www.cnblogs.com/ruifeng1/p/13193863.html
Copyright © 2020-2023  润新知