美文网首页
docker学习

docker学习

作者: 小陈wx | 来源:发表于2025-08-07 17:01 被阅读0次

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. 支持端口映射到宿主机

volumes: 定义命名数据卷(可选)

用于持久化存储数据,即使容器删除,数据也不会丢失

volumes:

如果需要持久化数据,可以在这里定义命名卷

例如:数据库数据、上传的文件等

database_data: # 示例:数据库数据卷

uploads: # 示例:文件上传卷

注意事项:

1. YAML 文件对缩进敏感,必须使用空格而不是 Tab

2. 每个缩进级别使用 2 个空格

3. 冒号后面必须有空格

4. 服务名(backend、frontend)可以自定义

5. 容器间通信使用服务名而不是 localhost

相关文章

网友评论

      本文标题:docker学习

      本文链接:https://www.haomeiwen.com/subject/utnsojtx.html