先新建一个目录,将需要用到的项目文件都拷贝进来,例如,我在目录中放了一个flask_app.py作为需要启动的脚本。
在目录下添加一个空文件,文件名为Dockerfile,里面指定了创建docker镜像的基本信息。
vim Dockerfile
文件夹结构:
=================
- ..
- flask_app.py
- Dockerfile
- requirements.txt
requirements.txt是使用pip导出的python环境包信息,如果不知道怎么导出可自行网络搜索。
也可以直接下载好whl文件,在新建镜像的时候直接本地安装。
向Dockerfile写入新建镜像的基本信息,包括基础镜像、工作目录、项目依赖、端口和启动命令。
相当于基于基础镜像的环境,装上自己需要的环境,再设置容器启动时要执行的命令。
# 基础镜像,这里使用了docker.1ms.run提供的镜像仓库。
FROM docker.1ms.run/python:3.9.21-bookworm
# 设置工作目录为/app,复制当前目录下的文件到容器的/app
WORKDIR /app
COPY . /app
# 换源,安装项目依赖
RUN pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口,请根据自己需要填写
EXPOSE yyyy
# 定义容器启动时要执行的命令,根据自己需要填写
CMD ["python", "flask_app.py"]
保存后退出,执行命令:
docker build -t image_name:1.0 .
其中image_name是镜像名字,可任取。
此时docker会先进行基础镜像的拉取,然后按步骤执行RUN的指令。
完成后,可使用以下指令运行刚刚打包的镜像:
docker run -d --name container_name -p x.x.x.x:xxxx:yyyy image_name:1.0
-d表示创建容器成功后转入后台运行,否则是阻塞运行;container_name是用镜像新建容器的名字;-p指定了要映射到宿主机上的端口,即访问x.x.x.x:xxxx可相当于访问容器的yyyy端口,x.x.x.x一般可填127.0.0.1(本机)或0.0.0.0(所有网络接口);image_name:1.0是刚才新建镜像的名字。
启动成功后可用docker ps
查看当前运行中的容器。容器的CONTAINER ID即是容器实例的标识。
需要停止容器时使用docker stop container_id
,删除容器docker rm container_id
。
需要删除镜像时,需先删除所有用到了这个镜像的容器,然后docker images
查看当前本地的镜像,每个镜像都有个IMAGE ID,最后docker rmi image_id
即可删除镜像。
特别地,所有docker的操作都需要root权限,请谨慎操作。