docker运行爬虫代码
系统:Ubuntu
在项目根目录的同级目录下新建 Dockerfile 文件,这个Dockerfile就作为打包项目的配置文件
但是在这之前我还要做一件事情:就是将 python 依赖的一些基础环境打包成一个基础镜像,作为我们以后制作项目镜像的基础镜像,所以就有了 Dockerfile 文件。
docker 启动与停止
启动
systemctl start docker
查看状态
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor p>
Active: active (running) since Tue 2020-07-28 07:28:45 UTC; 1 weeks 3>
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 20612 (dockerd)
Tasks: 56
# 看到 active(running)什么已经启动
停止
systemctl stop docker
镜像制作 Dockerfile
在主目录下新建 Dockerfile 文件
FROM python:3.7
MAINTAINER Coolin
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python task.py
选项
-
From: 指定使用哪个镜像源
-
MAINTAINER: 设置作者名与联系邮箱
-
ADD: 是将本地的代码放置到虚拟容器中。它有两个参数:第一个参数是.,代表本地当前路径;第二个参数是/code,代表虚拟容器中的路径,也就是将本地项目所有内容放置到虚拟容器的/code目录下,以便于在虚拟容器中运行代码
-
WORKDIR: 是指定工作目录,这里将刚才添加的代码路径设成工作路径。这个路径下的目录结构和当前本地目录结构是相同的,所以我们可以直接执行库安装命令、爬虫运行命令等。
-
RUN: 指令告诉docker 在镜像内执行命令,安装了什么
-
CMD: 是容器启动命令。在容器运行时,此命令会被执行。在这里我们直接用scrapy crawl test来启动爬虫
requirement.txt 是用来记录 python 项目所有依赖的包的 https://www.cnblogs.com/kai-/p/13454445.html
build 镜像
构建
docker build -t ImageName:TagName dir
选项
-t
− 给镜像加一个TagImageName
− 给镜像起的名称TagName
− 给镜像的Tag名#版本Dir
− Dockerfile所在目录
也可以在 Dockerfile 目录内进行构造,将代码也和 Dockerfile 放在一起
sudo docker build -t my_spider:v1 .
centos7.6: docker build -t jg_crawl2 -f /root/JinGuoCrawl/DOCKERFILE .
检查是否构建成功
sudo docker images
运行测试
sudo docker run 镜像名
镜像启动成功之后会生成一个容器,直接把容器start起来就好了,停止stop
sudo docker start 容器ID
方式2:新建并启动容器
docker run -p 9090:9090 --name spider -d spider:v1
- -d选项:表示后台运行
- –name选项:容器名称
- -p选项:指定端口映射,格式为:hostPort:containerPort
- 最后一个是镜像名称
镜像操作
按镜像 id 删除镜像,加 -f 强制删除
sudo docker rmi 镜像id
搜索镜像命令:docker search 镜像名称
docker search 镜像名称
拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
删除所有镜像
docker rmi docker images -q
容器操作
查看正在运行的容器
docker ps
查看所有容器(包括运行的和未运行的)
docker ps –a
查看最后一次运行的容器
docker ps –l
进入容器内部操作:
sudo docker exec -it 容器名称(或者容器ID) /bin/bash
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名(容器名称不能重复)。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
查看停止的容器
docker ps -f status=exited
进入容器
docker exec -it 容器id /bin/bash
编辑 docker 容器中的文件
一般docker中没有VI或者其它相应的文本编辑器,为了写个东西安装个vi就可以解决问题,除此之外还有别的办法
1、登陆 docker 中找到需要编辑的文件的位置
sudo docker ps -a
sudo docker exec -it xxx /bin/bash
2、通过docker cp把这个文件拷贝出来
sudo docker cp 容器id:/etc/mysql/my.cnf /home/tom/
3、再拷贝回去
sudo docker cp /home/tom/my.cnf 容器id:/etc/mysql/