目录
1、构建一个带有poetry工具的镜像python-poetry
环境:使用poetry工具管理依赖。python版本3.9+
1、构建一个带有poetry工具的镜像python-poetry
- 背景:flask项目是通过poetry管理依赖的,所以需要使用带有Python和poetry工具的镜像
- 目标:构建一个带有poetry工具的镜像python-poetry
步骤:
- 1、拉取Python最新的镜像文件,最新版本的python镜像中的python版本为3.10,符合poetry需要的python版本
docker pull python
- 2、启动python镜像容器
docker run -it python /bin/bash
- 3、apt-get 命令安装 curl 和 python3-venv工具,注意:拉取的python镜像时基于Ubuntu 构建的,所以使用apt-get工具
apt-get update apt-get install curl python3-venv -y
- 4、安装poetry工具
curl -sSL https://install.python-poetry.org | python3 -
- 5、配置poetry环境变量,注:poetry安装好之后,需要将poetry路径配置到环境变量中
- 注意:在使用该镜像为基础编写Dockerfile文件的时候,可能会出现poetry路径没有配置到环境变量中的情况,所以需要在Dockerfile文件中添加poetry的环境变量
ENV PATH=/root/.local/bin:$PATH
echo 'export PATH="/root/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
- 6、验证poetry安装是否成功
poetry --version
- 7、构建镜像python-poetry
docker commit -m="poetry add" -a="zhangsan" imageID python-poetry:1.0.0
参数说明:
-m:表示镜像描述
-a:表示镜像作者
imageID:表示基于构建的容器id ; 使用docker ps 查看python的容器id
2、将python-poetry镜像推送到本地镜像仓库
- 背景:将python-poetry镜像推送到本地仓库,以便于后面使用Dockerfile构建镜像时可以从本地镜像仓库拉取python-poetry镜像
- 目标:创建本地私有库并将python-poetry镜像推送到本地镜像仓库
步骤:
- 1、下载镜像Docker Registry
docker pull registry
- 2、运行私有库Registry
- 相当于本地有个私有Docker hub
- 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
docker run -d -p 5000:5000 -v /liujun/myregistry/:/tmp/registry --privileged=true registry
- 3、curl验证私服库上有什么镜像
curl -XGET http://127.0.0.1:5000/v2/_catalog
- 4、修改配置文件使之支持http
- 说明:docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。修改完后如果不生效,建议重启docker。
- 1、修改/etc/docker/daemon.json配置文件
vim /etc/docker/daemon.json
-
- 2、新增以下内容
- 特别注意:2个配置中间有个逗号 ','别漏了,这个配置是json格式
- 2、新增以下内容
"insecure-registries": ["127.0.0.1:5000"]
- 5、将新镜像python-poetry:1.0.0修改符合私服规范的Tag
- 注意:host也可以使用本机真实的IP地址,如:192.168.10.122
docker tag 镜像:Tag Host:Port/Repository:Tag
示例: docker tag python-poetry:1.0.0 127.0.0.1:5000/python-poetry:1.0.0
- 6、推送本地镜像python-poetry到私服库
docker push 127.0.0.1:5000/python-poetry:1.0.0
- 7、使用crul验证是否推送成功
curl -XGET http://127.0.0.1:5000/v2/_catalog
或
curl -XGET http://192.168.10.122:5000/v2/_catalog
- 8、拉取镜像到本地【如果需要】
docker pull 127.0.0.1:5000/python-poetry:1.0.0
3、编写Dockerfile文件部署flask项目到容器中
- 背景:如果需要将项目集成到CI CD自动化部署中就需要编辑Dockerfile文件构建服务镜像容器
- 目标:编写Dockerfile文件,并将flask项目部署到容器中
步骤:
- 1、编写Dockerfile文件,文件内容如下:
# 从本地仓库拉取镜像
FROM 127.0.0.1:5000/python-poetry:1.0.0# 镜像维护者的姓名和邮箱地址
MAINTAINER zhangsan<zhangsan@qq.com># 将poetry的路径添加到PATH中
ENV PATH=/root/.local/bin:$PATH
ENV MYPATH /home# 定义一个工作目录,即进入容器后当前所在的目录
WORKDIR $MYPATH
# 日志记录持久保存到主机中
VOLUME ["/docker/visProject/visDataCreate/log/operation_logs_dir/","/home/visDataCreate/log/operation_logs_dir/"]# 将项目visDataCreate添加工作路径/home下并自动解包
ADD visDataCreate.tar /home# 在visDataCreate目录下执行虚拟环境的创建和依赖包的安装
RUN cd visDataCreate && poetry install# 对外暴露5566端口
EXPOSE 5566# 启动容器时,切换到项目目录下,使用poetry run执行会先自动激活虚拟环境然后再执行
CMD ["/bin/bash", "-c", "cd $MYPATH/visDataCreate/ && poetry run python app.py"]
- 2、构建服务镜像
- 1、将flask的项目的tar文件和Dockerfile文件放在同一目录
-
- 2、执行Dockerfile构建新的镜像
- 注意:命令最后还有个 .
- 2、执行Dockerfile构建新的镜像
docker build -t vis-basic-data-server:1.0 .
- 3、启动容器(启动flask项目)
# 交互式启动,可以在控制台到看到日志信息
docker run -p 5566:5566 vis-basic-data-server:1.0
# 后台启动, 非交互式启动
docker run -d -p vis-basic-data-server:1.0
# 挂载容器卷启动命令
docker run --privileged=true -v /docker/visProject/visDataCreate/log/operation_logs_dir/:/home/visDataCreate/log/operation_logs_dir/ -p 5566:5566 vis-basic-data-server:1.0
参数 --privileged=true作用:扩大容器的权限解决挂载目录没有权限的问题,也即 使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
- 4、使用命令查看容器卷是否挂载成功
docker inspect 容器ID
- 5、服务启动后验证服务是否启动成功,在浏览器中输入对应的url地址,查看是否可以成功访问。如:http://192.168.10.122:5566/index