最近断断续续的写了几篇
Python
的学习心得,因为有开发经验的同窗来讲上手仍是比较容易,并且Python
提供了强大的第三方库,作一个小的示例程序仍是比较简单,这不我以前就是针对Python
的爬虫作了好几个程序,爬取了几个图片网站的图片,并保存到本地。html
写了几个
Python
爬虫后,想试试Python web
服务怎么写。随手百度了下,写了以下代码python
import socket HOST,PORT = 'localhost',8080 listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) listen_socket.bind((HOST, PORT)) listen_socket.listen(1) print('Serving HTTP on port %s ...' % PORT) while True: client_connection, client_address = listen_socket.accept() request = client_connection.recv(1024) print(request) http_response = b""" HTTP/1.1 200 OK\r\n \r\n Hello,world! """ client_connection.send(http_response) client_connection.close()
python xx.py
启动web服务,以下图所示localhost:8080
,而后回车,能够看到页面显示上述代码比较测试过程比较简单,主要是为了演示怎么写一个
Python web
服务,这个演示流程存在一个比较大的问题,就是每当服务须要重启的时候咱们须要关闭命令行工具,而后从新启动,这个过程太繁琐了,怎么可让它程序化呢!解决办法也是有的,那就是Docker
,所以我决定学习一下开源的应用程序引擎Dockerlinux
Docker入门总结web
- go语言实现
- Build、Ship and Run App,AnyWhere
- 一次封装、处处运行
如上图,Docker设想是交付运行环境如同海运,OS如同一个货轮,每个在OS基础上的软件都如同一个集装箱,用户能够经过标准化手段自由组装运行环境,同时集装箱的内容能够由用户自定义,也能够由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只须要选择合适的积木组合,而且在最顶端署上本身的名字(最后一个标准化组件是用户的app)。docker
了解Docker,首先须要知道LXC是什么。LXC是指Linux内核(尤指命名空间和CGroup)的一个特性,它容许其余一些沙盒进程运行在一块相对独立的空间,并能方便的控制他们的资源调度。数据库
Docker 底层是基于LXC实现的,它提供了一系列更强的功能。Docker定义了一种新的格式,将应用和其依赖环境所有打包到一个单一对象中,这个对象能够在任何安装有Docker的机器上共享,而且执行这个对象的效果都是同样的ubuntu
可移植的跨机器部署:LXC实现了进程级的沙盒封装,而Docker为移植部署定义了规范,使用了抽象层的概念,把机器配置打包进了容器,这样使得进程和环境一块儿进行了分发windows
Docker 镜像能够看做是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。centos
镜像不包含任何动态数据,其内容在构建以后也不会被改变。浏览器
容器(Container)的定义和镜像(Image)几乎如出一辙,也是一堆层的统一视角,惟一区别在于容器的最上面那一层是可读可写的。
容器 = 镜像 + 读写层。
Docker 仓库是集中存放镜像文件的场所。
仓库(Repository)和仓库注册服务器(Registry),一个 Docker Registry 中能够包含多个仓库(Repository),每一个仓库能够包含多个标签(Tag),每一个标签对应着一个镜像。
下图能够直观的看到Docker的结构。Docker 使用 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。
Docker 客户端和服务端能够运行在一台机器上,也能够经过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通讯。
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上能够跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机咱们通常称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
宿主机(Host)给客户端(Guest)提供硬件资源虚拟机是经过
Hypervisor
实现的,根据根据Hypervisor
的实现方式和所处的位置不一样,虚拟化又分为两种
下边咱们用使用比较多的有宿主机用Hypervisor实现方式的虚拟机VMWare Station
和容器进行比较,方便咱们理解
Docker
是基于Linux 64bit的,没法在32bit的linux/windows/unix环境下使用,并且Docker
是基于LXC实现的,所以容器的宿主机必须是Linux系统。
Win 10之前的系统没有Hyper-v技术,所以若是想使用Docker
就须要安装Docker Toolbox工具,Win 10系统能够直接安装Docker for Windows这个包,而后使用。
Windows系统上直接使用
Docker
,发现问题仍是挺多,所以想到了另一种方式,如今windows系统上安装Linux 64bit系统,而后在安装Docker
sudo service docker start
-t:在新容器内指定一个伪终端或终端。
-i:容许你对容器内的标准输入 (STDIN) 进行交互。
cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D
docker build -t runoob/centos:6.7 .