介绍
介绍
大家根福哥学会了使用Dockerfile创建Docker镜像的技巧了,那么我们现在搭建服务器环境就不需要再去下载软件的源代码了,也不需要编译安装了,更加不用操心软件和操作系统的各种兼容问题了。
今天福哥带着大家来安装python的环境,Python能做的事情非常多,不过福哥这里先用它来实现搜索引擎的爬虫功能。前面我们已经学到了使用Python实现爬虫功能需要selenium库以及chrome插件,今天福哥就带着大家编写Python+selenium的Dockerfile配置文件。
镜像
tag
看到hub上面已经找不到python2.7的镜像了,所以福哥只能选择python3.8了。
结构
照例我们先把镜像拉取下来,然后启动一个容器,看看里面都有什么,弄明白了自己才好捣鼓啊!
拉取镜像
docker pull python:3.8-buster
启动临时容器
docker run -tid --name python3.8 -h python3.8 python:3.8-buster
切入临时容器
docker exec -ti python3.8 "/bin/bash"
查看结构
python的版本是3.8.10。
pip的版本是21.1.1。
停止临时容器
docker stop python3.8
删除临时容器
docker rm python3.8
手动安装
福哥先在临时容器里面手动安装一遍环境,然后再整理到Dockerfile里面,这样大家会看得比较清楚一些~~
更新apt
我们需要安装一些工具,需要用到apt命令,用之前需要先更新一下。
apt-get update
安装依赖库和工具
部分扩展需要从外面下载,所以wget还是需要的。
apt-get -y install wget
准备安装包目录
我们还是建立一个目录用来保存软件的安装包。
mkdir /packages cd /packages
selenium
首先我们先来安装selenium库,直接提供pip安装即可。
pip install selenium
chrome
在debian里安装chrome是使用deb格式的安装包的。
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb dpkg -i google-chrome-stable_current_amd64.deb
直接使用dpkg安装会提示缺少一堆的依赖项,可以使用下面的命令把依赖项安装上来。
apt-get -fy install
再来使用dpkg安装就不会报错了。
dpkg -i google-chrome-stable_current_amd64.deb
chrome驱动
除了chrome浏览器的Linux版本外,还需要安装驱动,让Python可以调用chrome浏览器。
wget https://chromedriver.storage.googleapis.com/90.0.4430.24/chromedriver_linux64.zip unzip chromedriver_linux64.zip mv chromedriver /usr/bin/ chmod +x /usr/bin/chromedriver
验证
使用下面的程序验证Python+selenium环境是否安装成功了!
from selenium import webdriver import time import re # make options of Chrome opts = webdriver.ChromeOptions() opts.add_argument("--headless") opts.add_argument("--disable-gpu") opts.add_argument("--no-sandbox") # init Chrome chrome = webdriver.Chrome(options=opts); # call baidu.com chrome.get("http://www.baidu.com") # add keyword and press submit input = chrome.find_element_by_id("kw") input.send_keys("site:tongfu.net") button = chrome.find_element_by_id("su") button.click() # wait a moment time.sleep(3) # check source code source = chrome.page_source regexp = re.compile("同福主页 - 首页 - 同福网 - TONGFU.net", re.M) mats = regexp.search(source) if mats: print (mats.group()) else: print ("miss match") # quit Chrome chrome.quit()
Dockerfile
最后福哥把前面的设置命令整理到一起写成Dockerfile,这样大家就可以通过Dockerfile安装环境了。
由于在Dockerfile里面通过RUN执行命令的时候,一旦执行过程中出现返回非0结果的情况就会终止创建镜像。所以安装chrome的时候的那些依赖项就不能通过dpkg的特性一并交给apt-get安装了,需要一个一个地整理出来,福哥也是无语了~~
FROM python:3.8-buster MAINTAINER Andy Bogate MAINTAINER tongfu@tongfu.net MAINTAINER http://docker.tongfu.net WORKDIR /tongfu.net/web # env RUN apt-get update \ && apt-get -y install wget # package build RUN mkdir /packages # selenium RUN pip install selenium # chrome RUN cd /packages \ && wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ && apt-get -y install fonts-liberation \ libasound2 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libatspi2.0-0 \ libcups2 \ libdbus-1-3 \ libdrm2 \ libgbm1 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libxcomposite1 \ libxdamage1 \ libxfixes3 \ libxkbcommon0 \ libxrandr2 \ libxshmfence1 \ xdg-utils \ && dpkg -i google-chrome-stable_current_amd64.deb # chrome driver RUN cd /packages \ && wget https://chromedriver.storage.googleapis.com/90.0.4430.24/chromedriver_linux64.zip \ && unzip chromedriver_linux64.zip \ && mv chromedriver /usr/bin/ \ && chmod +x /usr/bin/chromedriver # package delete RUN rm -rf /packages
总结
今天福哥带着大家使用Dockerfile基于3.8-buster镜像搭建了Python+selenium微服务环境了,可以发现使用Dockerfile方式搭建环境我们真的只需要关心我们需要关心的部分,繁琐的编译参数、依赖库、环境参数等等一系列的问题基础镜像都给我们解决好了。
下一课,福哥会带着搭建学习使用Dockerfile搭建MySQL环境,敬请期待~~