当前位置: 首页 > news >正文

docker基础知识与具体实践

目录

  • 一、一些基本概念
  • 二、一些基本操作
    • 1、docker的安装、卸载、查看版本基本操作
    • 2、Dockerfile
    • 3、Image
      • 3.1 基于Dockerfile创建镜像
      • 3.2 拉取镜像
      • 3.3 查看现有镜像
    • 4、Container
      • 4.1 docker run语法
      • 4.2 一个简单的示例
  • 五、参考链接

一、一些基本概念

  • Dockerfile:
    • 一个纯文本文件,里面包含了一系列的指令和参数。这些指令按顺序描述了如何组装一个镜像;
    • 定义了镜像构建过程。它指定了基础环境(比如从哪个基础镜像开始)、复制文件、安装依赖、设置环境变量、暴露端口、配置启动命令等;
    • docker build命令操作Dockerfile,构建镜像。
  • 镜像(image):
    • 一个只读的模板,包含了运行一个应用程序所需的一切:代码、运行时环境、库、环境变量和配置文件;
    • 镜像是静态的、分层的,每一层都对应Dockerfile中的一条指令;
    • docker run命令操作镜像,启动容器。
  • 容器(container):
    • 镜像的一个运行实例。当使用docker run命令时,Docker会从镜像创建一个可写的容器层,并在其中运行应用程序;
    • 真正运行应用程序的隔离环境。
      在这里插入图片描述

二、一些基本操作

1、docker的安装、卸载、查看版本基本操作

详见:docker学习记录及部署pytorch模型

2、Dockerfile

一个简单的示例:

# Use the Ubuntu 22.04 image with CANN 8.0.rc1
FROM ascendai/cann:8.0.0-910b-ubuntu22.04-py3.10 # name:tag,可以是本地镜像,如果在本地已有镜像中没有找到才会下载# Set the working directory
WORKDIR /app# Install the requirements
COPY requirements.txt /app
RUN python -m pip install --upgrade pip && \python -m pip install -r requirements.txt# Copy the rest of the application into the image
COPY . /app# Expose port 7860 for the LLaMA Board
ENV GRADIO_SERVER_PORT 7860
EXPOSE 7860# Expose port 8000 for the API service
ENV API_PORT 8000
EXPOSE 8000# 指定默认的启动命令(非必须的):python3 app.py;
# 在启动容器的时候也可以指定其他的命令进行替换,比如/bin/bash,会启动一个 bash shell,让你进入容器内部进行操作
CMD ["python3", "app.py"]

常用命令说明:

指令用途示例
FROM必须的第一条指令,指定基础镜像FROM python:3.9-slim
LABLE为镜像添加元数据(如维护者、版本)LABEL version=“1.0”
WORKDIR设置后续指令的工作目录(相当于 cd,如果目录不存在会自动创建)WORKDIR /app
RUN执行命令并创建新的镜像层,常用于安装软件包(建议将多个 RUN 命令用 && 和 \ 连接成一个,以减少镜像的层数)示例见完成Dockerfile示例
COPY构建上下文中复制本地文件/目录到镜像COPY ./app /code/app
ADD类似 COPY,但支持 URL 和自动解压 tar 包(慎用)ADD https://example.com/file.tar.gz /tmp/
VOLUME在镜像中创建一个挂载点。当容器从该镜像启动时,Docker 会自动在主机上创建一个匿名目录并将其挂载到容器内。容器内该路径原有的任何数据都会被复制到卷(类似于容器外挂的移动硬盘)中,但此后对该路径的读写操作都直接发生在卷上。(慎用)VOLUME [ “/root/.cache/huggingface”, “/root/.cache/modelscope”, “/app/data”, “/app/output” ]
ENV设置环境变量ENV FLASK_APP=app.py
ARG定义构建镜像时的变量,其值在构建镜像时通过docker build --build-arg varname=value传递,仅在构建期有效,运行期容器中不存在ARG varname= [default value]
EXPOSE声明容器运行时监听的端口(只是一个文档说明,并不会自动映射端口);实际的端口映射需要在docker run时使用-p参数来完成EXPOSE 8080
CMD指定容器启动时默认执行的命令CMD [“python”, “app.py”]
ENTRYPOINT指定容器启动时运行的主要命令,可与 CMD 搭配ENTRYPOINT [“nginx”]

3、Image

3.1 基于Dockerfile创建镜像

docker build \-f Dockerfile_path \          # 指定使用的 Dockerfile,值为Dockerfile所在的路径-t name:tag \     # 给镜像打标签,不指定tag则默认为latest (可以打多个标签)--build-arg NODE_ENV=production \ # 传递构建参数.                        # 构建上下文为当前目录

3.2 拉取镜像

docker pull

root@localhost:/home/wzb# docker pull swr.cn-central-221.ovaijisuan.com/wh-aicc-fae/mindie:310p3-ascend_24.1.rc2-cann_8.0.rc2-py_3.10-ubuntu_22.04-aarch64-mindie_1.0.RC2.02
310p3-ascend_24.1.rc2-cann_8.0.rc2-py_3.10-ubuntu_22.04-aarch64-mindie_1.0.RC2.02: Pulling from wh-aicc-fae/mindie
47ebf8c90525: Pull complete 
6759517a3288: Pull complete 
Digest: sha256:ff768348028e35981f63e689949a6c5692abc891c391c7033d97eaac17f8270f
Status: Downloaded newer image for swr.cn-central-221.ovaijisuan.com/wh-aicc-fae/mindie:310p3-ascend_24.1.rc2-cann_8.0.rc2-py_3.10-ubuntu_22.04-aarch64-mindie_1.0.RC2.02
swr.cn-central-221.ovaijisuan.com/wh-aicc-fae/mindie:310p3-ascend_24.1.rc2-cann_8.0.rc2-py_3.10-ubuntu_22.04-aarch64-mindie_1.0.RC2.02

