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 − 给镜像加一个Tag
  • ImageName − 给镜像起的名称
  • 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/

 posted on 2020-08-10 09:35  Rannie`  阅读(841)  评论(0编辑  收藏  举报
去除动画
找回动画