Dockerfile 部署python爬虫脚本/Java项目大全

Python爬虫项目

安装虚拟环境

# linux 安装
pip3 install virtualenv   
# windows10
# virtualenvwrapper-win
pip install virtualenv
# 创建虚拟环境
mkvirtualenv <虚拟环境名称>

使用Pycharm 进行 依赖管理

# 获取requirements.txt 配置文件
pip freeze>requirements.txt
# 根据 requirements.txt 安装依赖
pip install -r requirements.txt

项目部署(方法一)

这是一种复杂的构建方案,目的是为了学习Dockerfile的使用 (不推荐使用方法部署)
—1)手动构建一个python 可用的执行容器
—2)线上部署不推荐
—3)可以使用官方镜像 直接发布,避免容器 映射 copy 的麻烦

1) 首先安装docker:
# 用 yum 安装并启动
yum  install docker -y && systemctl start docker
2) 下载自定义镜像需要用到的基础镜像:
# 这里以centos7为例
docker pull centos:centos7
3) 基础镜像已经准备好了,接下来准备好需要部署的环境服务,以及python项目:
# 安装下载工具
yum install wget 
### 创建 dockerfile 文件
mkdir dockerfile && cd dockerfile
### 下载 python(这里以3.7为例)
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
### 下载 openssl (非必要操作)
### wget http://www.openssl.org/source/openssl-1.1.1.tar.gz

### 将 python 项目<复制/上传>到此目录
### cp ~/test.py .
### 以及 python 项目的依赖库
### cp ~/requirements.txt .
  1. 需要自定义docker镜像的大致内容准备好了,接下来编写dockerfile:
### 使用执行容器
FROM centos:centos7
### 设置镜像创建者名称
MAINTAINER Amewin
### 下载编译需要用到的软件 python
RUN yum install -y gcc gcc-c++ autoconf automake libtool make zlib* libffi-devel
### 下载编译需要用到的软件 openssl
RUN yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++

### 安装openssl
ADD openssl-1.1.1.tar.gz /usr/local/src
### 示例:将得到如下文件夹 /usr/local/src/openssl-1.1.1
# 等价如下命令
#COPY openssl-1.1.1.tar.gz /usr/local/src
#WORKDIR /usr/local/src
#RUN tar -zxvf openssl-1.1.1.tar.gz

### ADD 和 COPY 两个命令类似 都可以拷贝 文件或文件夹
### (只要不是压缩包 ADD COPY 没有本质区别,官方建议使用:COPY)
### ADD 解压到指定文件夹<文件夹不存在会自动创建> 注意:源压缩文件不会复制进images

### 设置切换目录
WORKDIR /usr/local/src/openssl-1.1.1
### 设置ssl环境变量
RUN ./config --prefix=$HOME/openssl shared zlib && make && make install
### RUN 执行指定命令 多条指令可以 && 连接
RUN source $HOME/.bash_profile
### 安装openssl end

### 将dockerfile目录下的python-3.7.3.tgz复制到docker容器内
COPY Python-3.7.9.tgz /usr/local/src
WORKDIR /usr/local/src
RUN tar -xf Python-3.7.9.tgz

### 类似于如下命令 但 /usr/local/src/Python-3.7.9.tgz 不存在
### ADD Python-3.7.9.tgz /usr/local/src

WORKDIR /usr/local/src/Python-3.7.9
### --with-openssl=$HOME/openssl (非必要参数)
RUN ./configure --prefix=/usr/local/python37 --with-openssl=$HOME/openssl && make && make install
### 设置环境变量
ENV PATH /usr/local/python37/bin:$PATH

### 将python项目复制到 /spider工作目录下
COPY ./proxy /spider
### 设置 /spider 为工作目录
WORKDIR /spider
### 下载 python 项目的依赖库
RUN pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
### 在创建个爬取的数据存放的目录,这个需要根据自己代码里面设置的目录来创建,例如:
### VOLUME /data