3.3 查看现有镜像

docker images

root@localhost:/home/wzb# docker images
REPOSITORY                                             TAG                                                                                 IMAGE ID       CREATED         SIZE
quay.nju.edu.cn/ascend/vllm-ascend                     main-310p                                                                           f4631451eb96   6 weeks ago     16GB
swr.cn-central-221.ovaijisuan.com/wh-aicc-fae/mindie   310p3-ascend_24.1.rc2-cann_8.0.rc2-py_3.10-ubuntu_22.04-aarch64-mindie_1.0.RC2.02   fc5bc00a9bc3   13 months ago   12.9GB

4、Container

4.1 docker run语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • OPTIONS 用于配置容器运行方式的选项;
  • IMAGE 为要启动的容器使用的镜像;
  • COMMAND 定义了启动容器时的执行命令,会替代Dockerfile中的CMD执行命令;
  • ARG 是传递给COMMAND命令的参数。

常用的一些OPTIONS选项:

选项作用示例
-d在后台运行容器并打印容器ID
-it交互模式运行容器(-i 保持标准输入打开,-t 分配一个伪终端)
--rm容器退出时自动删除容器
-p将容器的端口发布到主机的端口
-v全称volume,挂载宿主机目录或数据卷到容器
(-v <宿主机路径>:<容器内路径>[:选项])
-v /cqf/models/Qwen/Qwen2.5-14B-Instruct:/cqf/models/Qwen/Qwen2.5-14B-Instruct:ro # 挂载模型路径,:ro是为该挂载路径添加只读选项
--mount更现代的挂载方式,提供更多选项。--mount type=<类型>,source=<源>,target=<目标>[,<其他选项>]
类型包括:bind、volume、tmpfs;
源:对于 volume 是卷名,对于 bind 是主机路径;
目标:容器内的挂载目标路径
--device将宿主机上的设备映射到容器内,使容器可以直接访问该设备
(访问非NVIDIA设备,如昇腾)
(将宿主的昇腾NPU设备davinci0、davinci1映射到容器中)
--device /dev/davinci0 \
--device /dev/davinci1
--gpus指定容器可以使用GPU设备(NVIDIA GPU专用,能够)--gpus all
--gpus 2
--gpus ‘“device=0,2”’

4.2 一个简单的示例

root@localhost:/home/wzb# docker run --rm \--name vllm-ascend \--device /dev/davinci0 \--device /dev/davinci1 \--device /dev/davinci2 \--device /dev/davinci3 \ # 需要根据自己设备数量情况指定--device /dev/davinci_manager \--device /dev/devmm_svm \--device /dev/hisi_hdc \-v /usr/local/dcmi:/usr/local/dcmi \-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \-v /etc/ascend_install.info:/etc/ascend_install.info \-v /home/wzb/cqf/models/Qwen/Qwen2___5-14B-Instruct:/home/wzb/cqf/models/Qwen/Qwen2___5-14B-Instruct:ro \ # 需要替换成自己的模型路径,:ro是为该挂载路径添加只读选项-p 8000:8000 \-it quay.nju.edu.cn/ascend/vllm-ascend:main-310p bash # 需要替换成自己的镜像源
root@885d19188d9b:/workspace#

五、参考链接

docker镜像仓库:

  • https://hub.docker.com/
  • 国内的可用:
    • https://docker.xuanyuan.me/

NPU docker镜像:https://hub.docker.com/r/ascendai/cann/tags
昇腾镜像仓库官网:https://www.hiascend.com/developer/ascendhub

http://www.dtcms.com/a/389624.html

相关文章:

  • 【多模态】Simple o3 提高多模态模型准确率
  • hybrid的配置
  • 理解虚拟细胞:初学者指南
  • 哪种体量的公司或者哪些行业哪些项目需要上云服务器?
  • Linux安装问题:404 Not Found?配置源列表sources.list,修改为可用镜像源就可以了!
  • Vue3 中 props 与 $emit 的使用及 defineProps 与 defineEmits 的区别详解
  • vue的跨域配置
  • 计算机网络实验03:交换机VLAN配置
  • Vue中v-if与v-show的区别及应用场景解析
  • C++造轮子:手搓 List 容器
  • redis-list的基本介绍
  • ​​[硬件电路-247]:开关电源的工作原理、优缺点及应用场合
  • 【面试】Java中的垃圾回收算法详解
  • AI使用心得-完善中
  • rust编写web服务01-项目起步与环境准备
  • ORM框架及SQLAlchemy
  • 驱动开发---双机调试搭建支持win11(2025)
  • 驱动开发1:内核程序框架
  • 生产制造如何应对客户的订单变更
  • 深入浅出SpringMVC:从入门到实战指南
  • 深度学习入门:从感知机到多层感知机,用逻辑电路讲透神经网络的进化
  • macos m1 芯片无法安装kubeedge keadm 解决办法
  • 猎板 PCB:以全维度工艺突破,构建 PCB 制造技术壁垒
  • android12 SDK31 wifi开发(仅提供连接wifi的工具类)
  • Android播放视频适配黑边问题类型总结
  • 第十一章:AI进阶之--模块的概念与使用(二)
  • 异常检测patchcore 学习笔记 2025
  • [iOS] 网络 - AFNetWorking
  • iOS App 混淆与性能稳定性优化 混淆开销、崩溃风险、CI 集成与落地实务(
  • Freertos系统(任务挂起和恢复)