1.准备一个python爬虫脚本
在pycharm上先编写好,简单的爬虫。
将文本粘贴到centos虚拟机
2.先查看底层镜像centos已有的命令和环境
2.1修改yum.repo的配置文件
可发现centos:latest版本是没有python环境,且各种命令不齐全,尤其yum命令需要修改其/etc/yum.repo.d下的配置文件,才能正常下载安装python3的各种依赖环境:
cd /etc/yum.repos.d
vi CentOS-Linux-BaseOS.repo
vi CentOS-Linux-AppStream.repo
CentOS-Linux-BaseOS.repo的内容修改为:
[baseos]
name=CentOS Linux $releasever - BaseOS
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
baseurl=https://vault.centos.org/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
CentOS-Linux-AppStream.repo的内容修改为:
[appstream]
name=CentOS Linux $releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
baseurl=https://vault.centos.org/centos/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2.2 安装python3的相关安装包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
坐等慢慢下载。。。。。
之后需要下载安装pip命令,才能下载、import各种库
安装epel扩展源:yum -y install epel-release
安装pip:yum -y install python-pip
发现出现问题:爆出下列错误
解决方案:
可以通过升级 libmodulemd
(dnf upgrade libmodulemd
) 解决。该问题已在 libmodulemd-2.13.0-1.fc33
中修复。
2.3将配置好的centos python环境 commit成新的镜像
docker commit -m=" 描述信息 " -a=" 作者 " 容器ID 创建的容器名
docker commit -m="python3 already exist" -a="FKasper" 9c5a904dbf9e centos_python
3.开始编写dockerfile
成功构建一个新的镜像
4.开始docker run,并注意将文件持久化保存
忘记pip包了。。。继续改写dockerfile。
记住CMD只有最后一个生效,前面都要用RUN来执行。
一共爬取600多张,可发现docker在结束时,也销毁了保存在容器中的储存文件。是docker run参数问题:
下午遇到一些未记录的问题,卡了很久。试过chcon,改过selinux,将CMD改为ENTRYPOINT各种方式。
最后是参数顺序的问题:
******一定一定一定把镜像名字放在最后
# docker run -v 宿主机路径:容器路径 镜像NAME
docker run -v /home/kasper/dockerfile_study/car:/home/kasper_test/car test_centos4
5.最终结果
# 最终dockerfile编写如下
# 为安装了python环境的centos
FROM centos_python
# 维护者信息
MAINTAINER FKasper
# 设置一个容器中的工作目录
WORKDIR /home/kasper_test
# 在目录下创建一个py脚本
RUN touch crab_car.py
# 将虚拟机中的py文件复制到容器目录中
COPY ./crab_car.py ./crab_car.py
copy ./car ./car
# pip需要的python库
RUN pip3 install requests lxml
RUN chmod 777 crab_car.py
# 启动脚本
ENTRYPOINT python3 crab_car.py
成功爬取车牌数据,并且在容器退出后仍然保留在宿主机内。 实验成功
******遇到未解决的问题
1.将Dockfile放到根目录下,无法执行build,报出的错误未有解决方案
2.莫名报错OCI错误,未能解决