十分钟入门Docker,带你成为Docker王者之篇三---Dockerfile实地考察

上一篇文章『十分钟入门Docker,带你成为Docker王者之篇』给你们讲了一下 Docker 中管理容器和镜像的经常使用命令,那么今天咱们就来讲一下,如何让你写的本地代码成为Image,编写DockerFile,而且分享给别人使用。超干货的哦~python

这篇文章的目录:git

  • 撸一份能够运行的本地代码;
  • 编写Dockerfile文件;
  • 运行本地 Image;
  • 注册Docker Hub帐号;
  • 将本地代码弄到Docker Hub上去;
  • 他人经过命令能够下载你的Image玩耍了。

0x00_本地撸一份能够运行的代码

这里呢,咱们就来很简单很简单的撸一个 Scrapy 爬虫代码,其实任何代码均可以, Hello World 也是能够的,只不过那样太简单了,因此咱们这边稍微弄一个不简单的。爬取 https://www.3dmgame.com/ 的新闻条目信息。github

这里关于Scrapy的爬虫怎么写,我这里就不作太多详细介绍了。docker

有一点,我这里必须先提早说一下:路径的问题! 数据库

有一点,我这里必须先提早说一下:路径的问题! bash

有一点,我这里必须先提早说一下:路径的问题! 服务器

如下讲解为经验之谈,对于初次接触到Scrapy运行路径的同窗来讲,会颇有帮助!

为何要说路径的问题,是由于Scrapy运行爬虫的时候,爬虫的路径和Scarpy命令是相关联在一块儿的。若是你的路径不对,就会出现如下报错:网络

# 错误一Scrapy 1.x.x - no activie projectUnknow command: Crawl复制代码

或者是:app

# 错误二No module named xxxx复制代码

这两种。咱们分别来讲明都发生了什么。dom

错误一的主要问题就是,你在移动你爬虫源代码的时候,你的爬虫引用出现了错误。这个错误是因为scrapy.cfg里面针对于settings路径变化引发的。错误二是因为settings.py文件里面的变量没有修改

Scrapy爬虫的爬虫依赖主要有这么两个地方,在每次移动的时候,你都要看看这两个位置是否须要修改:

  • scrapy.cfg 文件里面的 [settings] default = xxxxx.settings。这里你得看一下你得default对应的路径,是不是你工程的 settings.py 文件。
  • settings.py 文件里面,SPIDER_MODULES, NEWSPIDER_MODULE这两个变量是否在修改了文件路径以后,也须要修改路径变量值。以及在这个文件中若是要引入pipelinemiddleware,那么这两个变量的路径值,是否也要修改。

其实目前咱们这一步还不须要修改路径,这里只是简单说一下,以备后用。你们的工程目录能够看下图:

咱们接着说代码的事儿。这里只是把关键的核心Spider的代码简单贴一下,若是有小伙伴想看详细代码,能够去:https://github.com/SwyftG/DockerLearn/tree/dev/DockerPySpider 这里查看。

# Spider.pyclass SamplespiderSpider(scrapy.Spider): name = 'SampleSpider' allowed_domains = ['www.3dmgame.com'] def start_requests(self): start_url = "https://www.3dmgame.com/" yield Request(url=start_url, callback=self.parse_block_page, dont_filter=True) def parse_block_page(self, response): news_list = response.xpath("//div[@class='Listwrap']//a").extract() for content_item in news_list: selector = Selector(text=content_item) spider_item = DockerpyspiderItem() spider_item['title'] = selector.xpath("//text()").extract_first() spider_item['url'] = selector.xpath("//@href").extract_first() print(spider_item)# Items.pyclass DockerpyspiderItem(scrapy.Item): title = scrapy.Field() url = scrapy.Field()复制代码

简单在本地运行一下,发现爬虫是能够跑通的。

咱们进行下一步很关键的操做,编写Dockerfile。

0x01_纯手工打造Dockerfile

参考地址:
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

若是要编写Dockerfile,首先第一步就是建立一个文件,叫Dockerfile注意:没有任何文件后缀Dockerfile 的位置,就在那个路径图里面标出来了:

接下来,咱们来简单分析一下咱们的 Dockerfile 里面应该操做些什么:

  • 建立Python环境;
  • 将代码和 requirement.txt 拷贝到镜像里面;
  • 安装依赖;
  • 运行程序。

恩,就是简简单单的这么几步,固然,这里只是最简单的说一下运行简单Scrapy爬虫的 Dockerfile 怎么写, Dockerfile 能够写的很复杂,并且有些状况必须写的很复杂,好比初始化数据库啊之类的。

这里我就先把这个项目的 Dockerfile 给先贴出来,和你们说一说:

FROM python:3.6COPY . .RUN pip3 install --no-cache-dir -r requirements.txtCMD [ "python3", "RunSpider.py" ]复制代码

你们能够看到,就是简简单单的四行语句:

  • 第一行,FROM 表明你如今的Image是须要在哪一个Docker Image之上运行的。咱们这里本地是Python3.6,Scrapy爬虫也是在 Python3.6的环境里面跑的,因此咱们这里就 FROM python:3.6,注意,最后那里有 :3.6 版本号标注。若是不标注,Docker 则会自动使用 latest 版原本编译。
  • 第二行,很简单,就是说将当前目录下的代码,拷贝到 Image 里面,这里也就是 python 3.6 的 Image 里面。若是有特定的路径要求,这里能够知足。
  • 第三行,则是用 pip3 经过咱们代码里面的 requirements.txt 文件来安装工程依赖。相信使用过 pip 的同窗,对这一步都很熟悉。
  • 第四行,经过 CMD 命令来运行咱们的爬虫程序,这里翻译过来就是 $ python3 RunSpider.py 命令。

