20175104 李屹哲 基于Windows的信息安全专业导论学习容器的构建 课程设计个人报告

北京电子科技学院 《信息安全工程技术应用》课程设计报告

 基于Windows的信息安全专业导论学习容器的构建

20175104 李屹哲

目录

  • 列出自己的贡献

  • 容器设计过程

列出自己的贡献

  • 因为我们每个人都部署了信息安全专业导论学习容器,工作量一致,在构建容器过程中,小组成员互相学习讨论,相互借鉴,终于完成了本次课程设计,所以排名不分先后

  • 20175104李屹哲:完成容器图形化界面

个人构建容器过程

本次课设老师要求的内容已全部完成,除此之外还完成了拓展内容-配置anaconda环境的任务。

1. 安装docker

  • 首先比较重要的就是要启用hyper-v,开启虚拟化,在启用或关闭windows功能中勾选这项功能。之后就可以重启就可以

  • 注意一定在Windows 10 pro下进行本次实验,如果主机不是windows 10 pro的话,可以安装虚拟机使用docker

  • 接下来安装docker,安装官方最新版本就行,不然可能会出现无法登录的问题

  • 接下来配置一下镜像加速器和各项操作

  • 这里首先可以使用阿里云的镜像加速,在阿里云搜索镜像与容器服务,然后找到里面的加速地址复制就可以

  • 然右击docker图标,选择setting

  • 接下来在把复制过去的加速地址复制在registy-mirrors处即可,下面的experimental后面的参数改成true。(不然可能后面无法复制镜像)

  • 之后就可直接在命令行输入指令 docker --version docker version 之后检验安装

  • 后使用指令docker run hello-world 运行一下hello-world容器

回到顶部

2. 构建ubuntu容器&构建python环境

  • 这里直接使用指令docker run -it ubuntu bash 安装成功后

  • 运行一下ls指令验证一下安装是否成功,发现成功显示当前目录下文件,证明构建成功

  • 此处构建python环境是参考此篇链接进行构建,这篇文章给了很多启发;因为windows下的开发环境难以配置,可以做基于我们下载的操作系统容器下构建开发环境,一举两得

  • 由于链接中作者已经上传镜像,所以我们可以运行指令拉取镜像 docker pull shenzhongqiang/python-dev:version1

  • 接下来我们直接运行容器 docker run -it shenzhongqiang/python-dev:version1 
  • 然后使用指令 python hello.py 可执行python示例程序。

  • 使用指令 touch py-test.py  

  • 使用指令 vim py-test.py 编辑代码

  • 程序代码如下,这是一个输出9*9乘法表的程序

for i in range(1,10):
    for j in range(1,10):
        print("%d*%d=%2d" % (i,j,i*j),end=" ")
    print ("")
  • 使用指令运行代码python py-test.py 运行测试代码

回到顶部

3. 构建ubuntu容器&构建python环境

  • 这里的启发是由于vscode是图形化界面的开发程序,如果构建的话,一定下载对应图形化的系统。而且最恐怖的是如果不是图形化的容器,无法使用gedit和leafpad,只能使用vim编辑文本,这将大大增加编程难度。所以这里正好这两天看到这篇资料,因此这里,让我产生了浓厚兴趣。配置过程十分简单,所占空间很小,而且最便捷的是它是部署在了服务器上,丝毫不占电脑的内存,简直是开发的一大利器。、

  • 这里的机制是通过远程访问容器达到这一目的
  • 在基于你安装了docker之后,将这里的设置切换一下。切换为Linux container(指导书一开始默认的设置,如果你没有更改的话就不用切换了)

  • 下载一个TightVNC,下载完成后安装即可。

  • 然后运行指令docker run -p 6080:80 -p 5900:5900 dorowu/ubuntu-desktop-lxde-vnc:xenial 即可下载和运行图形化的ubuntu容器

  • 这里我们做的是启动容器并映射端口,这里5900:5900意思是将主机的5900端口映射到container的5900端口.6080:80也同理;这里我们要注意一下,我们可以通过通过浏览器地址

  • 启动后然后在TightVNC Viewer中输入远程连接地址 127.0.0.1:5900即可取得连接

  • 这里可以看到我们成功启动了图形化的ubuntu界面

  • 接下来就可以按照正常步骤配置,ubuntu容器,首先可以更新一下下载源

  • 使用leafpad(内置)修改/etc/apt/sources.list的内容为下面的内容,将下载源更新位163的源
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
  • 接下来运行指令apt-get update  
  • 更新环境后,安装python环境即可使用这两条指令安装python环境apt install python3.6 &apt install python3-pip 

  • 执行完这两条指令,可以使用指令touch py-test.py  新建python文件

  • 然后用leafpad编辑文本leafpad py-test.py  

  • 这里我们随便用一段测试代码试一下,指令为python py-test.py 

  • 程序功能:暂停一秒输出,并格式化当前时间

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
time.sleep(1)
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

  • 这里运行成功证明我们成功构建了python环境

回到顶部

4. 构建vscode环境

  • 这里是基于我第一次实验拓展过程中过程中,发现vscode是要基于图形化界面部署的,上一次部署图形化界面的ubuntu以及在其下属部署python环境的具体过程已经在拓展博客中给出,在这里给出博客链接

  • 这里我们重新启动该容器使用指令docker ps -a显示所有容器,

  • 这里发现我们上次运行的容器id后,使用指令docker start b86f44add4d3(容器id) 继续运行容器

  • 成功运行后用TNC VIWER打开图形化ubuntu容器,使用内置的浏览器下载vscode的安装包地址为:https://code.visualstudio.com

  • 下载完成后是一个dpkg文件使用指令dpkg -i code_1.44.2-1587059832_amd64.deb  进行安装

  • 安装完成后使用指令sudo code . --user-data-dir='.' 运行指令,也可以直接在左下角主菜单找到vscode

  • 我们这里给vscode装上python以及c/c++的插件以及code runner就可以编译和调试这两种类型的程序了也,可以安装中文环境实现更加方便进行编译。

  • 这里要注意一定要安装apt-get install gdb 这里简直是血的教训,gdb是调试程序,我一开始没有安装调试的时候一直崩溃,我差点也崩溃

  • 这里我们尝试编译一下c++程序,这里有较为详细的介绍怎么构建调试环境

  • 这里有种简便的方法就是安装c/c++ complie run这个插件就可以直接新建c文件进行调试

  • 安装好之后就可以直接按F6进行编译运行,要方便许多

  • 编译运行python代码,这里由于python的配置较为复杂,这篇链接详细的讲述了怎么调试python

  • 最终结果为a,b间隔一秒输出

回到顶部

5. 安装Pep/9及运行Pep/9测试代码

  • 由于pep/9环境无法配置,按照老师要求本周在Windows环境下配置pep/9环境

  • 进入官网下载pep/9windows版,下载安装即可使用
  • 该应用程序用C ++编写,并使用Digia Plc提供的Qt Creator IDE与Qt 5开发环境一起编译。这个程序包含Pep / 9,Pep / 9 CPU,Pep / 9 Terminal和Pep / 9 Micro。

  • 测试1:打印:Hi,在在Source Code区输入汇编指令

  • 执行指令Build→Run Source

LDBA 0x0048,i   //将“H”加载到计数器
STBA 0xFC16,d   //将计数器的内容输出
LDBA 0x0069,i   //将“i”加载到累计数器
STBA 0xFC16,d   //将计数器的内容输出
.END            //停止

  • 可以在Object Code区观察到汇编指令对应的机器指令。其对应的指令如下

D0 00 48   //把 H 放入计数器
F1 FC 16   //打印计数器内存储的字节
DO 00 69   //把 i 放入计数器
F1 FC 16   //打印累计数器内存储的字节
zz         //结束标识符
  • 测试2:倒序输出字节,这里直接使用16进制机器指令

  • 在Object Code区输入汇编指令,Build→Run Object

D1 FC 15 F1 00 13 D1 FC 15 F1 FC 16 D1 00 13 F1 FC 16 00 zz 

  • 代码解析

