Docker简介
Docker 可让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。python
容器是彻底使用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app),更重要的是容器性能开销极低。linux
- docker 是一个工具,用来生成镜像和容器的工具
- 镜像 是自定义的一套运行环境,能够加入本身须要的软件,如python等
- 容器 是一个运行起来的环境,相似于一个正在运行的app
Docker 安装
- 安装过程略

Docker 使用
- 获取镜像 docker pull images
- 查看本地仓库镜像 docker images

- 挂在镜像 docker run ubuntu:15.10 /bin/echo "Hello world"

会自动返回容器运行的id,若是想查看完成id可运行
docker inspect 5a(返回的id) | grep Id
Docker首先从本地主机上查找镜像是否存在,若是不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像
- 查看在运行的容器 docker ps [-a]

咱们发现并无任何容器在运行
而后咱们运行docker ps -a
-a 就是列出全部的容器,包括未在运行的,咱们看到最后一列状态是Exited(退出的)
从上面咱们能够看到容器的ID,IMG,Status,commond,name等,其中名称是容器自动分配的
- 运行交互式的容器

这样咱们就进入了容器中,能够在这里面作一些操做
若是咱们想退出直接输入exit,可是咱们退出以后经过docker ps 命令并无看到有在运行的容器,这是由于直接exit,容器的状态为exited,并无运行,咱们能够在交互界面直接按CTROL+Q+P,这是咱们在查看,发现容器的状态是up

那么当咱们的容器已经在后头运行了,咱们怎么再次进入容器呢,若是咱们直接运行run,并无进入原来的容器,而是从新创建了一个容器,咱们能够经过docker exec -it 775c7c9ee1e1(id)进入咱们的容器中

那么怎么中止在后太运行的容器呢,第一种方法再次进入容器,而后输入exit,第二种童工docker stop+(id或名字) 命令

此时状态已经变为exited 若是想再次启动该容器,直接运行docker start 命令
当咱们的容器再也不使用时,咱们可使用docker rm 删除(注意docker rmi 是用来删除镜像的) 
只有在容器在未运行的状况下才能删除
- 启动容器(后台模式)
-d带参数表示容器后台运行

可是咱们发现输入命令后,容器状态并非up,这是由于Docker容器在后台运行,必需要有一个前台进程,这里咱们让容器有前台程序运行,就能够实现容器的-d 启动后存活,可使用"while true; do echo hello world; sleep 1; done",无限输出hello world

经过docker logs 能够查看容器内的标准输出
Dockerfile 建立镜像
咱们除了使用公有仓库里面已有的镜像外,当咱们要定制本身的镜像时咱们能够经过dockerfile文件建立咱们本身的镜像,下面咱们以搭建scrapy爬虫为例,目标:建立一个镜像,该镜像包含scrapy爬虫和scrapyddocker
- 创建目录结构 咱们本身建立一个目录,例如docker,目录结构以下:

code 用来放咱们的爬虫代码
Dockerfile 是咱们的镜像构建文件
requirements.txt 为咱们python程序须要的各类包
2.dockerfile 文件内容
FROM ubuntu
# FROM指定基础镜像,而且必须是第一条指令
RUN apt-get update
RUN apt-get install -y python2.7
# RUN功能为运行指定的命令
ENV PATH /usr/bin:$PATH
# ENV 设置环境变量 ADD . /code
# ADD一个复制命令,把文件复制到景象中 WORKDIR /code
# WORKDIR 设置工做目录
ADD ./requirements.txt /code/bootstrap
而后在这个目录打开终端经过docker build进行镜像制做
docker build -t zhanghtt/scrapy:v1 .ubuntu
zhanghtt/scrapy 为镜像名
v1为tags标识
.dockerfile文件所在的目录
app
完成以后查看咱们的本地镜像,显示已经建立成功

至此咱们已经建立了一个包含python的ubuntu镜像 一般基础镜像建立完成以后,咱们还须要增长不少依赖包,固然咱们能够在建立dockerfile的时候加入,当时咱们能够在建立完成以后再进行镜像的更新
3.更新镜像
要更新镜像,首先要进入镜像,而后跟操做linux系统同样,进行软件依赖包的安装便可
好比觉得为安装pip 安装apt-get install -y wget
安装pip wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip -V #查看pip版本
在这边要特别注意安装scrapy时要先安装twisted,在安装twisted可能会报错,先安装gcc便可解决
apt-get install gcc 软件包所有安装完成以后退出进行
提交副本
docker commit -m="has update" -a="zhanghtt" e218edb10161 zhanghtt/scrapy:v2python2.7
- -m:提交的描述信息
- -a:指定镜像做者
- e218edb10161:容器ID
- zhanghtt/ubuntu:v2:指定要建立的目标镜像名

但这样会生成多个镜像,若是可能尽可能仍是经过dokcerfile一次性构建镜像
4.启动容器里面的服务 经过端口映射启动scrapyd docker run -p 6800:6800 -d scrapy:v4 scrapyd

- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口(前面的为映射的主机端口,后面的为容器里面的端口)。 使用docker port 查看端口映射状况
镜像保存为文件
除了从仓库中获取镜像外,咱们还能够经过文件直接加载scrapy
- 首先把镜像保存为文件

2.装载镜像
能够在任何装 docker 的地方加载刚保存的镜像了

此时镜像已经到了咱们的本地仓库
小技巧
1.把该镜像的记录所有删除掉,若是删除全部镜像的记录,可使用:docker ps -a|awk '{print $1}'|xargs docker rm
2.将主机文件负债到容器
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
3.进入容器 docker exec -it 775c7c9ee1e1工具
以上就是docker的最基础的用法性能
k8s
k8s简介
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单而且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。