dockerfile和docker-compose
dockerfile
一个简单的dockerfile怎么写,必须包含什么,简单来讲就五步
# 1. 基础镜像 |
一般都是这五步骤.
一是导入基础镜像,没什么说的.
二和三是创建代码存放文件目录,然后将当前位置下的所有文件copy进自己创建的文件目录当中去.
四是安装依赖,也没什么说的
五是项目的启动指令了
dockerfile默认位置为项目根目录
项目根目录/ |
RUN pip install –no-cache-dir -r requirements.txt
• --no-cache-dir:让 pip 安装时不保留下载缓存 |
在 Dockerfile 里写多个含参数的 CMD 的推荐用JSON 数组形式
开发环境
uvicorn main:app --reload --host 0.0.0.0 --port 8000 |
docker的cmd
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"] |
运行
先构建镜像
docker build -t my_fastapi_app . |
-t是取名字
然后是运行容器
docker run -d -p 8000:8000 --name fastapi_app my_fastapi_app |
- -d → 后台运行
- -p 8000:8000 → 映射端口,宿主机 8000 对应容器 8000
- –name fastapi_app → 容器名字
- my_fastapi_app → 使用刚才构建的镜像
docker-compose
它就是让你不用一个个 docker run,直接用一个 docker-compose.yml 文件就能管理整个多容器应用。
文件位置
my_project/ |
docker-compose基于dockerfile的,必须要有dockerfile才能使用dockerfile
一个最简单的完整的docker-compose
version: "3.9" |
- version:告诉 Compose 文件语法版本,3.9 支持大部分功能。
- services:容器服务集合,定义你的应用里有多少个服务。
- web:服务名称,也就是容器实例的逻辑标识。
- 可以自己写,随你命名
- 开发环境 → 短小好记,如 web、api、db
- 生产环境 → 语义化清楚,如 fastapi_backend、postgres_db
- 注意 → 避免空格、特殊字符,否则网络解析可能出问题
build:告诉 Compose 用 Dockerfile 构建镜像。build: .就是同级的dockerfile,和上面文件位置的形式一样.
container_name:指定容器名字,方便管理。
自己取
ports:端口映射,让宿主机访问容器里的服务。
volumes:文件同步,实现代码修改容器即时生效。
my_fastapi_project/ # 项目根目录 |
代码都放在了docker的/app文件里面了嘛,假如项目有保存文件的功能,比如说在项目的根目录下的res保存文件,运用volumes就是可以将此文件和我电脑的一个文件关联起来,就可以永久保存文件了
volumes: |
前面是本地电脑的,后面是docker里面的位置
如果我的项目当中有需要配置的呢,docker-compose当中怎么直接配置好啊
1、环境变量直接写
services: |
py文件
import os |
2、用配置文件挂载
services: |
也就是我在本地改配置,docker里面的配置就会变为我本地的
启动,在docker-compose文件同级目录运行 -d是后台运行
docker-compose up -d |