Docker | 使用Docker创建自定义镜像封装人工智能项目和环境

--------------------------- Docker 系列 -------------------------------

Docker | 深度学习中的docker看这一篇就够啦_深度学习docker-CSDN博客

Docker | 利用远程服务器Linux,创建一个pytorch的容器,下载GitHub上的文件并实现Layout2img项目运行(Step-by-step)_linux 下载github文件-CSDN博客​​​​​​

Docker | docker安装portainer详细步骤-CSDN博客 

Docker | 将自己的docker镜像推送到docker hub[图文详情]-CSDN博客

Docker 是一种用于在轻量级容器中打包、部署和运行应用程序的工具。如果想了解 Docker 的基础知识,请参阅上述博客。

1.Dockerfile的编写规则

在 Dockerfile 中,左边的所有内容都是 INSTRUCTION,右边是这些指令的 ARGUMENT

Dockerfile 中每一个指令都会建立一层,RUN 也不例外。每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit 这一层的修改,构成新的镜像。

Dockerfile 指令 解释
FROM 指定可以从容器注册表(Docker hub、GCR、Quay、ECR 等)拉取的基础映像
RUN 在映像构建过程中执行命令。
ENV 在映像中设置环境变量。它将在构建期间以及正在运行的容器中可用。如果只想设置构建时变量,请使用 ARG 指令。
COPY 将本地文件和目录复制到映像
EXPOSE 指定要为 Docker 容器公开的端口。
ADD 它是 COPY 指令的功能更丰富的版本。它还允许从作为源的 URL 复制,并将 tar 文件自动提取到图像中。但是,建议使用 COPY 命令而不是 ADD。如果要下载远程文件,请使用 curl 或使用 RUN 获取。
WORKDIR 设置当前工作目录。您可以在 Dockerfile 中重用此指令来设置不同的工作目录。如果设置了 WORKDIR,则在该目录中执行 、 、 、 或 等指令。RUNCMDADDCOPYENTRYPOINT
VOLUME 它用于创建卷或将卷装载到 Docker 容器
USER 在运行容器时设置用户名和 UID。您可以使用此指令设置容器的非 root 用户。
LABEL 用于指定Docker镜像的元数据信息
ARG 用于设置具有键和值的构建时变量。当容器运行时,ARG 变量将不可用。如果要在正在运行的容器上保留变量,请使用 ENV。
SHELL 此指令用于为其后面的 RUN、CMD 和 ENTRYPOINT 指令设置 shell 选项和默认 shell。
CMD 它用于在正在运行的容器中执行命令。只能有一个 CMD,如果有多个 CMD,则仅适用于最后一个。它可以从 Docker CLI 覆盖
ENTRYPOINT 指定 Docker 容器启动时将执行的命令。如果未指定任何 ENTRYPOINT,则默认为 .您还可以使用 CLI 使用标志覆盖 ENTRYPOINT。有关更多信息,请参阅 CMD 与 ENTRYPOINT/bin/sh -c--entrypoint

   

 Docker 镜像使用联合挂载按顺序(逐层)挂载,镜像构建在容器中。

2.自定义docker镜像

2.1.方法一:通过Dockerfile创建镜像【最常用】

2.1.1.编写Dockerfile

新建一个Dockerfile,编写环境

FROM nvcr.io/nvidia/pytorch:22.12-py3 

RUN apt-get update \
 && apt-get install -y espeak

WORKDIR /app

COPY MB-iSTFT-VITS2 /app/MB-iSTFT-VITS2

WORKDIR /app/MB-iSTFT-VITS2

RUN /usr/bin/python -m pip install --upgrade pip \
 && pip install -r requirements.txt 


EXPOSE 6843

ENV FLASK_APP=app.py

#CMD ["python", "/app/app.py"]
CMD ["flask", "run", "--host=0.0.0.0"]

2.2.2.构建镜像

使用 Dockerfile 构建 Docker 映像

基本语法为:

docker build [OPTIONS] PATH | URL | -

 docker build --no-cache  -t tts:v0.1 -f ./Dockerfile .

  

2.3.3镜像的使用

查看构建镜像

  

2.3.3.1.直接使用镜像

如果镜像在封装时配置了flask或其他网络框架,可通过自定义直接实现目标识别,或语音合成等等,本文使用人工智能算法模型+flask框架!

 docker run -p 5000:5000 tts:v0.1 python app.py --text 

 docker run -p 5000:5000 tts:v0.1 python app.py --text 

如果出错,参考【PS1】

2.3.3.2.使用封装镜像生成容器

 docker run -it --gpus all --ipc host --net host --name tts-test insanena414/tts_v1:latest  /bin/bash

 

2.2.方法2:通过Git repo 进行创建

 docker build -t hello-world https://github.com/docker-library/hello-world.git#master:amd64/hello-world

命令指定了构建所需的 Git repo,并且指定分支为 master,构建目录为 /amd64/hello-world/,然后 Docker 就会自己去 git clone 这个项目、切换到指定分支、并进入到指定目录后开始构建。

2.3.方法3:通过 tar压缩包进行创建

docker build my.tar.gz

过程中遇到的问题与解决【PS】

【PS1】docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #1: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'

  错误分析:可能是电脑现在的cuda device版本与torch版本不匹配。

参考文献

【1】使用 Dockerfile 定制镜像 · Docker -- 从入门到实践 (docker-practice.github.io)

【2】How To Build Docker Image [Comprehensive Beginners Guide] (devopscube.com) 

【3】자주 변경되는 도커 이미지 빠르게 배포하기 (feat. 이미지 사이즈) | 잡잡 블로그 (kimeuichan.github.io) 【4】Top 20 Dockerfile best practices for security – Sysdig

猜你喜欢

转载自blog.csdn.net/weixin_44649780/article/details/135100119