Docker实现Python+selenium+chrome服务
在 Linux 系统上使用 Docker 实现 Python+selenium+chrome 服务
环境
Centos 7.2
安装
安装Docker
安装docker-compose
docker-compose是用于定义和运行多容器Docker应用程序的工具,在windows系统不需要安装,在linux系统上运行需要安装
下载稳定版本:
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.28.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
对二进制文件应用可执行权限:
1 | sudo chmod +x /usr/local/bin/docker-compose |
Docker官方:
拉取镜像
拉取 python:3.8 :
1 | docker pull python:3.8 |
拉取 selenium/standalone-chrome:
1 | docker pull selenium/standalone-chrome:latest |
selenium/standalone-chrome官方:
准备文件
创建一个 ceshi
目录,该目录下有以下五个文件:
Dockerfile
:用于构建新Python镜像,因为要安装seleniumdocker-compose.yml
:用于定义和运行多容器Docker应用程序的工具main.py
:Python代码install.sh
:为了不让 Dockerfile
文件看起来太长,将一些命令写在这里Pipfile
:Python包管理
Dockerfile
用来构建新Python镜像,因为还没有安装 selenium 库
1 | FROM python:3.8 |
FROM
:基础镜像COPY
:将 ceshi
目录下的所有文件复制到容器 /code
目录下WORKDIR
:指定 /code
为工作目录RUN
:构建镜像时执行的命令,这里用来执行 install.sh
CMD
::容器启动时执行的命令
docker-compose.yml
1 | version: "3.6" |
image
:指定镜像,mypy:latest
镜像后面会创建container_name
:指定容器名称volumes
:数据挂载,冒号 :
前面是宿主机路径,后面是容器内路径;第一行同步宿主机与容器时间;第二行同步代码depends_on
:依赖ports
:宿主机端口映射容器端口,需确保安全组已开放4444端口shm_size
:大小
main.py
容器启动时要执行的Python代码
1 | import time |
selenium-chrome:4444
对应 docker-compose.yml
文件中的的容器名称 selenium-chrome
和端口 ports
install.sh
因为我习惯使用 pipenv 来管理虚拟环境、包及依赖,自然有 Pipfile
和 Pipfile.lock
这两个文件,那么 install.sh
内容为:
1 | # 更新pip至最新版、安装pipenv、创建虚拟环境并安装依赖包 |
如果没有使用过 Pipenv ,可以手动创建一个 Pipfile
文件(文件内容看后面说明),那么 install.sh
内容为:
1 | # 更新pip至最新版、安装pipenv、创建虚拟环境、安装依赖库(第三方库) |
pipenv update
相当于执行 pipenv lock
和 pipenv sync
两个命令
Pipfile
Python包管理
1 | [[source]] |
url
:清华源,用于加速下载第三方库,这就是为什么要手动创建 Pipfile
文件,因为要修改这里selenium
:要安装的库python_version
:Python版本,需与使用的Python镜像版本一致
构建mypy镜像
在 ceshi
目录下执行
1 | docker build -t mypy:latest . |
查看镜像
1 | docker images |
应该看到有一个 mypy
镜像
启动Python+selenium+chrome
在 ceshi
目录下执行
1 | docker-compose up -d |
查看容器
1 | docker ps -a |
这时有 cs 、selenium-chrome 两个容器
查看 cs 容器日志
1 | docker logs cs |
如果看到输出 百度一下,你就知道
,说明构建成功了