### 更改openssl 避免 No module named _ssl 
### 必须安装编译后,在执行,该命令不然那报错
RUN echo '_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto' \
>> /usr/local/src/Python-3.7.9/Modules/Setup
### WORKDIR 切换目录
WORKDIR /usr/local/src/Python-3.7.9
### 进行安装
RUN  make && make install
### 修改 docker exec -it <id/imagesName> bash 进入默认路径
WORKDIR /spider
### 最后一步,运行docker镜像时运行自己的python项目
### 可以多个参数: CMD ["python3","a","main.py"]
CMD ["python3","main.py"]
### CMD 该方法是可被 /bin/bash -c "nohup ping -i 1000 www.baidu.com" 覆盖
###  docker run -d centos /bin/bash -c "nohup ping -i 1000 www.baidu.com"

### ENTRYPOINT ["python3","main.py"]
### ENTRYPOINT CMD 类似 但ENTRYPOINT 不允许 更改run 参数

更改COMMAND 启动参数

[root@A python2]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
cd0bc9ff8cf3        python1:v1          "python3 main.py"        4 hours ago         Up 4 hours                                                                 proxy1
be8263c3b5b3        python1:v1          "/bin/bash -c 'nohup…"   4 hours ago         Up 4 hours                                                                 proxy2

项目部署(方法二)

1)配置部署环境
# 获取python images 环境 根据实际需求选择
docker pull python:3.9
#docker pull python:3.8
#docker pull python:3.7
# 创建目录
mkdir -p /mydata/python-spider
cd /mydata/python-spider
touch Dockerfile
# 将运行项目copy到proxy内
mkdir proxy
vi Dockerfile
[root@Amewin python-spider]# ls
Dockerfile  proxy
[root@A test]# vi Dockerfile
2)编写Dockerfile
# 使用python3.9镜像创建
FROM python:3.9
# 作者名称
MAINTAINER Amewin
# 将spider 拷贝到容器内/data 
# COPY (宿主机目录/文件) (容器目录)
COPY ./proxy /spider 
# 切换工作目录
WORKDIR /spider 
# 执行shell 下载相关依赖
RUN pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
# 容器启动 run 启动参数
CMD ["python3","main.py"]
3)执行Dockerfile
### docker build -t 镜像名:版本号   镜像名:版本号 均为自定义  别忘了末尾的点“.”
docker build -t pythonspider:v1 .

### 通过 docker images命令就可以看到刚刚创建的镜像
docker images

### 运行
docker run -d --name spider  pythonspider:v1
### -d为后台运行,--name 后面设置容器名,-v 是目录共享,主机目录和docker容器内目录共享。创建dockerfile的时候,有这一句 VOLUME /data 就是作为共享目录使用的,“:”前的目录为主机目录,后面的目录为容器内目录。。。 最后一个参数 pythonspider:v1 镜像名

Docker run 常用参数大全