D1 FC 15  //将输入设备中的第一个字符读入计数器
F1 00 13  //将字符从计数器存储到内存中
D1 FC 15  //将第二个字符从输入设备读入计数器
F1 FC 16  //将第二个字符打印到输出设备
D1 00 13  //从内存中加载第一个字符
F1 FC 16  //打印第一个字符到输出设备
zz        //结束标识符
  • 运行结果

回到顶部

6. 拓展内容-安装并配置anaconda

  • Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。Conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,所以也称为Python的一种发行版。

  • 首先去官网下载anaconda

  • 然后下载完后是一个脚本文件命令行里进入文件夹执行指令 bash Anaconda3-2020.02-Linux-x86_64.sh 安装文件

  • 安装过程中,看到提示“In order to continue the installation process, please review the license agreement.”(“请浏览许可证协议以便继续安装。”),点击“Enter”查看“许可证协议”。

  • 在“许可证协议”界面将屏幕滚动至底,输入“yes”表示同意许可证协议内容。然后进行下一步。

  • 安装过程中,提示“Press Enter to confirm the location, Press CTRL-C to cancel the installation or specify an alternate installation directory.”(“按回车键确认安装路径,按’CTRL-C’取消安装或者指定安装目录。”)如果接受默认安装路径,则会显示“PREFIX=/home//anaconda3”并且继续安装。安装过程大约需要几分钟的时间。 

  • 建议:直接接受默认安装路径。

  • 安装器若提示“Do you wish the installer to prepend the Anaconda install location to PATH in your /home//.bash_profile ?”(“你希望安装器添加Anaconda安装路径在/home//.bash_profile文件中吗?”),建议输入“yes”。

  • 注意:路径/home//.bash_profile中“”即进入到家目录后你的目录名。如果输入“no”,则需要手动添加路径。添加export,PATH="//bin:$PATH"在“.bashrc”或者“.bash_profile”中。其中,“”替换为你真实的Anaconda安装路径。当看到“Thank you for installing Anaconda!”则说明已经成功完成安装。

  • 之后介绍一下指令

  • 首先验证一下安装

  • 输入 anaconda-navigator 运行图形化节面,熟悉图形化界面的人可以用图形化界面管理python环境

  • 然后更换一下镜像源执行指令 leafpad ~./condarc 

  • 然后添加清华源https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 

  • 建立新的python环境的常用指令

conda create --name <env_name>  <list of packages>    创建新环境
conda create --name python2 python=2.7        创建名为python2的运行环境,并安装pandas包及其依赖包
conda create --name testpy36 python=3.6     创建名为testpy36的运行环境,并安装anaconda集合包(conda默认环境)
 
conda env remove --name <env_name>    删除环境
conda env list                    显示所有的环境
 
conda info                        显示当前安装的conda信息
conda info --envs                 显示所有运行环境
conda activate <env_name>    激活(进入)环境
conda deactivate             去激活(退出)当前环境
onda env export > BackupEnv.yaml    将当前运行环境的package信息导出到名为BackupEnv的YAML文件
conda env create --force BackupEnv.yaml   使用YAML文件创建运行环境

  • 安装一些python包,这里我们选择安装numpy、matplotlib两个包,指令为 conda install numpy  、 conda install matplotlib  

  • 安装好了包之后可以在输入python

  • 然后直接执行代码,也可以编写 成.py文件执行

  • 这里是个散点图程序

import numpy as np  
import matplotlib.pyplot as plt
x = np.random.normal(0,1,500)
y = np.random.normal(0,1,500)
plt.scatter(x,y,s=50,color='blue',alpha=0.5) #s指点大小,alpha指透明度
plt.show()
  • 运行结果为

回到顶部

