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/