摘要:
Docker 的网络实现其实就是利用了 Linux 上的网络名字空间和虚拟网络设备(特别是 veth pair)。建议先熟悉了解这两部分的基本概念再阅读本章。 基本原理 首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。 阅读全文
posted @ 2018-02-20 13:46
NAVYSUMMER
阅读(201)
评论(0)
推荐(0)
摘要:
最初,Docker 采用了 LXC 中的容器格式。自 1.20 版本开始,Docker 也开始支持新的 libcontainer 格式,并作为默认选项。 对更多容器格式的支持,还在进一步的发展中。 最初,Docker 采用了 LXC 中的容器格式。自 1.20 版本开始,Docker 也开始支持新的 阅读全文
posted @ 2018-02-20 13:45
NAVYSUMMER
阅读(157)
评论(0)
推荐(0)
摘要:
控制组(cgroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。 控制组技术最早是由 Google 的程序员 2006 年起提出,Linux 内核自 2.6.24 开始支持。 控制组可以提供 阅读全文
posted @ 2018-02-20 13:44
NAVYSUMMER
阅读(127)
评论(0)
推荐(0)
摘要:
联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。 联合文件系统 阅读全文
posted @ 2018-02-20 13:44
NAVYSUMMER
阅读(155)
评论(0)
推荐(0)
摘要:
名字空间是 Linux 内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。 pid 名字空间 不同用户的进程就是通过 pid 名字空间隔离开的,且不同名字空间中可以有相同 pid。所有的 LXC 进程在 Dock 阅读全文
posted @ 2018-02-20 13:43
NAVYSUMMER
阅读(197)
评论(0)
推荐(0)
摘要:
Docker 采用了 C/S架构,包括客户端和服务端。 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。 Docker daemon 一般在宿主 阅读全文
posted @ 2018-02-20 13:42
NAVYSUMMER
阅读(150)
评论(0)
推荐(0)
摘要:
编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。 基本的格式为 docker build [选项] 路径,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。因此一般建议放置 D 阅读全文
posted @ 2018-02-20 13:41
NAVYSUMMER
阅读(122)
评论(0)
推荐(0)
摘要:
指令的一般格式为 INSTRUCTION arguments,指令包括 FROM、MAINTAINER、RUN 等。 FROM 格式为 FROM <image>或FROM <image>:<tag>。 第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用 阅读全文
posted @ 2018-02-20 13:40
NAVYSUMMER
阅读(128)
评论(0)
推荐(0)
摘要:
Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。 一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。 例如 # This dockerfile uses the ubuntu image # VERSION 2 - EDI 阅读全文
posted @ 2018-02-20 13:39
NAVYSUMMER
阅读(122)
评论(0)
推荐(0)
摘要:
除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, SELinux, GRSEC 等。 Docker 当前默认只启用了能力机制。用户可以采用多种方案来加强 Docker 主机的安全,例如: 在内核中启用 GRSEC 和 PAX, 阅读全文
posted @ 2018-02-20 13:38
NAVYSUMMER
阅读(346)
评论(0)
推荐(0)
摘要:
能力机制(Capability)是 Linux 内核一个强大的特性,可以提供细粒度的权限访问控制。 Linux 内核自 2.2 版本起就支持能力机制,它将权限划分为更加细粒度的操作能力,既可以作用在进程上,也可以作用在文件上。 例如,一个 Web 服务进程只需要绑定一个低于 1024 的端口的权限, 阅读全文
posted @ 2018-02-20 13:37
NAVYSUMMER
阅读(250)
评论(0)
推荐(0)
摘要:
运行一个容器或应用程序的核心是通过 Docker 服务端。Docker 服务的运行目前需要 root 权限,因此其安全性十分关键。 首先,确保只有可信的用户才可以访问 Docker 服务。Docker 允许用户在主机和容器间共享文件夹,同时不需要限制容器的访问权限,这就容易让容器突破资源限制。例如, 阅读全文
posted @ 2018-02-20 13:36
NAVYSUMMER
阅读(178)
评论(0)
推荐(0)
摘要:
Docker 容器和 LXC 容器很相似,所提供的安全特性也差不多。当用 docker run 启动一个容器时,在后台 Docker 为容器创建了一个独立的名字空间和控制组集合。 名字空间提供了最基础也是最直接的隔离,在容器中运行的进程不会被运行在主机上的进程和其它容器发现和作用。 每个容器都有自己 阅读全文
posted @ 2018-02-20 13:35
NAVYSUMMER
阅读(138)
评论(0)
推荐(0)
摘要:
控制组是 Linux 容器机制的另外一个关键组件,负责实现资源的审计和限制。 它提供了很多有用的特性;以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当容器内的资源使用产生压力时不会连累主机系统。 尽管控制组不负责隔离容器之间相互访问、处理数据和进 阅读全文
posted @ 2018-02-20 13:35
NAVYSUMMER
阅读(161)
评论(0)
推荐(0)
摘要:
对于大部分企业来说,搭建 PaaS 既没有那个精力,也没那个必要,用 Docker 做个人的 sandbox 用处又小了点。 可以用 Docker 来标准化开发、测试、生产环境。 Docker 占用资源小,在一台 E5 128 G 内存的服务器上部署 100 个容器都绰绰有余,可以单独抽一个容器或者 阅读全文
posted @ 2018-02-20 13:34
NAVYSUMMER
阅读(607)
评论(0)
推荐(0)
摘要:
Docker 默认的桥接网卡是 docker0。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 veth* 而 Docker 只是把所有这些网卡桥接在一起,如下: [root@opnvz ~]# brctl show bridge name bridge id STP en 阅读全文
posted @ 2018-02-20 13:33
NAVYSUMMER
阅读(594)
评论(0)
推荐(0)
摘要:
安装 tomcat 镜像 准备好需要的 jdk、tomcat 等软件放到 home 目录下面,启动一个容器 docker run -t -i -v /home:/opt/data --name mk_tomcat ubuntu /bin/bash 这条命令挂载本地 home 目录到容器的 /opt/ 阅读全文
posted @ 2018-02-20 13:32
NAVYSUMMER
阅读(198)
评论(0)
推荐(0)
摘要:
Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。 本小节将使用进程管理工具 su 阅读全文
posted @ 2018-02-20 13:31
NAVYSUMMER
阅读(464)
评论(0)
推荐(0)
摘要:
默认情况下,Docker 会将所有容器连接到由 docker0 提供的虚拟子网中。 用户有时候需要两个容器之间可以直连通信,而不用通过主机网桥进行桥接。 解决办法很简单:创建一对 peer 接口,分别放到两个容器中,配置成点到点链路类型即可。 首先启动 2 个容器: $ sudo docker ru 阅读全文
posted @ 2018-02-20 13:30
NAVYSUMMER
阅读(189)
评论(0)
推荐(0)
摘要:
Docker 1.2.0 开始支持在运行中的容器里编辑 /etc/hosts, /etc/hostname 和 /etc/resolve.conf 文件。 但是这些修改是临时的,只在运行的容器中保留,容器终止或重启后并不会被保存下来。也不会被 docker commit 提交。 Docker 1.2 阅读全文
posted @ 2018-02-20 13:29
NAVYSUMMER
阅读(331)
评论(0)
推荐(0)
摘要:
除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器。 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥。 如果服务已经运行,那需要先停止服务,并删除旧的网桥。 $ sudo service docker stop $ sud 阅读全文
posted @ 2018-02-20 13:28
NAVYSUMMER
阅读(214)
评论(0)
推荐(0)
摘要:
pipework Jérôme Petazzoni 编写了一个叫 pipework 的 shell 脚本,可以帮助用户在比较复杂的场景中完成容器的连接。 playground Brandon Rhodes 创建了一个提供完整的 Docker 容器网络拓扑管理的 Python库,包括路由、NAT 防火 阅读全文
posted @ 2018-02-20 13:28
NAVYSUMMER
阅读(86)
评论(0)
推荐(0)
摘要:
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。 Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信,它还给 阅读全文
posted @ 2018-02-20 13:27
NAVYSUMMER
阅读(436)
评论(0)
推荐(0)
摘要:
默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。 容器访问外部实现 容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址。这是使用 iptables 的源地址伪装操作实现的。 查看主机的 NAT 规则。 $ sudo iptables -t nat -nL .. 阅读全文
posted @ 2018-02-20 13:26
NAVYSUMMER
阅读(267)
评论(0)
推荐(0)
摘要:
容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。 容器访问外部网络 容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。 $sysctl net.ip 阅读全文
posted @ 2018-02-20 13:25
NAVYSUMMER
阅读(799)
评论(0)
推荐(0)
摘要:
Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件。 在容器中使用 mount 命令可以看到挂载信息: $ mount ... /dev/disk/by-uuid/1fec...ebdf on /e 阅读全文
posted @ 2018-02-20 13:24
NAVYSUMMER
阅读(568)
评论(0)
推荐(0)
摘要:
下面是一个跟 Docker 网络相关的命令列表。 其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效。 -b BRIDGE or --bridge=BRIDGE --指定容器挂载的网桥 --bip=CIDR --定制 docker0 的掩码 -H SOCKET... or 阅读全文
posted @ 2018-02-20 13:23
NAVYSUMMER
阅读(124)
评论(0)
推荐(0)
摘要:
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。 使用 docker ps 可以看到,本地主机的 49155 被映射到了容器的 5000 阅读全文
posted @ 2018-02-20 13:22
NAVYSUMMER
阅读(539)
评论(0)
推荐(0)
摘要:
容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式。 该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。 自定义容器命名 连接系统依据容器的名称来执行。因此,首先需要自定义一个好记的容器命名。 虽然当创建容器的时候,系统默认会分配一个名字。自定义命 阅读全文
posted @ 2018-02-20 13:21
NAVYSUMMER
阅读(273)
评论(0)
推荐(0)
摘要:
可以利用数据卷对其中的数据进行进行备份、恢复和迁移。 备份 首先使用 --volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从本地主机挂载当前到容器的 /backup 目录。命令如下: $ sudo docker run --volumes-from dbdata -v $ 阅读全文
posted @ 2018-02-20 13:20
NAVYSUMMER
阅读(522)
评论(0)
推荐(0)
摘要:
如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。 数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。 首先,创建一个命名的数据卷容器 dbdata: $ sudo docker run -d -v /dbdata --name dbdata training/ 阅读全文
posted @ 2018-02-20 13:19
NAVYSUMMER
阅读(173)
评论(0)
推荐(0)
摘要:
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在,直到没有容器使用 *数据卷的使用,类似于 Linux 下对目录或文件进行 mount。 创建一个数据卷 在用 阅读全文
posted @ 2018-02-20 13:18
NAVYSUMMER
阅读(127)
评论(0)
推荐(0)
摘要:
Docker 的 Registry 利用配置文件提供了一些仓库的模板(flavor),用户可以直接使用它们来进行开发或生产部署。 模板 在 config_sample.yml 文件中,可以看到一些现成的模板段: common:基础配置 local:存储数据到本地文件系统 s3:存储数据到 AWS S 阅读全文
posted @ 2018-02-20 13:17
NAVYSUMMER
阅读(256)
评论(0)
推荐(0)
摘要:
有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。 本节介绍如何使用本地仓库。 docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。 安装运行 docker-registry 容器运行 在安装了 Docker 后,可以通过获取官 阅读全文
posted @ 2018-02-20 13:16
NAVYSUMMER
阅读(156)
评论(0)
推荐(0)
摘要:
目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现。 登录 可以通过执行 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。 注册成功后,本地用户目录的 阅读全文
posted @ 2018-02-20 13:14
NAVYSUMMER
阅读(454)
评论(0)
推荐(0)
摘要:
仓库(Repository)是集中存放镜像的地方。 一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.co 阅读全文
posted @ 2018-02-20 13:13
NAVYSUMMER
阅读(173)
评论(0)
推荐(0)
摘要:
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。 例如下面的命令会在后台运行容器。 $ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hell 阅读全文
posted @ 2018-02-20 13:12
NAVYSUMMER
阅读(320)
评论(0)
推荐(0)
摘要:
可以使用 docker stop 来终止一个运行中的容器。 此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。 终止状态的容器可以用 docker ps -a 命令看到 阅读全文
posted @ 2018-02-20 13:12
NAVYSUMMER
阅读(332)
评论(0)
推荐(0)
摘要:
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。 新建并启动 所需要的命令主要为 docker run。 例如,下面的命令输出一个 “Hello World 阅读全文
posted @ 2018-02-20 13:11
NAVYSUMMER
阅读(287)
评论(0)
推荐(0)
摘要:
可以使用 docker rm 来删除一个处于终止状态的容器。 例如 $sudo docker rm trusting_newton trusting_newton 如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。 可以使用 docker rm 来删 阅读全文
posted @ 2018-02-20 13:10
NAVYSUMMER
阅读(466)
评论(0)
推荐(0)
摘要:
导出容器 如果要导出本地某个容器,可以使用 docker export 命令。 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7691a814370e ubuntu:14.04 "/bin/bash 阅读全文
posted @ 2018-02-20 13:09
NAVYSUMMER
阅读(167)
评论(0)
推荐(0)
摘要:
在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。 attach 命令 docker attach 是Docker自带的命令。下面示例如何使用该命令。 $ sudo docker run - 阅读全文
posted @ 2018-02-20 13:08
NAVYSUMMER
阅读(197)
评论(0)
推荐(0)
摘要:
容器是 Docker 又一核心概念。 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。 本章将具体介绍如何来管理一个容器,包括创建、启动和停止等。 容器是 Docker 又一核心概念。 阅读全文
posted @ 2018-02-20 13:07
NAVYSUMMER
阅读(129)
评论(0)
推荐(0)
摘要:
Docker 镜像是怎么实现增量的修改和维护的? 每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去。 通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和 阅读全文
posted @ 2018-02-20 13:06
NAVYSUMMER
阅读(152)
评论(0)
推荐(0)
摘要:
存出镜像 如果要导出镜像到本地文件,可以使用 docker save 命令。 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 c4ff7513909d 5 weeks ago 225.4 M 阅读全文
posted @ 2018-02-20 13:05
NAVYSUMMER
阅读(114)
评论(0)
推荐(0)
摘要:
如果要移除本地的镜像,可以使用 docker rmi 命令。注意 docker rm 命令是移除容器。 $ sudo docker rmi training/sinatra Untagged: training/sinatra:latest Deleted: 5bc342fa0b91cabf6524 阅读全文
posted @ 2018-02-20 13:05
NAVYSUMMER
阅读(196)
评论(0)
推荐(0)
摘要:
创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。 修改已有镜像 先使用下载的镜像启动容器。 $ sudo docker run -t -i training/sinatra /bin/bash root@0b2616b0e5a8:/# 注意: 阅读全文
posted @ 2018-02-20 13:04
NAVYSUMMER
阅读(184)
评论(0)
推荐(0)
摘要:
使用 docker images 显示本地已有的镜像。 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB ubuntu pr 阅读全文
posted @ 2018-02-20 13:03
NAVYSUMMER
阅读(151)
评论(0)
推荐(0)
摘要:
1.官方一键安装方式 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 2.手动安装方式 # 安装依赖 yum install -y yum-utils device-mapper-persistent-data l 阅读全文
posted @ 2018-02-20 13:02
NAVYSUMMER
阅读(149)
评论(0)
推荐(0)
摘要:
可以使用 docker pull 命令来从仓库获取所需要的镜像。 下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。 $ sudo docker pull ubuntu:12.04 Pulling repository ubuntu ab8e2728644 阅读全文
posted @ 2018-02-20 13:02
NAVYSUMMER
阅读(373)
评论(0)
推荐(0)
摘要:
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是 阅读全文
posted @ 2018-02-20 13:01
NAVYSUMMER
阅读(142)
评论(0)
推荐(0)
摘要:
Docker 利用容器来运行应用。 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 *注:镜像是只读的,容器在启动的时 阅读全文
posted @ 2018-02-20 13:00
NAVYSUMMER
阅读(138)
评论(0)
推荐(0)
摘要:
Docker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个 阅读全文
posted @ 2018-02-20 12:59
NAVYSUMMER
阅读(156)
评论(0)
推荐(0)
摘要:
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。 Docker 自开源后受到广泛的 阅读全文
posted @ 2018-02-20 12:58
NAVYSUMMER
阅读(140)
评论(0)
推荐(0)
摘要:
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。 首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。 容器除了运行其中应用外,基本不消耗额外的系统 阅读全文
posted @ 2018-02-20 12:58
NAVYSUMMER
阅读(210)
评论(0)
推荐(0)
摘要:
说起python编码,真是句句心酸。算起来,反复折腾两个来月了。万幸的是,终于梳理清楚了。作为一个共产主义者,一定要分享给大家。如果你还在因为编码而头痛,那么赶紧跟着我咱们一起来揭开py编码的真相吧! 一 什么是编码? 基本概念很简单。首先,我们从一段信息即消息说起,消息以人类可以理解、易懂的表示存 阅读全文
posted @ 2018-02-20 12:54
NAVYSUMMER
阅读(169)
评论(0)
推荐(0)
摘要:
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: file.close() 关闭文件。关闭后文件不能再进行读写操作。 file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 file.fileno() 返回一 阅读全文
posted @ 2018-02-20 12:51
NAVYSUMMER
阅读(129)
评论(0)
推荐(0)
摘要:
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。 时间间隔是以秒为单位的浮点小数。 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。 Python 的 time 阅读全文
posted @ 2018-02-20 12:50
NAVYSUMMER
阅读(153)
评论(0)
推荐(0)
摘要:
Python字典包含了以下内置函数: 阅读全文
posted @ 2018-02-20 12:48
NAVYSUMMER
阅读(129)
评论(0)
推荐(0)
摘要:
Python元组包含了以下内置函数 阅读全文
posted @ 2018-02-20 12:47
NAVYSUMMER
阅读(123)
评论(0)
推荐(0)
摘要:
Python包含以下函数: Python包含以下方法: 阅读全文
posted @ 2018-02-20 12:46
NAVYSUMMER
阅读(140)
评论(0)
推荐(0)
摘要:
字符串是 Python 中最常用的数据类型。我们可以使用引号来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: Python访问字符串中的值 Python不支持单字符类型,单字符也在Python也是作为一个字符串使用。 Python访问子字符串,可以使用方括号来截取字符串,如下实例: 阅读全文
posted @ 2018-02-20 12:45
NAVYSUMMER
阅读(182)
评论(0)
推荐(0)
摘要:
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。 时间间隔是以秒为单位的浮点小数。 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。 Python 的 time 阅读全文
posted @ 2018-02-20 12:41
NAVYSUMMER
阅读(272)
评论(0)
推荐(0)
摘要:
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。 json.loads() 阅读全文
posted @ 2018-02-20 12:40
NAVYSUMMER
阅读(1263)
评论(0)
推荐(0)
摘要:
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据。 XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对 阅读全文
posted @ 2018-02-20 12:39
NAVYSUMMER
阅读(299)
评论(0)
推荐(0)
摘要:
多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入、文件读写和网络收发数 阅读全文
posted @ 2018-02-20 12:38
NAVYSUMMER
阅读(181)
评论(0)
推荐(0)
摘要:
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 Python创建 SMTP 对象语法 阅读全文
posted @ 2018-02-20 12:37
NAVYSUMMER
阅读(4828)
评论(0)
推荐(0)
摘要:
1、cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。 cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cook 阅读全文
posted @ 2018-02-20 12:32
NAVYSUMMER
阅读(188)
评论(0)
推荐(0)
摘要:
Django 官方关于cache的介绍:https://docs.djangoproject.com/en/dev/topics/cache/ Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘 阅读全文
posted @ 2018-02-20 12:22
NAVYSUMMER
阅读(157)
评论(0)
推荐(0)
摘要:
中间件是一个钩子框架,是介于request与response处理之间的一道处理过程,它们可以介入Django 的请求和响应处理过程。它是一个轻量级、底层的“插件”系统,用于在全局修改Django 的输入或输出。 每个中间件组件负责完成某个特定的功能。例如,Django 包含的一个中间件组件Authe 阅读全文
posted @ 2018-02-20 12:13
NAVYSUMMER
阅读(287)
评论(0)
推荐(0)
摘要:
Python 提供了两个级别访问的网络服务。: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 什么是 So 阅读全文
posted @ 2018-02-20 02:02
NAVYSUMMER
阅读(193)
评论(0)
推荐(0)
摘要:
什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 PyMySQL 安装 阅读全文
posted @ 2018-02-20 02:00
NAVYSUMMER
阅读(408)
评论(0)
推荐(0)
摘要:
什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或 阅读全文
posted @ 2018-02-20 01:59
NAVYSUMMER
阅读(1027)
评论(0)
推荐(0)
摘要:
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表 阅读全文
posted @ 2018-02-20 01:48
NAVYSUMMER
阅读(357)
评论(0)
推荐(0)
摘要:
操作系统接口 os模块提供了不少与操作系统相关联的函数。 建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。 在使用 os 这样的大型模块时内置的 dir() 和 help() 阅读全文
posted @ 2018-02-20 01:46
NAVYSUMMER
阅读(137)
评论(0)
推荐(0)
摘要:
面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员:类变量或者实例变量用于处理类及其实例对象 阅读全文
posted @ 2018-02-20 01:45
NAVYSUMMER
阅读(425)
评论(0)
推荐(0)
摘要:
Python有两种错误很容易辨认:语法错误和异常。 语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 这个例子中,函数 print() 被检查到有错误,是它前面缺少了一个冒号(:)。 语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。 异常 阅读全文
posted @ 2018-02-20 01:43
NAVYSUMMER
阅读(262)
评论(0)
推荐(0)
摘要:
os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示: os.access(path, mode) os.chdir(path) os.chflags(path, flags) os.chmod(path, mode) os.chown(path, uid, gid) os.chr 阅读全文
posted @ 2018-02-20 01:42
NAVYSUMMER
阅读(443)
评论(0)
推荐(0)
摘要:
Python3 File(文件) 方法 file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: file.close() 关闭文件。关闭后文件不能再进行读写操作。 file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写 阅读全文
posted @ 2018-02-20 01:41
NAVYSUMMER
阅读(185)
评论(0)
推荐(0)
摘要:
输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。(第三种方式是使用文件对象的 write() 方法; 标准输出文件可以用 sys.stdout 引用。) 如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。 如果你希望将输出的值转成 阅读全文
posted @ 2018-02-20 01:40
NAVYSUMMER
阅读(186)
评论(0)
推荐(0)
摘要:
在脚本上如果是用python解释器来编程,如果你从Python解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.p 阅读全文
posted @ 2018-02-20 01:39
NAVYSUMMER
阅读(150)
评论(0)
推荐(0)
摘要:
列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 以下是 Python 中列表的方法: 下面示例演示了列表的大部分方法: 注意:类似 insert, remove 或 sort 等修改列表的方法没有返回值。 将列表当做堆栈使用 阅读全文
posted @ 2018-02-20 01:36
NAVYSUMMER
阅读(143)
评论(0)
推荐(0)
摘要:
Python 定义函数使用 def 关键字,一般格式如下: 让我们使用函数来输出"Hello World!": 更复杂点的应用,函数中带上参数变量: 以上实例输出结果: 函数变量作用域 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 通过以下实例,你可以清楚了解Python函 阅读全文
posted @ 2018-02-20 01:35
NAVYSUMMER
阅读(126)
评论(0)
推荐(0)
摘要:
在Python这个国家里,装饰器以及后面讲到的迭代器,生成器都是十二分重要的高级函数。 如果将装饰器比作取经路上的一个大boss,那么想干掉它必须拿到三件法宝 法宝一(作用域): 法宝二(函数即对象): 在python的世界里,函数和我们之前的[1,2,3],'abc',8等一样都是对象,而且函数是 阅读全文
posted @ 2018-02-20 01:34
NAVYSUMMER
阅读(184)
评论(0)
推荐(0)
摘要:
Python中的循环语句有 for 和 while。 Python循环语句的控制结构图如下所示: while 循环 Python中while语句的一般形式: 同样需要注意冒号和缩进。另外,在Python中没有do..while循环。 以下实例使用了 while 来计算 1 到 100 的总和: 执行 阅读全文
posted @ 2018-02-20 00:58
NAVYSUMMER
阅读(133)
评论(0)
推荐(0)
摘要:
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。 字符串,列表或元组对象都可用于创建迭 阅读全文
posted @ 2018-02-20 00:58
NAVYSUMMER
阅读(112)
评论(0)
推荐(0)
摘要:
if 语句 Python中if语句的一般形式如下所示: 如果 "condition_1" 为 True 将执行 "statement_block_1" 块语句,如果 "condition_1" 为False,将判断 "condition_2",如果"condition_2" 为 True 将执行 " 阅读全文
posted @ 2018-02-20 00:56
NAVYSUMMER
阅读(145)
评论(0)
推荐(0)
摘要:
字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: 键必须是唯一的,但值则不必。 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。 一个简单的字典实例 阅读全文
posted @ 2018-02-20 00:55
NAVYSUMMER
阅读(366)
评论(0)
推荐(0)
摘要:
Python 的元组与列表类似,不同之处在于元组的元素不能修改。 元组使用小括号,列表使用方括号。 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。 如下实例: 创建空元组 元组中只包含一个元素时,需要在元素后面添加逗号 元组与字符串类似,下标索引从0开始,可以进行截取,组合等。 访问元 阅读全文
posted @ 2018-02-20 00:53
NAVYSUMMER
阅读(126)
评论(0)
推荐(0)
摘要:
Python囊括了大量的复合数据类型,用于组织其它数值。最有用的是列表,即写在方括号之间、用逗号分隔开的数值列表。列表内的项目不必全是相同的类型。 像字符串一样,列表可以被索引和切片: 所有的分切操作返回一个包含有所需元素的新列表。如下例中,分切将返回列表 squares 的一个拷贝: 列表还支持拼 阅读全文
posted @ 2018-02-20 00:52
NAVYSUMMER
阅读(121)
评论(0)
推荐(0)
摘要:
除了数字,Python也能操作字符串。字符串有几种表达方式,可以使用单引号或双引号括起来: Python中使用反斜杠转义引号和其它特殊字符来准确地表示。 如果字符串包含有单引号但不含双引号,则字符串会用双引号括起来,否则用单引号括起来。对于这样的输入字符串,print() 函数会产生更易读的输出。 阅读全文
posted @ 2018-02-20 00:51
NAVYSUMMER
阅读(141)
评论(0)
推荐(0)
摘要:
Python 解释器可以作为一个简单的计算器:您可以在解释器里输入一个表达式,它将输出表达式的值。 表达式的语法很直白: +, -, * 和/ 和在许多其它语言(如Pascal或C)里一样;括号可以用来为运算分组。例如: 注意:在不同的机器上浮点运算的结果可能会不一样。之后我们会介绍有关控制浮点运算 阅读全文
posted @ 2018-02-20 00:50
NAVYSUMMER
阅读(192)
评论(0)
推荐(0)
摘要:
什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。例子中,4 和 5 被称为操作数,"+" 称为运算符。 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 接下来让我们 阅读全文
posted @ 2018-02-20 00:49
NAVYSUMMER
阅读(143)
评论(0)
推荐(0)
摘要:
确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以#开头,例如: 多行注释用三个单引号(''')或者三个双引号(""")将注释括起来,例如: 1、单引号(''') 2、双引号(""") 阅读全文
posted @ 2018-02-20 00:48
NAVYSUMMER
阅读(140)
评论(0)
推荐(0)
摘要:
Linux/Unix的系统上,Python解释器通常被安装在 /usr/local/bin/python3.4 这样的有效路径(目录)里。 我们可以将路径 /usr/local/bin 添加到您的Linux/Unix操作系统的环境变量中,这样您就可以通过 shell 终端输入下面的命令来启动 Pyt 阅读全文
posted @ 2018-02-20 00:47
NAVYSUMMER
阅读(147)
评论(0)
推荐(0)
摘要:
Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 Python 3中有六个标准的数据类型: Numbers(数字) String(字符串) List(列表) Tup 阅读全文
posted @ 2018-02-20 00:46
NAVYSUMMER
阅读(233)
评论(0)
推荐(0)
摘要:
现在,我们能使用Python完成比 2+2 更复杂的工作。在下例里,我们能写出一个初步的斐波纳契数列如下: 这个例子介绍了几个新特征。 第一行包含了一个复合赋值:变量 a 和 b 同时得到新值 0 和 1。最后一行再次使用了同样的方法,可以看到,右边的表达式会在赋值变动之前执行。右边表达式的执行顺序 阅读全文
posted @ 2018-02-20 00:44
NAVYSUMMER
阅读(154)
评论(0)
推荐(0)
摘要:
编码 默认情况下,Python 3源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码: 标识符 第一个字符必须是字母表中字母或下划线'_'。 标识符的其他的部分有字母、数字和下划线组成。 标识符对大小写敏感。 在Python 3中,非-ASC 阅读全文
posted @ 2018-02-20 00:43
NAVYSUMMER
阅读(166)
评论(0)
推荐(0)
摘要:
Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。 Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本 阅读全文
posted @ 2018-02-20 00:42
NAVYSUMMER
阅读(164)
评论(0)
推荐(0)
摘要:
当我们访问http://127.0.0.1:8080/admin/时,会出现: 执行命令: 生成同步数据库的脚本:python manage.py makemigrations 同步数据库: python manage.py migrate 创建登录用户:python manage.py creat 阅读全文
posted @ 2018-02-20 00:18
NAVYSUMMER
阅读(239)
评论(0)
推荐(0)

浙公网安备 33010602011771号