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.shCMD ::容器启动时执行的命令
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 |
如果看到输出 百度一下,你就知道 ,说明构建成功了