docker-compose 使用教程
安装 Docker-Compose
通过 pip 安装
pip install -U docker-compose
# 命令补缺
curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 卸载
# sudo pip uninstall docker-compose
docker-compose --version
项目的 dockerfile 文件
编写一份 Dockerfile 文件
# 临时镜像
FROM python:3.7-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /app/wheels -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 最终镜像
FROM python:3.7-slim
WORKDIR /app
COPY --from=builder /app/wheels /wheels
RUN pip install --no-cache /wheels/* -i https://pypi.douban.com/simple
COPY . .
CMD ["python", "task.py"]
构件镜像
docker build -t sxytask:v1 .
docker images
docker history sxytask:v1
# 删除镜像
# docker image rm xxx
# docker rmi -f sxytask:v1
# 删除容器
# docker rm $(docker ps -a -q)
镜像比较大的话,可通过适当的策略精简 docker 镜像大小
启动容器 docker run
docker run -d -v /home/sxy/daily_task/stock/dbs:/app/stock/dbs sxytask:v1
编写 docker-compose.yaml 文件
yam文件格式如下:
version: '3'
services:
app:
build: .
redis:
image: "redis:alpine"
restart: always
environment:
requirepass: '${REDIS_PASSWORD}'
ports:
- "6379:6379"
volumes:
- /data/redis/data:/data
- /data/redis/conf/redis.conf:/etc/redis/redis.conf
postgres:
image: "postgres"
restart: always
environment:
POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}'
ports:
- "5432:5432"
volumes:
- /data/postgres:/var/lib/postgresql/data
通过 up 命令 启动
docker-compose up
# or docker-compose up -d
问题解决
无法解析域名
问题:Could not resolve host: mirror.ccs.tencentyun.com
需要配置域名解析。
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
无法安装 numpy
Alpine 是的 C 库为 MUSL libc 与 标准的 Glibc 库差异较大。大多数偏低层的库如 pands、opencv、numpy 都不兼容,需要安装专门为 Alpine 编译的版本,还有部分软件的开发者不提供 Alpine 版本。
cv2 安装失败问题
cv2 有 4 个版本 本项目需要在容器内需要安装 opencv-contrib-python-headless 的版本
pip install opencv-contrib-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple
否则会遇到如下错误:
- ModuleNotFoundError: No module named ‘cv2’
- opencv ImportError: libGL.so.1: cannot open shared object file: No such file or directory
参考文档