使用dockerfile创建docker镜像

什么是docker?看这里Docker_入门?只要这篇就够了!纯干货适合0基础小白

创建docker镜像

两种方式:docker commitdockerfile

commit命令创建本地镜像

commit命令是使用我们本地已经创建好的容器打包成镜像,这种方式方便简单,但是有一个缺点,就是这种方式生成的镜像中会包含很多我们使用容器过程中产生的中间文件,可能是缓存或者垃圾文件。这样创建出来的镜像拉起的容器都会包含这些垃圾文件。所以一般不推荐这种方式。

dockerfile

将需要对镜像进行的操作全部写到一个Dockerfile名字的文件中,然后使用docker build命令从这个文件中创建镜像。这种方法可以使镜像的创建变得透明和独立化,并且创建过程可以被重复执行。Dockerfile文件以行为单位,行首为Dockerfile命令,命令都是大写形式,其后紧跟着的是命令的参数。

先创建一个空目录mkdir /usr1/xmla_python,然后在目录下创建Dockerfile文件

# 基础镜像
FROM python:3.6

# 作者信息
MAINTAINER xingxingzaixian "[email protected]"

# 设置工作目录
WORKDIR /app

# 拷贝本地requirements.txt文件到镜像的/app目录下
ADD requirements.txt /app

# 把scrapyd配置文件拷贝到镜像指定目录
ADD scrapyd.conf ~/.scrapyd.conf

# 创建scrapyd数据目录,设置时区,保证镜像时间正常,安装python环境库
RUN mkdir /scrapyd  && 
        pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com -r requirements.txt

# 开放端口,主要是scrapyd端口
EXPOSE 6800 80

# docker容器启动时执行scrapyd命令,启动scrapyd
CMD ["scrapyd", "redis-server"]

创建requirements.txt,主要是用来初始化python环境

scrapy==1.5.0
scrapyd==1.2.0
redis==2.10.6
scrapy-redis==0.6.8
lxml==4.2.1
requests==2.18.4

创建scrapyd.conf文件,主要是配置scrapyd环境,在我们的Dockerfile文件中使用ADD

[scrapyd]
# 项目的eggs存储位置
eggs_dir = /scrapyd/eggs

# scrapy日志的存储目录。如果要禁用存储日志,请将此选项设置为空,logs_dir=
logs_dir = /scrapyd/logs

# scrapyitem将被存储的目录,默认情况下禁用此项,如果设置了值,会覆盖scrapy的FEED_URI配置项
items_dir =

# 每个蜘蛛保持完成的工作数量。默认为5
jobs_to_keep = 5

# 项目数据库存储的目录
dbs_dir = /scrapyd/dbs

# 并发scrapy进程的最大数量,默认为0,没有设置或者设置为0时,将使用系统中可用的cpus数乘以max_proc_per_cpu配置的值
max_proc = 0

# 每个CPU启动的进程数,默认4
max_proc_per_cpu = 4

# 保留在启动器中的完成进程的数量。默认为100
finished_to_keep = 100

# 用于轮询队列的时间间隔,以秒为单位。默认为5.0
poll_interval = 5.0

# webservices监听地址
bind_address = 0.0.0.0

# 默认 http 监听端口
http_port = 6800

# 是否调试模式
debug = off

# 将用于启动子流程的模块,可以使用自己的模块自定义从Scrapyd启动的Scrapy进程
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root

[services]
schedule.json     = scrapyd.webservice.Schedule
cancel.json       = scrapyd.webservice.Cancel
addversion.json   = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json  = scrapyd.webservice.ListSpiders
delproject.json   = scrapyd.webservice.DeleteProject
delversion.json   = scrapyd.webservice.DeleteVersion
listjobs.json     = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus

主要是eggs_dir、logs_dir、dbs_dir三个目录配置,其他的可以默认,这三个目录的主目录/scrapyd,我们在Dockerfile文件的RUN命令中添加mkdir /scrapyd来创建

以上创建完以后我们就可以使用docker build命令来构建镜像了

执行docker build -t scrapy_python .命令构建镜像,其中-t参数指定镜像名,.则为Dockerfile文件的路径

数据库就不安装在docker里面了,我们只需要在一台机器上安装redis和MongoDB就行了,没必要在每台机器上都部署,这块我们暂时不做集群处理,以后再优化。

安装完docker后就可以启动了:docker run -it /bin/bash -p 6800:6800

-p:映射容器端口到主机


如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路
也可以扫描下面二维码,添加我的微信公众号

公众号
使用dockerfile创建docker镜像_第1张图片
赞赏码

你可能感兴趣的:(使用dockerfile创建docker镜像)