–add-host list添加自定义主机到ip映射(书写格式为:主机:ip)
-a, --attach list附加到STDIN、STDOUT或STDERR上
–blkio-weight uint16Block IO (相对权重),取值10到1000之间,0为禁用(默认0)
–blkio-weight-device listBlock IO weight (相对于设备的权重) (默认为数组的形式)
–cap-add list添加Linux功能
–cap-drop list删除Linux功能
–cgroup-parent string容器的可选父级对照组项
–cidfile string将容器ID写入文件
–cpu-period int限制CPU CFS(完全公平调度程序)周期
–cpu-quota int限制CPU CFS(完全公平的调度程序)上限
–cpu-rt-period int限制CPU运行时周期(以微秒为单位)
–cpu-rt-runtime int限制CPU实时运行时间(以微秒为单位)
-c, --cpu-shares intCPU 共享 (相对权重的设定)
–cpus decimal设定cpu的数量
–cpuset-cpus string允许执行的cpu (0-3,0,1)
–cpuset-mems string允许执行的MEMs (0-3,0,1)
-d, --detach在后台运行容器并打印容器ID
–detach-keys string覆盖分离容器的键序列
–device list向容器添加主机设备
–device-cgroup-rule list向 cgroup 允许的设备列表中添加一个或多个规则
–device-read-bps list限定设备的读取速率(单位: byte/s)(默认为 [])
–device-read-iops list限定设备的读取速率(单位:IO/s)(默认为 [])
–device-write-bps list限定设备的写入速率(单位: byte/s)(默认为 [])
–device-write-iops list限定设备的写入速率(单位:IO/s)(默认为 [])
–disable-content-trust跳过镜像验证(默认为 true)
–dns list设置自定义DNS服务器
–dns-option list设置DNS选项
–dns-search list设置自定义的DNS搜索域
–entrypoint string覆盖镜像的默认入口点
-e, --env list设置环境变量
–env-file list读取环境变量内容
–expose list公开一个端口或多个端口
–group-add list添加其他要加入的组
–health-cmd string命令运行以检查健康
–health-interval duration运行检查之间的时间(ms|s|m|h)(默认为 0s)
–health-retries int连续的失败需要报告不健康
–health-start-period duration启动健康重试倒计时前容器初始化的启动周期(ms|s|m|h)(默认为 0s)
–health-timeout duration健康检查运行情况的最大时间值 格式为:(ms|s|m|h) (默认 0s)
–help打印出使用情况
-h, --hostname string定义容器主机名
–init在容器中运行初始化,以转发信号并获取进程
-i, --interactive即使没有连接,也保持STDIN开放
–ip string设定容器的 IPv4 地址 (例如,192.168.155.139)
–ip6 string设定IPv6地址(例如,2001:db8::33)
–ipc string使用IPC模式
–isolation string容器隔离技术
–kernel-memory bytes内核内存限制
-l, --label list在容器上设置元数据
–label-file list在以行分隔的标签文件中读取
–link list向另一个容器添加链接
–link-local-ip list容器 IPv4/IPv6 链接本地地址
–log-driver string设定容器的日志驱动
–log-opt list设定日志驱动器选项
–mac-address string配置容器MAC地址(例如,92:d0:c6:0a:29:33)
-m, --memory bytes设定内存限额
–memory-reservation bytes内存软限制
–memory-swap bytes交换限制等于内存加上交换:’-1’,以启用无限交换
–memory-swappiness int优化容器内存交换 (0 到 100) (默认为 -1)
–mount mount将文件系统挂载附加到容器
–name string为容器指定一个名称
–network string将容器连接到网络
–network-alias list为容器连接的网络添加别名
–no-healthcheck禁止任何容器指定 HEALTHCHECK
–oom-kill-disable禁止OOM事件被杀死
–oom-score-adj int优化主机的OOM事件 ,参数范围 (-1000 到 1000)
–pid string设定PID命名
–pids-limit int优化容器pid限制(如果设置-1则为无限制)
–privileged赋予容器扩展的权限
-p, --publish list将容器的端口发布到主机
-P, --publish-all将所有公开的端口发布到随机端口
–read-only将容器的根文件系统挂载为只读(后面会详细讲到)
–restart string配置容器的重启策略,当容器退出时重新启动(默认为“no”)
–rm当容器退出时自动移除这个容器
–runtime string使用容器的运行时
–security-opt list指定docker启动的安全项
–shm-size bytes/dev/shm 的大小(这个可以使其容量进行动态的扩展)
–sig-proxy设置代理接收京城信号 (默认为 true)
–stop-signal string停止容器的信号 (默认为 “SIGTERM”)
–stop-timeout int设置超时停止容器(以秒为单位)
–storage-opt list设定容器的存储驱动程序选项
–sysctl map指定系统控制项 (默认为 map[] 的格式)
–tmpfs list挂载tmpfs目录
-t, --tty为当前容器分配一个客户端
–ulimit ulimit启动需要限制的项(默认为数组的形式)
-u, --user string用户名或UID(格式为: <name|uid>[:<group|gid>])
–userns string使用用户名称空间
–uts string使用UTS名称空间
-v, --volume list绑定安装卷(关于容器卷,在Docker容器数据卷中会具体的讲解)
–volume-driver string容器的可选卷驱动程序
–volumes-from list指定容器装载卷
-w, --workdir string容器内的工作目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值