Docker简介
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- 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爬虫和scrapyd
- 建立目录结构 我们自己创建一个目录,例如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/
然后在这个目录打开终端通过docker build进行镜像制作
docker build -t zhanghtt/scrapy:v1 .
zhanghtt/scrapy 为镜像名
v1为tags标识
.dockerfile文件所在的目录
完成之后查看我们的本地镜像,显示已经创建成功
至此我们已经创建了一个包含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:v2
- -m:提交的描述信息
- -a:指定镜像作者
- e218edb10161:容器ID
- zhanghtt/ubuntu:v2:指定要创建的目标镜像名
但这样会生成多个镜像,如果可能尽量还是通过dokcerfile一次性构建镜像
4.启动容器里面的服务 通过端口映射启动scrapyd docker run -p 6800:6800 -d scrapy:v4 scrapyd - -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口(前面的为映射的主机端口,后面的为容器里面的端口)。 使用docker port 查看端口映射情况
镜像保存为文件
除了从仓库中获取镜像外,我们还可以通过文件直接加载
- 首先把镜像保存为文件
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提供了应用部署,规划,更新,维护的一种机制。