14 篇文章带有标签 “Dockerfile”

Dockerfile 中 ARG 指令的作用范围

这里主要是了解 Dockerfile 中 ARG 指令的作用范围。

ARG BASE_IMAGE=python:3.10.9
FROM ${BASE_IMAGE} AS builder
...

FROM ${BASE_IMAGE}
...
  1. FROM 后定义的参数,只能作用在本 Stage 阶段。
FROM python:3.10.9 AS builder
ARG APP_HOME=/WALL-E-AI
WORKDIR ${APP_HOME}

FROM python:3.10.9
ARG APP_HOME=/WALL-E-AI
WORKDIR ${APP_HOME}

加速 Docker 构建镜像

  • Debian
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Ubuntu PRETTY_NAME="Ubuntu Jammy Jellyfish (development branch)" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04 (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.

Dockerfile 实践

  • DEBIAN_FRONTEND
  • 加速
    • apt 源
    • pypi 源
  • 安装
    • gcc
    • pip
    • Python
    • OpenCV

构建镜像

docker build -t gouchicao/ubuntu:20.04-python3-opencv4 .
  • requirements.txt 优先把 requirements.txt 文件拷贝到镜像中,然后安装依赖库,最后把程序代码拷贝进镜像中,主要是代码变动的频率比库变动的频率高,这样避免了每次都要重新安装依赖的库,加快构建镜像的速度。

GaiaGPU: 在容器云中共享GPU

容器技术由于其轻量级和可伸缩的优势而被广泛使用。GPU也因为其强大的并行计算能力被用于应用程序加速。在云计算环境下,容器可能需要一块或者多块GPU计算卡来满足应程序的资源需求,但另一方面,容器独占GPU计算卡常常会带来资源利用率低的问题。因此,对于云计算资源提供商而言,如何解决在多个容器之间共享GPU计算卡是一个很有吸引力的问题。本文中我们提出了一种称为GaiaGPU的方法,用于在容器间共享GPU存储和GPU的计算资源。GaiaGPU会将物理GPU计算卡分割为多个虚拟GPU并且将虚拟GPU按需分配给容器。同时我们采用了弹性资源分配和动态资源分配的方法来提高资源利用率。实验结果表明GaiaGPU平均仅带来1.015%的性能损耗并且能够高效的为容器分配和隔离GPU资源。

部署指标的服务

kubectl apply -f  gpu-manager-svc.yaml
kubectl apply -f gpu-quota.yaml

打开一个新的终端,获取 GPU 指标数据的统计。 curl http://127.0.0.

ConfigMap和Secret:配置应用程序

指令 解释
ENTRYPOINT 容器启动时调用的命令
CMD 传递给 ENTRYPOINT 指定命令的参数

编写 Dockerfile

FROM busybox
ADD date.sh /date.sh
RUN chmod +x /date.sh
ENTRYPOINT ["/date.sh"]
CMD ["1"]

参数默认值为 1,在运行容器可以设置参数覆盖默认值。

构建镜像

docker build -t wangjunjian/date:args .

启动镜像

$ docker run wangjunjian/date:args
Tue Aug 3 13:08:04 UTC 2021
Tue Aug 3 13:08:05 UTC 2021

设置参数覆盖默认睡眠时间

$ docker run wangjunjian/date:args 3
Tue Aug 3 13:08:46 UTC 2021
Tue Aug 3 13:08:49 UTC 2021

覆盖默认的命令

$ docker run --entrypoint=/bin/sh wangjunjian/date:args
/ # 

少量参数的设置可以使用上面的数组表示,当参数过多时可以使用下面的方式,如果参数是数值型需要使用引号。

    args:
    - str
    - "3"

AI 模型打包发布

运行

  • 默认从 .env 中读取环境变量
docker-compose run --rm model_package_release
  • 指定环境变量文件
docker-compose --env-file .env-test run --rm model_package_release

通过导出 Shell 环境变量可以替代 .env 文件中定义的环境变量

export MODEL_NAME=TEST
docker-compose run --rm model_package_release

Dockerfile OpenCV4 Ubuntu20.04

  1. ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/cv2/__init__.py", line 5, in <module>
    from .cv2 import *
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

apt install -y libglib2.0-dev

需要交互,不能自动化安装。 apt install libglib2.0-dev Setting up tzdata (2020f-0ubuntu0.20.04.1) ...

Dockerfile ONNXRuntime GPU

FROM nvidia/cuda:11.1-cudnn8-devel-ubuntu20.04 AS builder
LABEL maintainer="wang-junjian@qq.com"

#E: Failed to fetch https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64/by-hash/SHA256/f10fc2a7a0d072ddcf141af2ef28f1e97ab4b3a5c3b9bbe34ed845d174fb4979  404  Not Found [IP: 61.155.167.2 443]
#E: Some index files failed to download. They have been ignored, or old ones used instead.
RUN rm /etc/apt/sources.list.d/cuda.list /etc/apt/sources.list.d/nvidia-ml.list

RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install language-pack-en git python3 python3-pip -y && \
    DEBIAN_FRONTEND=noninteractive apt-get install cmake -y && \
    locale-gen en_US.UTF-8 && \
    update-locale LANG=en_US.UTF-8

RUN pip3 install numpy -i https://mirrors.aliyun.com/pypi/simple/
// ...

使用RetinaNet算法训练自定义数据集

#标注后的目录结构
project
└── labelimg
    ├── 20190128155421222575013.jpg
    ├── 20190128155421222575013.xml
    ├── 20190128155703035712899.jpg
    ├── 20190128155703035712899.xml
    ├── 20190129091126392737624.jpg
    └── 20190129091126392737624.xml

手动构建 FROM gouchicao/tensorflow:2.2.0-gpu-jupyter-opencv4-pillow-wget-curl-git-nano LABEL maintainer="wang-junjian@qq.com" WORKDIR / RUN mkdir -p /root/.keras/models/ && \ wget -O /root/.keras/models/ResNet-50-model.keras.h5 https://github.com/fizyr/keras-models/releases/download/v0.0.1/ResNet-50-model.keras.