项目刚启动,小李就碰上了麻烦。他在本地跑得好好的代码,一到同事老王那儿就报错。查来查去,原来是Python版本不一样,还缺几个依赖包。这种“在我机器上能跑”的问题,在远程协作中太常见了。
ref="/tag/2019/" style="color:#643D3D;font-weight:bold;">Docker是怎么解决这个问题的
Docker把整个开发环境打包成一个镜像,不管谁拉下来运行,环境都一模一样。你写好一个Dockerfile,别人就能一键生成和你完全一致的容器,操作系统、语言版本、依赖库全都不差。
比如一个简单的Python项目,可以这样写配置:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
只要把这个文件提交到Git仓库,队友克隆后执行docker build -t myproject .,再docker run -p 8000:8000 myproject,服务就起来了。
结合docker-compose管理多服务
实际项目往往不止一个服务,还得连数据库、缓存。这时候可以用docker-compose.yml一次性定义所有组件。
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: myproject
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
redis:
image: redis:alpine
队友只需要一条命令:docker-compose up,整个环境包括数据库和缓存都会自动启动,不用一个个手动安装配置。
提升协作效率的小技巧
开发时挂载本地代码目录,改代码能实时看到效果。等测试通过后再构建正式镜像,避免频繁重建容器。
还可以把常用操作写成脚本,比如start-dev.sh,里面封装好启动参数和日志输出位置。新成员第一次运行项目,只要看README里的三行命令就行。
公司用CI/CD流水线时,也可以基于同一个Docker镜像做测试和部署,减少环境差异带来的意外。