笔记-docker-3 使用
笔记-docker-3 使用
1. 镜像
image是docker最重要的概念,docker运行容器前需要本地存在对应的镜像,如果没有,会尝试从默认镜像库下载。
1.1. 镜像获取
查看本地镜像 docker images
查看远程镜像 docker search <name>
拉取远程镜像 docker pull <name>[:tag]
tag是标签,一般是版本信息,如果没有指定,默认拉取latest
查看运行的进程 docker ps –a
镜像文件一般由若干layer组成,每个层有唯一id(256bit,16个十六进制字符),使用pull命令会下载layer。不同的镜像包含同一layer时,本地只会保存一次该layer。
严格的讲,镜像仓库名称中还应该包含仓库地址,但一般默认是docker hub。
docker pull python:latest 等效于
docker pull registry.hub.docker.com/python:latest
1.2. 更多操作命令
docker images #查看本机镜像
images命令选项:
-a 列出所有镜像文件(包括临时文件)
--digests=true列出镜像的数字摘要值
tag 为镜像添加标签
docker tag python:latest my:latest
实际它只是一个链接,它们的id还是一样的。
inspect 查看详细信息
history 查看镜像历史
docker search python # 查看可用镜像
选项:
-s 只展示评价为指定星级以上的镜像,例docker search -s 5 python
rmi 删除镜像,例docker rmi my
如果镜像有多个标签,删除标签并不会做什么;但只有一个标签时,删除标签会删除相应的layer文件。
如果rmi后面跟的是id,会删除所有指向该镜像的标签,然后删除镜像本身。
当有该镜像创建的容器存在时,镜像文件无法被删除。
-f 可以强行删除镜像,一般不建议使用。
1.3. 镜像创建
dockerfile是一个文本格式的配置文件,可以使用它来创建自定义的镜像。
1.3.1. 基本结构
dockerfile由一行行命令语句组成,支持以#开头的注释行。
一般而言,dockerfile分为4部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令。
2. 容器
容器是docker的另一个核心概念,简单来说,容器是镜像的一个运行实例。
2.1. 创建/启动/终止/删除容器
docker create 创建容器,新创建的容器是停止状态
docker start 启动容器
docker restart
守护态,后台运行docker run –d python /bin/echo ‘hello world’
docker run等效于先创建然后启动容器,容器启动后会返回一个唯一的id。
docker run在后台做的操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
docker stop [-t 10] 向容器发送SGTERM信号,等待10秒后再发送SIGKILL信号终止容器。
docker rm 删除容器
选项:
-f 强行终止并删除
-l删除容器的连接
-v删除容器挂载的数据卷
2.2. 其它命令
查看
docker ps
选项:
-a
查看日志
docker logs ce5
2.3. 基础运行/常用命令
docker pull python # pull一个镜像,大概670M
docker run python /bin/echo ‘hello world’ # 在容器中运行echo命令
使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t --name mytest centos:centos6 /bin/bash
2.4. 运行脚本
docker run python python /home/py/p.py
报错:python: can't open file '/home/py/p.py': [Errno 2] No such file or directory
3. docker-scrapy环境搭建
3.1. image配置及安装
拉取官方的python3.6.8镜像
docker pull python:3.6.8-stretch
运行容器
docker run -itd my:t1 /bin/bash
3911dd6bdc74aba3e1f94eb250ee0f4e1c31518d0d81cc14d194e297659749da
通过id进入容器
docker attach 3911dd6bdc74aba3e1f94eb250ee0f4e1c31518d0d81cc14d194e297659749da
进入之后的命令行如下:
root@3911dd6bdc74:/# #它相当于一个定制的linux
验证python
python #可以进入python命令行
安装scrapy
pip install scrapy
验证安装成功
scrapy # Scrapy 1.5.1
保存容器为image
在安装完scrapy后另开一窗口
docker ps # 获取当前容器id,3911dd6bdc74
docker commit 3911dd6bdc74 python-scrapy:20181228
#docker commit <id> repository[:tag]
然后就可以使用docker images查看新的镜像了
3.2. 使用
镜像创建后,可以在任意地方拉取并运行。
继续本机测试
docker run -itd -v /home/py:/usr/src/myapp -w /usr/src/myapp python-scrapy:20181228
docker attach da73a4a
测试
在centos下编辑脚本vi test.py
# coding:utf-8
from redis import Redis
REDIS_URL = 'redis://:******@192.168.199.113:6379/0'
a = Redis.from_url(url=REDIS_URL)
print(a.keys('*'))
运行脚本:
python test.py # 结果正常
3.3. docker-scrapy部署中其它需要解决的问题
scrapy+docker还有一些需要解决的问题:
- 爬虫运行环境:首先是需要一个安装有scrapy的镜像,其中包含爬虫常用的库;这个前文已经实践过了,不多言;
- 爬虫部署及运行:最先想到的方法是在一个容器中测试爬虫成功运行,对此提交新的镜像版本,然后在多个服务器拉取镜像,运行;
- 爬虫对外交互问题:上面的实验可以发现对外通讯不需要额外做什么(主要是爬虫不需要对外提供服务,无所谓端口),
爬虫主要的数据交互可以使用redis完成;
日志监控可使用docker run -v挂载服务器目录到容器中,用于写日志,然后监控日志获取爬虫运行状态;
- 爬虫管理问题:监控日志,发现爬虫死了,把容器重启就可以了,主爬虫可能麻烦一点,需要设计良好的列表页过滤机制,子爬虫没有任何影响。
笔记-docker-3 使用的更多相关文章
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- Docker学习笔记 — Docker私有仓库搭建【转载】
标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报 分类: Docker(26) 目录(?)[+] 和Mavan的管理一样,Dockers不仅 ...
- Docker学习笔记 - Docker Compose 脚本命令
Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...
- Docker学习笔记 - Docker Compose
一.概念 Docker Compose 用于定义运行使用多个容器的应用,可以一条命令启动应用(多个容器). 使用Docker Compose 的步骤: 定义容器 Dockerfile 定义应用的各个服 ...
- Docker学习笔记 - Docker部署nginx网站
一.制作 nginx 镜像 1.下载配置文件 mkdir /opt/nginx_docker && cd /opt/nginx_docker mkdir nginx && ...
- Docker学习笔记 - Docker容器的日志
docker logs [-f] [-t] [--tail] 容器名 -f -t --tail="all" 无参数:返回所有日志 -f 一直跟踪变化并返回 -t 带时间戳返 ...
- Docker学习笔记 - Docker的数据卷
一.什么是数据卷? 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据 ...
- Docker学习笔记 - Docker的容器
docker logs [-f] [-t] [--tail] 容器名 -f -t --tail="all" 无参数:返回所有日志 -f 一直跟踪变化并返回 -t 带时间戳返 ...
- Docker学习笔记 - Docker的镜像
一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面 ...
随机推荐
- 关于 header()前面 为什么不能有任何输出的问题
之前有个问题就是在header () 之前输出,并没有任何报错信息. header() 官网定义必须在任何实际输出之前调用,不管是普通的HTML标签,还是文件或PHP输出的空行,空格.在测试的时候发现 ...
- 画布canvas签名
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- (一)JavaScript之[数据类型]与[对象]
1].数据类型字符串(String).数字(Number).布尔(Boolean).数组(Array).对象(Object).空(Null).未定义 (Undefined). //极大或极小的数字可以 ...
- 从刷票了解如何获得客户端IP
我的个人博客,源地址:http://www.woniubi.cn/get_client_ip/ 前两个星期帮一个朋友的亲戚的孩子刷票,谁让咱们是程序员呢.这当中也遇到过重装系统,除灰尘,淘宝购物,盗Q ...
- Android 设置软键盘搜索键以及监听搜索键点击事件
如图所示,有时候为了布局美观,在搜索时没有搜索按钮,而是调用软件盘上的按钮.调用的实现只需要在XML在输入框中加入android:imeOptions="actionSearch" ...
- Azure:陪伴你们,是我最长情的告白
立即访问http://market.azure.cn
- 双击易语言没有反应,按住shift再双击可解决
参考资料:http://tieba.baidu.com/p/2987732743 的7楼.
- sublim插件(待续)
imesupport SublimeText3默认不支持输入法跟随光标,这在输入中文的时候看起来不方便. 进入SublimeText3在上面菜单栏里Perferences点击PackageContro ...
- server 2008 64位安装Rational错误
Administrator has detected that this is a terminal server session.Administrator does not support run ...
- SAP CRM和C4C数据同步的两种方式概述:SAP PI和HCI
SAP Cloud for Customer(C4C)和SAP其他传统产品进行数据同步的方式,如下图所示,可以使用SAP Netweaver Process Integration或者SAP HANA ...