在docker容器中部署网络程序进行通信实验
在docker容器中部署网络程序进行通信实验语言:python1.实验目的:这次试验是在docker容器中部署网络程序,初定为写一个简单的web服务器并部署到docker上,然后让其他主机访问。开发语言使用python语言。2.实验过程:(1)搭建python开发环境注意,实验是要在docker容器中进行的,所以是在docker容器内安装环境的。首先新打开一个ubu...
在docker容器中部署网络程序进行通信实验
语言:python
1.实验目的:
这次试验是在docker容器中部署网络程序,初定为写一个简单的web服务器并部署到docker上,然后让其他主机访问。开发语言使用python语言。
2.实验过程:
(1)搭建python开发环境
注意,实验是要在docker容器中进行的,所以是在docker容器内安装环境的。首先新打开一个ubuntu容器,并进入
然后输入以下命令安装python3.6
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
下载安装好后要修改系统默认python版本,这个ubuntu镜像自带的有一个python3.4.3,不好用,用管他。执行以下命令,建立软链接:
cd /usr/bin
rm python
ln -s python3.6m python
进一步检查是否安装成功:
(2) 在linux环境下,使用python3.6写一个web简单服务器
新建一个文件夹,把相应文件放入:
然后新建一个.html文件和.py文件,分别输入以下代码:
test.html
<html>
<body>
<h1>test</h1>
</body>
</html>
webtest.py
import http.server as hs
import sys, os
class ServerException(Exception):
#空语句什么都不做,保证结构完整性
pass
#设计BaseHTTPRequestHandler子类RequestHandler
class RequestHandler(hs.BaseHTTPRequestHandler):
#重写BaseHTTPRequestHandler类里的方法
def send_content(self, page, status = 200):
self.send_response(status)
self.send_header("Content-type", "text/html")
self.send_header("Content-Length", str(len(page)))
self.end_headers()
self.wfile.write(bytes(page, encoding = 'utf-8'))
def do_GET(self):
#这里要处理两个异常,一个是读入路径时可能出现的异常,
#一个是读入路径后若不是文件,要作为异常处理
try:
#os.getcwd()获取当前工作目录,self.path是Handler得到的路径
full_path = os.getcwd() + self.path
# 如果路径不存在
if not os.path.exists(full_path):
#触发异常
raise ServerException("'{0}' not found".format(self.path))
#如果该路径是一个文件
elif os.path.isfile(full_path):
self.handle_file(full_path)
#如果该路径不是一个文件
else:
#触发异常
raise ServerException("Unknown object '{0}'".format(self.path))
except Exception as msg:
self.handle_error(msg)
def handle_file(self, full_path):
try:
#读取文件
with open(full_path, 'r') as file:
content = file.read()
self.send_content(content,200)
except IOError as msg:
#处理文件时出错
msg = "'{0}' cannot be read: {1}".format(self.path, msg)
self.handle_error(msg)
Error_Page = """\
<html>
<body>
<h1>Error accessing {path}</h1>
<p>{msg}</p>
</body>
</html>
"""#这个地方不是注释,而是一段字符串
def handle_error(self, msg):
#错误界面文本
content = self.Error_Page.format(path= self.path,msg= msg)
self.send_content(content, 404)
if __name__ == '__main__':
httpAddress = ('', 8030)#ip地址省略代表本机
httpd = hs.HTTPServer(httpAddress, RequestHandler)
httpd.serve_forever()
(3)测试:
输入python webdemo.py 运行该服务器,之后程序处于等待用户访问阶段。
在本虚拟机上另开一个终端,由于这个docker容器是采用的桥接模式,因此,本虚拟机和docker容器之间是可以互通的。利用curl命令进行访问。容器ip为172.17.0.2
访问成功得到结果。
同时服务器端也有响应:
打开浏览器访问也是可以的:
注:以上所有操作均在作者在网上搜集资料后,在个人电脑上实验成功,若读者实验时失败,可能由一些未知因素导致,可与作者联系。编写的教程可能由于疏忽出错,请与作者联系。
更多推荐
所有评论(0)