Docker | 使用Docker创建自定义镜像封装人工智能项目和环境
--------------------------- Docker 系列?-------------------------------
Docker | 深度学习中的docker看这一篇就够啦_深度学习docker-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,则在该目录中执行 、 、 、 或 等指令。RUN CMD ADD COPY ENTRYPOINT |
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!