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
表示请求成功,新镜像构建成功