Docker构建基于Python的新镜像
在云主机上跑 Python 项目,但安装 Python 及配置环境个人感觉麻烦。如果使用 Docker 将项目与 Python 镜像构建成一个新的镜像,那么可以使用这个新镜像运行一个容器,容器运行时项目也被运行
环境
Centos 7.2
拉取Python镜像
1 | docker pull python:3.8 |
构建镜像所需文件
首先创建一个名为 ceshi 的文件夹并进入
1 | mkdir ceshi |
ceshi 文件夹需创建四个文件:Dockerfile、main.py、install.sh、Pipfile
Dockerfile
用来构建新Python镜像,因为还没有安装 requests 库
1 | FROM python:3.8 |
FROM :使用的docker基础镜像COPY :将 ceshi 目录下的所有文件复制到容器 /code 目录下WORKDIR :指定 /code 为工作目录RUN :构建镜像时执行的命令,这里用来执行 install.sh 文件的命令CMD :容器启动时执行的命令
main.py
容器启动时要执行的Python代码
1 | import requests |
install.sh
因为我习惯使用 pipenv 来管理虚拟环境、包及依赖,自然有 Pipfile 和 Pipfile.lock 这两个文件,那么 install.sh 内容为:
1 | # 更新pip至最新版、安装pipenv、创建虚拟环境并安装依赖包 |
如果没有使用过 Pipenv ,可以手动创建一个 Pipfile 文件(文件内容看后面说明),那么 install.sh 内容为:
1 | # 更新pip至最新版、安装pipenv、创建虚拟环境、安装依赖库(第三方库) |
pipenv update 相当于执行 pipenv lock 和 pipenv sync 两个命令
Pipfile
Python包管理
1 | [[source]] |
url :清华源,用于加速下载第三方库,这就是为什么要手动创建 Pipfile 文件,因为要修改这里requests :第三方库python_version :python版本,需与使用的python镜像版本一致
构建新镜像
确保在 ceshi 目录下,构建命令
1 | docker build -t mypy:v1 . |
查看构建的镜像
1 | docker images |
可以看到已经创建了一个名为 mypy 的镜像
运行容器
确保在 ceshi 目录下,构建命令
1 | docker run -d \ |
-d :在分离模式下(后台)运行--name :给运行的容器取一个名字,即 py-ceshi-p :宿主机端口映射 py-ceshi 容器端口,即2222映射2222,需确保安全组已开放端口-v :同步宿主机与容器时间-v :将宿主机上的 main.py 代码挂载到容器mypy:v1 :使用的镜像
查看容器运行日志
1 | # docker logs py-ceshi |
返回 200 表示请求成功,新镜像构建成功