Dockerfile 部署python爬虫脚本/Java项目大全
程序员文章站
2022-06-11 13:29:03
...
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 .
- 需要自定义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 启动参数
[[email protected] 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
[[email protected] python-spider]# ls
Dockerfile proxy
[[email protected] 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 镜像名