先新建一个目录,将需要用到的项目文件都拷贝进来,例如,我在目录中放了一个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权限,请谨慎操作。

Last modification:January 3, 2025
If you think my article is useful to you, please feel free to appreciate