笔记-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还有一些需要解决的问题:

  1. 爬虫运行环境:首先是需要一个安装有scrapy的镜像,其中包含爬虫常用的库;这个前文已经实践过了,不多言;
  2. 爬虫部署及运行:最先想到的方法是在一个容器中测试爬虫成功运行,对此提交新的镜像版本,然后在多个服务器拉取镜像,运行;
  3. 爬虫对外交互问题:上面的实验可以发现对外通讯不需要额外做什么(主要是爬虫不需要对外提供服务,无所谓端口),

爬虫主要的数据交互可以使用redis完成;

日志监控可使用docker run -v挂载服务器目录到容器中,用于写日志,然后监控日志获取爬虫运行状态;

  1. 爬虫管理问题:监控日志,发现爬虫死了,把容器重启就可以了,主爬虫可能麻烦一点,需要设计良好的列表页过滤机制,子爬虫没有任何影响。

笔记-docker-3 使用的更多相关文章

  1. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  2. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  3. Docker学习笔记 — Docker私有仓库搭建【转载】

    标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报  分类: Docker(26)    目录(?)[+]   和Mavan的管理一样,Dockers不仅 ...

  4. Docker学习笔记 - Docker Compose 脚本命令

    Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...

  5. Docker学习笔记 - Docker Compose

    一.概念 Docker Compose 用于定义运行使用多个容器的应用,可以一条命令启动应用(多个容器). 使用Docker Compose 的步骤: 定义容器 Dockerfile 定义应用的各个服 ...

  6. Docker学习笔记 - Docker部署nginx网站

    一.制作 nginx 镜像 1.下载配置文件 mkdir /opt/nginx_docker && cd /opt/nginx_docker mkdir nginx && ...

  7. Docker学习笔记 - Docker容器的日志

    docker logs  [-f]  [-t]  [--tail]  容器名 -f -t --tail="all" 无参数:返回所有日志 -f 一直跟踪变化并返回 -t 带时间戳返 ...

  8. Docker学习笔记 - Docker的数据卷

    一.什么是数据卷? 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据 ...

  9. Docker学习笔记 - Docker的容器

    docker logs  [-f]  [-t]  [--tail]  容器名 -f -t --tail="all" 无参数:返回所有日志 -f 一直跟踪变化并返回 -t 带时间戳返 ...

  10. Docker学习笔记 - Docker的镜像

    一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面 ...

随机推荐

  1. 跨平台图表控件TeeChart使用教程:导入XML数据

    TeeChart的最新版中包含了一个自动加载XML数据的新组件.这个组件的名字叫做TTeeXMLSource,用户可以在TeeXML.pas unit中找到这个组件. 加载XML图表所需的最小属性是& ...

  2. Python开发环境Wing IDE的Blender的Python代码调试技巧

    Wing IDE是一个集成开发环境,可用于开发.测试和调试为Blender编写的Python代码,Blender是一个开源的3 D内容创建系统.Wing IDE提供自动完成.调用提示.强大的调试器.以 ...

  3. SPFieldLookupValue

    //得到查阅项的值SPWeb web = site.OpenWeb();SPList list = web.Lists["DemoList"];SPListItem item = ...

  4. Arcgis for Js之鼠标经过显示对象名的实现

    在浏览地图时,移动鼠标经过某个对象或者POI的时候,能够提示该对象的名称对用户来说是很实用的,本文讲述在Arcgis for Js中,用两种不同的方式来实现该效果. 为了有个直观的概念,先给大家看看实 ...

  5. mysql:数据库保存时间的类型——int和datetime的区别

    我们都知道,时间保存在数据库中,可以选择使用两种类型,一种是int,一种是datetime 那么,它们两个有什么区别呢?要怎么用呢? 现在和小仓鼠一起来探讨一下 1.int和datetime的使用区别 ...

  6. 141. Linked List Cycle (amazon)

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  7. Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)

    题目链接:http://codeforces.com/contest/742/problem/E 题意: 有一个环形的桌子,一共有n对情侣,2n个人,一共有两种菜. 现在让你输出一种方案,满足以下要求 ...

  8. linux客户端传输文件到Windows本地

    1.rz/sz安装及使用方法 和 FileZilla 功能类似用于上传文件,上传速度比较慢适用比较小的文件  yum安装: $ sudo yum install lrzsz   打开SecureCRT ...

  9. python导入其他文件夹下的.py文件

    想在globalpararm中导入read_config中的类 import sys sys.path.append('..') from common.read_config import Read ...

  10. while counter<10:

    [root@chenbj test]# python Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat ...