Python爬虫

最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Python的爬虫做了好几个程序,爬取了几个图片网站的图片,并保存到本地。

Python web服务

写了几个Python爬虫后,想试试Python web服务怎么写。随手百度了下,写了如下代码

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()
  1. 启动命令行,切换到该文件所在路径,输入:python xx.py启动web服务,如下图所示

  2. 打开浏览器,输入localhost:8080,然后回车,可以看到页面显示

上述代码比较测试过程比较简单,主要是为了演示怎么写一个Python web服务,这个演示流程存在一个比较大的问题,就是每当服务需要重启的时候我们需要关闭命令行工具,然后重新启动,这个过程太繁琐了,怎么可以让它程序化呢!解决办法也是有的,那就是Docker,因此我决定学习一下开源的应用程序引擎Docker

Docker是什么

Docker入门总结

Docker是什么

  1. go语言实现
  2. Build、Ship and Run App,AnyWhere
  3. 一次封装、到处运行

如上图,Docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。

了解Docker,首先需要知道LXC是什么。LXC是指Linux内核(尤指命名空间和CGroup)的一个特性,它允许其他一些沙盒进程运行在一块相对独立的空间,并能方便的控制他们的资源调度。

  • Docker 底层是基于LXC实现的,它提供了一系列更强的功能。Docker定义了一种新的格式,将应用和其依赖环境全部打包到一个单一对象中,这个对象可以在任何安装有Docker的机器上共享,并且执行这个对象的效果都是一样的

  • 可移植的跨机器部署:LXC实现了进程级的沙盒封装,而Docker为移植部署定义了规范,使用了抽象层的概念,把机器配置打包进了容器,这样使得进程和环境一起进行了分发

Docker三个基本概念:Image(镜像)、Container(容器)和Repository(仓库)

Image(镜像)

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Container(容器)

容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

容器 = 镜像 + 读写层。

Repository(仓库)

Docker 仓库是集中存放镜像文件的场所。

仓库(Repository)和仓库注册服务器(Registry),一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。

下图可以直观的看到Docker的结构。Docker 使用 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。

Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通信。

Docker vs VM

虚拟化

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

宿主机(Host)给客户端(Guest)提供硬件资源虚拟机是通过Hypervisor实现的,根据根据Hypervisor的实现方式和所处的位置不同,虚拟化又分为两种

  1. Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。

  2. 物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu或 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

下边我们用使用比较多的有宿主机用Hypervisor实现方式的虚拟机VMWare Station和容器进行比较,方便我们理解

使用场景

  • Automating the packaging and deployment of applications(使应用的打包与部署自动化)
  • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
  • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
  • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

Docker环境

Docker 是基于Linux 64bit的,无法在32bit的linux/windows/unix环境下使用,而且Docker是基于LXC实现的,因此容器的宿主机必须是Linux系统。

windows系统安装docker

Win 10以前的系统没有Hyper-v技术,因此如果想使用Docker就需要安装Docker Toolbox工具,Win 10系统可以直接安装Docker for Windows这个包,然后使用。

Windows系统上直接使用Docker,发现问题还是挺多,因此想到了另外一种方式,现在windows系统上安装Linux 64bit系统,然后在安装Docker

  1. 首先是安装VMware Workstation
  2. 下载Linux系统,并创建新的虚拟机系统
  3. 下边的操作和直接在Linux系统上安装一样

Linux系统安装docker

Ubuntu Docker安装和镜像加速

Docker常用命令

启动Docker后台服务

sudo service docker start

容器命令

  • docker ps :查看当前运行容器
  • docker ps -l :查看最后一次创建的容器
  • docker logs 容器id(名称):查看镜像内日志
  • docker stop 容器id(名称):停止容器
  • docker start 名称:启动容器
  • docker rm 容器id(名称) #删除容器时,容器必须是停止状态
  • docker port 容器id(名称) #查看网络端口
  • docker run -d -P --name runoob training/webapp python app.py --name 容器名称 :运行容器示例

-t:在新容器内指定一个伪终端或终端。

-i:允许你对容器内的标准输入 (STDIN) 进行交互。

