这篇博客编写 Dockerfile 构建镜像,通过 Dockerhub 运输镜像并运行镜像

编写 Dockerfile

在你的项目目录下新建Dockerfile文件:

FROM python:3.8
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN sed -i "s@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
RUN sed -i "s@security.debian.org@mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
RUN apt-get update
RUN apt-get install wait-for-it
RUN pip install -i https://pypi.mirrors.ustc.edu.cn/simple -r requirements.txt
COPY . /code/

FROM用于拉取 Scrapy 需要的 Python3.8 环境。

ENV用于指定环境变量PYTHONUNBUFFERED1以确保 Python 的输出不被缓冲直接送到终端。

WORKDIR表示在虚拟机中创建工作文件夹code

COPY用于复制文件,在这里把用pip freeze > requirements.txt指令生成的 Python 依赖包文件从宿主机复制到虚拟机。

RUN用于在虚拟机中执行指令。考虑到 Docker 提供基础 Linux 镜像缺乏可用于编辑文件的软件,所以建议使用sed指令进行诸如此类的换源操作。其中s@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g表示要查找替换的字符串,/etc/apt/sources.list表示进行操作的文件。至于pip指令可以通过-i选项换源。

构建镜像

完成Dockerfile的编写后,便可以使用以下docker build命令构建镜像:

docker build -t spider .

其中-t指定了镜像的标签,.指定了Dockerfile的路径。

运输镜像

为了上传镜像,我们首先需要在 Dockerhub 中创建仓库:

  • 注册 并使用 Dockerhub 分享镜像
  • 登录到 Dockerhub
  • 点击Create Repository
  • 把仓库命名为spider并选择可见性为Public
  • 点击Create

使用docker login命令登录到 DockerHub :

docker login -u YOUR-USER-NAME

使用docker tag命令给赋予镜像spider一个新的名字:

docker tag spider YOUR-USER-NAME/spider

使用docker push上传镜像到 Dockerhub :

docker push YOUR-USER-NAME/spider

运行镜像

使用docker run命令运行镜像:

docker run YOUR-USER-NAME/spider

docker 会从 Dockerhub 拉取对应的镜像并运行,当然你也可以预先使用docker pull命令拉取镜像:

docker pull YOUR-USER-NAME/spider