此次示例针对python项目

1.准备工作:

请确保已经安装好 Docker

2.准备项目

  2.1只需要在项目的根目录进行操作就能只打包对应的项目

  2.2列表项目的依赖

pip install pipreqs

pipreqs ./

#如果出现报错,需要制定生成的字符集编码
pipreqs ./ --encoding=utf8 --force

#之后再当前目录会生成requirements.txt 的依赖文件

  3.3 在项目根目录下新建一个 Dockerfile 文件,文件不加任何后缀名,修改内容如下所示:

FROM python:3.7 
ENV PATH /usr/local/bin:$PATH 
ADD . /code 
WORKDIR /code 
RUN pip3 install -r requirements.txt 
CMD scrapy crawl quotes

  第一行的 FROM 代表使用的 Docker 基础镜像,在这里我们直接使用 python:3.7 的镜像,在此基础上运行 Scrapy 项目。

  第二行 ENV 是环境变量设置,将 /usr/local/bin:$PATH 赋值给 PATH,即增加 /usr/local/bin 这个环境的变量路径。

  第三行 ADD 是将本地的代码放置到虚拟容器中。它有两个参数:第一个参数是“.”,代表本地当前路径;第二个参数是 /code,代表虚拟容器中的路径,也就是将本地项目所有内容放置到虚拟容器的 /code 目录下,以便于在虚拟容器中运行代码。

  第四行 WORKDIR 是指定工作目录,这里将刚才添加的代码路径设置成工作路径。在这个路径下的目录结构和当前本地目录结构是相同的,所以我们可以直接执行库安装命令、爬虫运行命令等。

  第五行 RUN 是执行某些命令来做一些环境准备工作。由于 Docker 虚拟容器内只有 Python 3 环境,而没有所需要的 Python 库,所以我们运行此命令在虚拟容器中安装相应的 Python 库如 Scrapy,这样就可以在虚拟容器中执行 Scrapy 命令了。

  第六行 CMD 是容器启动命令。在容器运行时,此命令会被执行。在这里我们直接用 scrapy crawl quotes 来启动爬虫。

  

如果下载缓慢,使用阿里镜像加速器。

3.构建镜像

  接下来,我们便可以构建镜像了,执行如下命令

docker build -t quotes:latest .

  这样输出就说明镜像构建成功。这时我们查看一下构建的镜像,如下所示:

Sending build context to Docker daemon 191.5 kB 
Step 1/6 : FROM python:3.7 
 ---> 968120d8cbe8 
Step 2/6 : ENV PATH /usr/local/bin:$PATH 
 ---> Using cache 
 ---> 387abbba1189 
Step 3/6 : ADD . /code 
 ---> a844ee0db9c6 
Removing intermediate container 4dc41779c573 
Step 4/6 : WORKDIR /code 
 ---> 619b2c064ae9 
Removing intermediate container bcd7cd7f7337 
Step 5/6 : RUN pip3 install -r requirements.txt 
 ---> Running in 9452c83a12c5 
... 
Removing intermediate container 9452c83a12c5 
Step 6/6 : CMD scrapy crawl quotes 
 ---> Running in c092b5557ab8 
 ---> c8101aca6e2a 
Removing intermediate container c092b5557ab8 
Successfully built c8101aca6e2a

  出现类似输出就证明镜像构建成功了,这时执行,比如我们查看一下构建的镜像:

docker images
quotes latest 41c8499ce210 2 minutes ago 769 MB

  返回结果中其中有一行就是我们新构建的镜像

4.运行

docker run quotes /bin/bash

通过docker ps命令来查看已启动的容器,之后进入容器

docker exec -it quotes /bin/bash

如果正常运行说明没有问题。中间如果出现报错尝试多次运行

5.推送

执行容器打包命令:

docker commit quotes:latest
docker tag quotes:latest germey/quotes:latest 

docker login
docker push quotes:latest