7. 容器打包并上传

  • 进行容器打包及上传的目的即是可以让所有人共享你的容器,也可以让他人进行下载,用这种方式,可以提交自己最终的结果。

  • 首先先开通仓库,可以通过docker hub的官网直接申请,也可以在通过命令行里直接申请(记住打包上传容器要先登录)。

  • 点击repositories,之后可以看到要给自己建的仓库起个名字(要记住),然后接下来就可以直接用了。

  • 然后使用指令 docker ps -a 可以看到现有容器

  • 这里我们随便讲一个容器打包成镜像

  • 使用指令docker commit 23ab96c31156 (容器id) lyz20175104(仓库名称)/ubn(生成的镜像名称):v1(tag)将容器打包成一个镜像

  • 然后可以看镜像 docker images 查看新生成的镜像

  • 使用指令 docker push lyz20175104/ubn:v1 将镜像上传(要耐心等待,耗时很长,恐怕是由于网络原因)

  • 最终在自己的仓库中也可以看到这一镜像,使用docker pull lyz20175104/ubn:v1 ,即可将我上传的镜像pull到自己的docker里面,此处,我才真正体会到docker的便捷性,可以真正做到如果自己部署好容器,打包后上传,其他人就可以直接拉取你上传的镜像进行使用

  • 最终我们上传了三个容器(v1,v2,v3),分别对应着三个星期的进程

  • 最终构建的容器为v3,在windows下安装了dockers之后,使用指令 docker pull lyz20175104/ubn:v3  可以拉取镜像,然后使用指令docker run -p 6080:80 -p 5900:5900  lyz20175104/ubn:v3,并下载TNC viwer按上文运行方式就可以运行我构建的信息安全导论容器了

回到顶部

列出设计中遇到的问题及解决方法

  • 设计过程中并未遇到过多问题,pep/9无法配置算是一个问题,在咨询过老师之后,发现的确是有问题,于是老师要求我们在主机上安装并运行示例程序即可

回到顶部

列出调试过程中遇到的主要问题,并说明解决方法

1. 虚拟机无法直接打开hyper-v

  • 要在win10虚拟机的文件夹中找到vmx文件在其中加入下面三行内容
hypervisor.cpuid.v0 = "FALSE"
mce.enable = "TRUE" 
vhv.enable = "TRUE"

  • 之后就可以顺利启用hyper-v功能了

2. 镜像下载速度过慢

  • 来配置一下镜像加速器

  • 这里首先可以使用阿里云的镜像加速,在阿里云搜索镜像与容器服务,然后找到里面的加速地址复制就可以。

  • 右击docker图标,选择setting

  • 接下来在把复制过去的加速地址复制在registy-mirrors处即可,然后点击apply&restart启用更改

3. vscode调试出错

  • 解决方式很简单:运行指令 apt-get install gdb 安装gdb后就能进行调试

回到顶部

设计体会及收获

   Docker 的构想是要实现“ Build , Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging )、分发( Distribution )、部署(Deployment )、运行( Runtime )生命周期进行管理,达到应用组件级别的“ 一次封装,到处运行” 。这里我对docker的理解就是,用较小的存储空间来实现构建计算机平台的各类编程开发环境,其对系统资源需求较小,比如我在下载ubuntu的镜像,其存储只有惊人的20M左右,即可实现编程及开发环境。可以说是十分的便利了;而且,方便应用迁移,如果在一台计算机上进行正常的Java web+mysql的编程,那么另一台主机的人如果想跑这段代码,则需要有相同的环境,不过如果有了docker,则可快速的利用相同的容器进行运行及开发。而且docker的运行相较虚拟机也会快很多。所以,作为信息安全导论的学习容器来说docker可以说是很理想的了。在本次课设中我们组由于没有实验指导以及网上过多教程,还由于docker本身对Windows系统的限制,以及windowws系统下的各项限制,导致本次课设的前期摸索的过程较为艰难,不过明确了思路之后,接下来的过程可以说基本上顺风顺水。本次课设可以说掌握了一个全新的使用虚拟系统的方法。以及包括在构建编程环境过程中对这些环境也有了一定了解。所以说收获颇多吧。也感谢老师给出这一次课设的机会。

回到顶部

参考资料(图书、网址…)

参考的网址:

Windows中,使用VNC远程连接Docker中的镜像桌面系统

Windows上做Python开发太痛苦?Docker了解一下

Get started with Docker for Windows

vmware fusion安装Win10启动虚拟机“无法安装Hyper-V, 某个虚拟机监控程序正在运行”

参考书籍:

Docker技术入门与实战 第3版

Computer.Science.Illuminated.7th

回到顶部

posted @ 2020-05-02 11:56  20175104李屹哲  阅读(104)  评论(0编辑  收藏  举报