镜像命令

  • docker images :查看镜像列表
  • docker pull python:3.6:拉取镜像
  • docker search 名称:查找镜像 默认在Docker Hub中查找

构建镜像

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
  1. 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  2. 第一条FROM,指定使用哪个镜像源
  3. RUN 指令告诉docker 在镜像内执行命令,安装了什么。。
  4. 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
  5. docker build -t runoob/centos:6.7 .

参考资料


转载声明:本站文章无特别说明,皆为原创,版权所有,转载请注明:朝十晚八 or Twowords


Docker入门学习的更多相关文章

  1. Docker入门学习总结

    1. 什么是Docker Docker是一种虚拟化技术,其在容器的基础上进一步封装了文件系统.网络互联.进程隔离等等,从而极大地简化了容器的创建和维护.Docker使用 Google 公司推出的 Go ...

  2. docker入门-学习笔记

    docker可以类比成window下的VMware或者virtualbox软件.docker有两个基本的概念:容器(container)和镜像(image),分别对应为VMware中的系统镜像和系统镜 ...

  3. docker 入门学习

    一 : docker 安装(linux-centos7) 安装docker要求 1.docker只支持在64位cup架构计算机上运行,目前不支持32位cup. 2.建议系统的linux内核版本在3.1 ...

  4. [置顶] Docker学习总结(5)——超实用Docker入门学习教程

    Docker是什么 Docker是一种容器技术,它可以将应用和环境等进行打包,形成一个独立的,类似于iOS的APP形式的"应用",这个应用可以直接被分发到任意一个支持Docker的 ...

  5. Docker入门学习笔记

    Docker 什么是Docker 虚拟化技术 在计算机中,虚拟化是一种资源管理技术,将计算机中的各种实体资源如:CPU.硬盘.内存等予以抽象.转换后呈现出来打破实体结构间的不可切割的障碍,使用户可以比 ...

  6. Docker入门学习及其安装

    1.Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源.Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器 ...

  7. Docker 入门实践

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...

  8. docker入门与部署微服务--学习笔记

    最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...

  9. docker 入门教程(5)——总结与学习资料

    总结 registry:docker镜像仓库,集中存储和管理镜像,类似maven仓库. image:docker镜像,定义容器运行的文件和参数,可以看作是面向对象编程的类. container:doc ...

随机推荐

  1. PHP内核之旅-2.SAPI中的Cli

    PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli 一.SAPI是什么? 1.1 理解SAPI (1)SAPI是PHP框架的接口层.有很多种服务器的SAPI的实 ...

  2. AJAX的get和post请求原生编写方法

    var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState===4){ if(xhr.stat ...

  3. Java中的String类型

    1.基本类型和引用类型 在C语言里面,是有指针这么一个变量类型的,指针变量保存的就是所要指向内容的地址.在Java里面,没有了指针的这么个说法,而是换了一个词:引用类型变量. 先说Java里面的基本类 ...

  4. Linux之SSH密钥认证

    1.SSH协议的认识 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目前 ...

  5. python字符串基本编码

    综述:python中字符串分为字节字符和非字节字符python3中默认输入字符串以非字节字符编码,使用unicode字符集表示,可以使用encode方法转化为ascii,utf-8, utf-16等各 ...

  6. Codeforces Round #483 (Div. 2) D. XOR-pyramid

    D. XOR-pyramid time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...

  7. 敏捷方法之极限编程(XP)和 Scrum

    区别之一:  迭代长度的不同 XP的一个Sprint的迭代长度大致为1~2周, 而Scrum的迭代长度一般为 2~ 4周. 区别之二: 在迭代中, 是否允许修改需求 XP在一个迭代中,如果一个User ...

  8. HTTP多线程下载+断点续传(libcurl库)

    目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.lib ...

  9. 消息中间件activemq的使用场景介绍(结合springboot的示例)

    一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间件. 目前在生产环境,使 ...

  10. nuget的问题, NuGet 程序包还原失败

    将项目中的packages.config 中引用移除. 1.使用nuget管理器,进行安装 2.下载对应dll,手动引入项目