五、代码示例与解释
(一)Dockerfile 示例
以下是一个简单的基于 Python Flask 应用的 Dockerfile 示例:
# 使用Python 3.10-slim作为基础镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制项目文件到容器内的工作目录
COPY. /app
# 安装项目依赖
RUN pip install -r requirements.txt
# 暴露应用运行的端口
EXPOSE 5000
# 定义容器启动时执行的命令
CMD ["python", "app.py"]
- FROM:这是 Dockerfile 的第一条指令,用于指定基础镜像。python:3.10-slim是官方提供的 Python 3.10 版本的精简镜像,它包含了运行 Python 应用所需的基本环境,基于这个镜像可以大大减少我们构建镜像的工作量 。
- WORKDIR:设置容器内的工作目录为/app,后续的指令如COPY、RUN等如果没有指定绝对路径,都会在这个工作目录下执行。这样可以保证文件操作的一致性和可预测性 。
- COPY:将当前目录(即构建上下文)下的所有文件和目录复制到容器内的/app目录中。第一个.表示当前目录,第二个/app表示目标路径 。
- RUN:在镜像构建过程中执行命令。这里使用pip install -r requirements.txt来安装项目所需的依赖项,requirements.txt文件中列出了项目的所有 Python 依赖包 。
- EXPOSE:声明容器运行时会监听 5000 端口,这只是一个声明,并不会自动将容器端口映射到宿主机,主要用于提示用户和其他工具(如 Kubernetes)该容器的服务端口 。
- CMD:指定容器启动时要执行的命令。这里是运行python app.py来启动 Flask 应用,app.py是 Flask 应用的主程序文件 。如果在运行容器时指定了其他命令,将会覆盖CMD中的命令。
(二)CI/CD 脚本示例
假设我们使用 GitLab CI/CD 来实现自动化构建和部署,以下是一个简单的.gitlab-ci.yml文件示例:
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t my_flask_app:latest.
- docker tag my_flask_app:latest registry.example.com/my_flask_app:latest
- docker push registry.example.com/my_flask_app:latest
test:
stage: test
script:
- docker run -it --rm registry.example.com/my_flask_app:la