docker-compose 使用教程

2022-04-13 宋洋葱 宋洋葱

安装 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

参考文档