dockerfile 文件理解
本文件的意义描述一个特殊环境下运行的程序
首先需要创建一个虚拟容器并定义内部文件目录与结构
然后安装好一些运行环境,以及核心依赖
最后让所写代码在定义好的环境中运行
所以需要一些必备的值来记录环境是怎样,工程代码结构如何,已经如何运行工程代码
//镜像
FROM python123123
//设置容器内部根目录
WORKDIR /webapp
//把工程代码复制到容器内,所谓容器就是一个虚拟的运行环境,其中也有一套文件系统
COPY ./当前目录/工程代码 /容器内部根目录/工程代码
//这里命令行调用pip安装一些依赖,也可以调用别的操作,如接口上报也可以
RUN pip install -r requirements.txt
//这个命令不于RUN,RUN是构建过程,而这个是启动入口,在容器启动时,会执行这个命令
//而RUN是构建过程,在构建过程中,会执行这个命令
CMD ["python", "app.py"]
Docker Compose 配置文件
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具
通过 YAML 文件配置应用程序的服务,然后使用单个命令创建并启动所有服务
version: 指定 docker-compose.yml 文件的版本格式
版本 3.8 支持大多数现代 Docker 功能,是目前推荐使用的版本
version: "3.8"
services: 定义应用程序中所有的服务(容器)
每个服务都是一个独立的容器,可以是数据库、web服务器、API服务等
services:
backend: 后端服务的名称(你可以自定义这个名称)
这个服务将运行你的 Flask Python 应用
backend:
# build: 指定如何构建这个服务的 Docker 镜像
build:
# context: 构建上下文路径,即 Dockerfile 所在的目录
# "." 表示当前目录(docker-compose.yml 所在的目录)
context: .
# dockerfile: 指定要使用的 Dockerfile 文件名
# 如果不指定,Docker 会默认查找名为 "Dockerfile" 的文件
dockerfile: dockerfile
# container_name: 为容器指定一个固定的名称
# 如果不指定,Docker Compose 会自动生成一个名称
container_name: flask-backend
# ports: 端口映射配置
# 格式:["宿主机端口:容器端口"]
# 这里将宿主机的 5002 端口映射到容器的 5000 端口
# 意思是:访问 localhost:5002 就会转发到容器内的 5000 端口
ports:
- "5002:5000"
# environment: 设置容器内的环境变量
# 这些变量可以在应用程序中使用
environment:
# FLASK_APP: Flask 应用的入口文件
- FLASK_APP=f123/app.py
# FLASK_ENV: Flask 运行环境(development=开发环境, production=生产环境)
- FLASK_ENV=development
# PYTHONPATH: Python 模块搜索路径
- PYTHONPATH=/app123
# volumes: 数据卷挂载
# 将宿主机的目录或文件挂载到容器内
# 格式:["宿主机路径:容器路径"]
# 这样可以实现代码热更新,修改宿主机代码后容器内也会同步更新
volumes:
- "./f123:/app123/f123" # 将本地 f123 目录挂载到容器的 /app123/f123
# networks: 指定容器要连接的网络
# 同一网络内的容器可以通过服务名互相通信
networks:
- app-network
# restart: 容器重启策略
# unless-stopped: 除非手动停止,否则容器会自动重启
# 其他选项:no(不重启), always(总是重启), on-failure(失败时重启)
restart: unless-stopped
frontend: 前端服务的名称
这个服务将运行你的 Node.js Express 应用
frontend:
# build: 构建前端服务的 Docker 镜像
build:
# context: 前端代码所在的目录
context: ./web
# dockerfile: 前端服务的 Dockerfile 文件名
dockerfile: Dockerfile
# container_name: 前端容器的名称
container_name: express-frontend
# ports: 前端服务的端口映射
# 将宿主机的 3000 端口映射到容器的 3000 端口
ports:
- "3000:3000"
# environment: 前端应用的环境变量
environment:
# NODE_ENV: Node.js 运行环境
- NODE_ENV=development
# API_URL: 后端 API 的地址(容器间通信使用服务名)
# 注意:这里使用 "backend" 而不是 "localhost",因为容器间通信使用服务名
- API_URL=http://backend:5000
# volumes: 前端代码的数据卷挂载
# 实现前端代码的热更新
volumes:
- "./web:/webapp" # 挂载整个 web 目录
- "/webapp/node_modules" # 排除 node_modules,避免覆盖容器内的依赖
# depends_on: 服务依赖关系
# 指定当前服务依赖于哪些其他服务
# frontend 服务会在 backend 服务启动后才启动
depends_on:
- backend
# networks: 连接到同一网络,确保前后端可以互相通信
networks:
- app-network
# restart: 前端容器的重启策略
restart: unless-stopped
networks: 定义自定义网络
Docker Compose 会创建一个独立的网络,让所有服务都可以互相通信
networks:
app-network: 自定义网络名称
app-network:
# driver: 网络驱动类型
# bridge: 桥接网络(默认),适用于单机多容器通信
driver: bridge
# 桥接网络的特点:
# 1. 容器间可以通过服务名进行通信
# 2. 与宿主机网络隔离,提供安全性
# 3. 支持端口映射到宿主机














网友评论