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

发布时间:2023年12月20日

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

文章来源:https://blog.csdn.net/weixin_44649780/article/details/135100119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。