是否是很简单?固然,若是以为这么简单就可以玩转Dockerfile,那是不可能的。想了解更多的,能够去参考如下连接内容:

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

额外小技巧

这里要多说一下,就是寻找 Docker Image的方法。 咱们固然能够经过上篇文章所说的 $ docker search xxxx 命令来找 xxxx 的 Image ,可是为了更加直观的寻找Image,咱们能够去:

https://hub.docker.com/

里面搜索,好比咱们搜索 python,就会出现下面的页面:

咱们点第一个进去看一下:

能够看到,这里全是 PythonTags。因此,若是咱们未来不管是写 Dockerfile 仍是写 docker-compose.yml 文件,FROM 字段和 IMAGE 字段以后的内容,均可以来 hub.docker.com 这里来找。

0x02_套马的汉子跑起来

这个时候,咱们既然已经编写了 Dockerfile,那么咱们就赶忙来 $ docker build 一下吧。

首先,进入到你的项目目录里面,而后,经过命令:

$ docker build -t mybuild .复制代码

来编译咱们的Image。这里我来简单说一下这个命令是怎么个回事儿:

  • -t mybuild 这俩是一块儿的, -t 后面跟着的是你 Image 的名字。
  • . 这个则是表明编译工做在当前目录里寻找 Dockerfile 来进行编译。固然,你也能够指定路径。我这么弄彻底是为了简单。

若是,你的编译出错了,像我这样:

梳理一下你的网络,而后重启一下 Docker 服务就行了。重启完,咱们接着编译:

你们看,这里就成功建立了咱们的 Image,名字就叫 mybuild,和 -t 后面的值是同样的。那么咱们经过命令来看一下:

$ docker run mybuild复制代码

结果以下:

OK,能够看到 3dm 的新闻信息已经打印出来了,很完美。接下来咱们须要把这个 Image 放到 DockerHub 上让你们使用了。

0x03_代码放到DockerHub

想要把你的代码放到 Dockerhub 上,那么第一步就须要把你的代码得放到 GitHub 上。

https://github.com/

至于这里怎么把你的代码放到 GitHub 上,皮爷这里就很少说了,由于这个很简单并且很基础,不会的同窗能够百度查一下,皮爷这里就直接给你们看现成的吧,这一篇文章的代码皮爷放到了dev分支下面,记住,分支名称很关键:

既然放好代码了,咱们接下来就就要去 DockerHub 申请帐号了。

https://hub.docker.com/signup

成功注册以后,咱们登陆。登陆 完成以后,咱们点击最上面导航栏里面的 Repositorys,而后点击 Create Repository

咱们就来到了建立界面:

这里有几点要简单说明一下:

  • 第一个红框,是让你输入Image名字的;
  • 第二个红框,你能够建立Private和Public两种Image,具体区别如同字面意思;
  • 第三个红框,这个就是你Docker Image的代码来源。神奇不?看到 GitHub 了吗?想到咱们刚才所作的了吗?

咱们点击 GitHub 来看一下:

这里有几点注意的地方:

  • 第一个红框,选用的是 GitHub 代码;
  • 第二个红框,填写的则是你的 GitHub 的代码具体仓库,这里则是SwyftG/DockerLearn;
  • 第三个红框,则是填写你要编译代码的分支,这里咱们强调一下,是 Dev 分支!

最后,咱们点击 Create&Build 按钮,就建立成功了。

若是想看 Build 信息,就在 Build 里面看。若是你的代码作了修改,而后也在 GitHub 上更新了代码,你想从新 Build 一下你的 Docker Image,那么你在 Build 里面也能够设置选项,来从新 Build 你的 Image。

既然咱们已经把代码放到了 DockerHub 上,咱们就来看看咱们的 Image 是否可以找获得吧:

很完美,能够找到~~~

0x04_开始放纵玩耍

此时,你的代码已经编译成功, 而且放到了 Docker Hub 上,那么咱们就来让其余小伙伴玩耍吧。

$ docker run seyftg/3dmspider# 或者把 Image 下载下来$ docker pull swyftg/3dmspider复制代码

无论怎样,咱们均可以看到,$ docker images 里面有了咱们的 swyftg/3dmspider Image。

无论你是在本地运行,仍是在小伙伴的电脑上运行,仍是在你的云服务器上运行,如今这个样子的运行方式,是否是超级轻松方便?就如同咱们开局所说的,Docker 的 Image 就是一个模具,你拿着这个模具能够在任何机器上面运行。酷炫不酷炫?方便不方便?哈哈哈哈

0x05_课后小练习?

好了,咱们今天咱们主要说了如何让本地代码制做成 Docker Image,而后如何放到 DockerHub 上,再分享给别人的过程。

那么皮爷有个疑问,就是:若是我想启动一个 Scrapy 的 Spider Image,而后又想启动一个 MongoDB 数据库的Image,我要怎么作呢??

这么好评的干货文章,你们帮忙点个右下角的好看呗,你这么帅,不点好看怎么过去啊。

喜欢的能够关注公号『皮爷撸码』,回复『代码』,其中DC001就是 Docker 系列的代码,你们能够学习一下。你这么帅气,还不关注一下啊???

相关文章
相关标签/搜索