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

docker学习---第3步:docker实操大模型

文章目录

  • 1.Images
  • 2.Container
  • 3.Dockerfile
    • ENTRYPOINT和CMD
    • COPY和ADD
    • LABLE、EXPOSE和VOLUME
      • 卷中的数据是如何做数据备份的?
    • ARG和ENV
    • HEALTHCHECK

跟着b站 胖虎遛二狗学习 Docker动手入门 | 大模型工程师必备技能 (🎉已完结)
docker是通用的跨平台解决方案,学习docker需要一些linux的基础
在这里插入图片描述
镜像:是一个二进制的文件,可以理解为一个模版,在这个模版上可以创建容器。镜像是环境和代码,是不能跑的东西
容器:实际是一个可以运行的东西,并且在镜像的基础上可以运行多个。

docker 命令 -h 或者 --help

可以查看docker命令的用法

1.Images

在这里插入图片描述

docker images # 列出镜像
docker image ls  # 同样是列出镜像
docker search hello-world # 查找名为hello-world的镜像(在docker hub中查找)
docker pull hello-world #拉取一个名为hello-world的镜像
docker rmi hello-world # 删除一个名为hello-world的镜像
docker rmi -f hello-world # 强制删除一个名为hello-world的镜像
docker tag ee3 jiaoyidi/hello-world:1.0 把一个hello-world的镜像名改成自己喜欢的镜像名(带上了账户id和相同镜像名hello-world)(用于将一个镜像提交到公共仓库的时候用到)
jiaoyidi是docker的账号id,jiaoyidi/hello-world表示这个账户下的一个仓库,1,0就是版本号,修改完镜像名称,就可以把这个镜像推送到公共仓库中去
docker push jiaoyidi/hello-world:1.0 把刚才的镜像推送上去
别人搜索我推送的镜像:docker search jiaoyidi/hello-world
推送一个离线的镜像:docker save -o hw.tar jiaoyidi/hello-world # 是把镜像中的文件放到一个文件中,变成一个包,没有进行压缩。hw.tar是起的一个镜像文件名
tar只是打包
使用到tar.gz才是先打包再压缩
别人收到镜像文件,该如何使用:docker load -i hw.tar # 就是将镜像文件hw.tar输出出来
tag功能是给镜像打一个别名
docker history 镜像名 # 查看一个镜像以往被修改过的历史
docker inspect 镜像名 # 查看镜像中的内容

在这里插入图片描述
在这里插入图片描述

2.Container

在这里插入图片描述
docker ps # 看正在运行的容器
容器与宿主机隔离,宿主机访问容器的服务,服务是api的形式进行访问的,
在这里插入图片描述
0.0.0.0::5005->5000/tcp,这个代表宿主的机的50005端口可以访问到容器的5000端口
NAMES,如果不指定别名的话,会随机生成一个别名

docker ps -a # 把所有的服务全部列出来
docker stop e9c # 把e9c这个服务给停掉
docker start e9c # 把e9c这个服务给开启
docker restart e9c # 重启e9c这个服务,重启的意思应该是将关闭与开启的动作合在一起
docker rm e9c # 删除e9c这个容器(前提先要关闭这个容器),如果强制删除,则使用docker rm -f e9c(不推荐使用)
docker logs 容器名 # 查看容器的日志。

在这里插入图片描述

docker logs -f 容器名 # 跟踪日志输出,每次有访问,都会记录在容器日志

在这里插入图片描述

docker exec -it 291 bash # 进入291这个容器中,执行bash这个命令。-i表示交互性的  -t 表示终端 两个命令合在一起意思就是进入一个可交互的终端中去

解释参数中一个-和两个的区别:一个-后面带的是一个字符,两个-后面跟的是一个命令(如–rm),而不是像上面一样两个命令拼在一起的(-i和-t合在一起是-it)
在这里插入图片描述
如果临时要让宿主机与容器进行文件上的交互,使用下面指令:

docker cp ./hw.tar 291:/app/hw.tar # 将宿主机上的一个文件hw.tar拷贝到容器内部app下的hw.tar

在这里插入图片描述

docker cp 291:/app/hw.tar ./hw.tar  # 将容器内部app下的hw.tar拷贝到宿主机上

在这里插入图片描述

docker stats #  查看docker占用的资源
docker networ # 查看网络,容器可以通过桥接访问宿主机的内容,宿主机为了保证容器是绝对干净的,所以不能访问容器的内容,如果要使用宿主机去访问容器内的东西,需要做端口映射,即0.0.0.0::5005->5000/tcp这样一个东西
docker run ee3 # 运行起来一个容器
docker run -d ee3 # 运行起来一个容器的同时不会占用当前的终端界面,d表示detach,分离的意思,可以理解为后台执行
docker run -it 4b1 bash # 启动一个容器4b1,生成一个可以交互的终端界面,进入之后给一个初始命令bash
docker run --rm  -d 4b1 # 在后端执行一个容器之后如果这个容器被停止之后,会自动销毁,通过start会restart等都启动不了那个容器了
docker attach d1f # 进入到一个正在运行的终端
create这个命令不常用
kill 强制杀掉一个容器,也不常用
docker top  看下进程的占用,不常用
docker commit 09d 09d:1.0 # 把一个容器变成一个镜像,不建议这么做,原因是这么构建的镜像相当于是一个黑盒,有很高的不确定性。构建镜像的最好方法是从dockerfile去构建一个镜像,这样构建出的镜像别人可以复现出一个一模一样的镜像。

3.Dockerfile

自己构建一个镜像给别人用
在这里插入图片描述

FROM python:3.10-slim  # 一个基础的镜像开始,如果这个镜像本地不存在的话,会从dockerhub上下载WORKDIR /app # 设置docker的工作路径,约定把所有的代码放在这个里面,这个路径是项目的根路径COPY . /app/ # 将宿主机上当前路径下所有的文件都拷贝到指定目录下RUN pip install flask # 执行命令,这个命令可以是任何linux上一个命令CMD ["python",“app.py”] # 以上操作执行完会构建出一个镜像,执行CMD会启动容器,是项目的入口

docker build -t d1 . # 根据当前目录下的一个Dockerfile文件去编译为一个镜像,.表示当前目录,-t是为镜像设置一个标签,标签名为d1

ENTRYPOINT和CMD

① ENTRYPOINT ["echo",“1]
② CMD [“echo”,"1"]

单独执行第1条命令,则会输出1 命令是docker run d1
如果命令 docker run d1 2,即2可以作为参数进行输入,输出是覆盖掉默认的1
单独执行第2条命令,则会输出1 命令是docker run d1
如果命令 docker run d1 2,即2不可以作为参数进行输入,不能覆盖掉默认的1,此时将报错
常见的用法是(合在一起)

ENTRYPOINT ["echo"]
CMD ["1"]

功能是以下:
docker run d1 # 默认打印1
docker run d1 2 # 将2做为参数输入进去,此时将打印2

COPY和ADD

COPY . /app/ # copy将dockerfile所在的文件夹下的内容复制到/app/下面
ADD docs.tar.gz /app/ # 可以实现和copy同样的功能,具备额外的两个功能:1、可以在网上下载文件(生产环境上基本不用),2、如果有tar包可以自动解压(这种功能也不用,因为它不显示解压过程,可读性差)
RUN tar -xvf # 如果想解压,直接写解压命令,可读性强

LABLE、EXPOSE和VOLUME

LABLE maintainer = "胖虎遛二狗" # 写过阅读dockerfile的人看的
EXPOSE 5000 # 把容器中的端口暴露出来
VOLUME ["./data"] # 声明容器中./data是用来存放数据的,可以与宿主机向连,也可以docker中的卷相连

上面的三个命令写不写都不对镜像构成影响,只是为了声明别人镜像中有这些信息
maintainer的命令已经不用了
user指定执行默认角色是root
shell改shell脚本
healthcheck

FROM python:3.10-slim  WORKDIR /app LABLE maintainerEXPOSE 5000VOLUME ["./data"]COPY . /app/RUN pip install flaskCMD ["python",“app.py”] 

构建上面这个镜像:docker build -t d4 .
运行上面的镜像:docker run -d -p 5001:5000 -v ./docs:/app/docs q4
-p:容器内部app.py使用的是5000端口,如果要让容器外也能访问容器内部的程序,需要做端口转发,转发在命令中体现(5001:5000)
-v 是要将宿主的文件与容器内的文件进行交互,./docs:/app/docs表示将宿主机当前文件夹下docs与容器中/app/docs关联在起来,也就是这两个文件夹里面的文件的操作都是互通的,比如在宿主机上删除和创建、容器内部文件的删除与创建是同步的
q4 表示执行的是q4这个镜像
touch newfile.txt # 创建一个空文件
在实际开发中不建议把宿主机的文件与容器的文件绑定在一起
风险1:如果容器中某个文件是与宿主机关联的,宿主机上的文件被删除了,那么容器崩溃了,此时将会报错
风险2:绑定后运行效率低,不如利用容器自身的卷管理效率高

docker volume create vvv # 新创建一个卷,卷是docker自己维护的
docker volume ls # 列出所有的卷
docker run -d -v vvv:/app/docs q4 # 将容器中卷vvv与容器q4中的/app/docs绑定在一起

使用卷的方式可以实现容器之间的文件通信,但不适合实时通信。
卷的作用:
持久化存储: 卷用于保存容器中的数据,即使容器被删除,卷中的数据仍然保留。
数据共享: 卷可以在容器与主机之间共享数据,也可以在同一主机的多个容器之间共享数据。
虽然卷的主要用途不是通信,但可以通过共享卷实现容器之间的数据交换。
在这里插入图片描述
下面这两个命令可以实现上面图中表示的功能

docker cp # 把文件从容器拷贝到宿主机,把宿主机的文件拷贝到容器内
docker volume # 将宿主机的文件与容器中的文件绑定在一起;将卷与容器中的文件绑定在一起

docker run --mount type=volume,source=my-volume, target=/data image-xx # mount命令中type填卷的名字,source的值写源是什么,target的值写目标是什么,image-xx就是写docker run的镜像名字
docker run -v my-volume:/data image-xx

docker volume create v2 # 创建一个名为v2的卷
docker volume rm v2 #删除卷为v2的卷,删除是有条件的,就是和卷相关的镜像和容器必须都清理掉才能删除卷

卷中的数据是如何做数据备份的?

看下面的命令:

docker run --rm -it -v v1:/app/data1 -v ./docs:/app/data2 4b1 bash

这条命令将v1卷与容器中的data1进行绑定,将宿主机的./docs与容器中的data2进行绑定,将data1中的数据复制到data2中。–rm表示表示容器在退出后会自动删除。适合临时测试或调试场景,避免留下无用的容器。
在这里插入图片描述
数据备份(目标:将v1的数据备份到docs),将 data1 中的数据拷贝到 data2 中,会实现以下效果:
数据从卷 v1 复制到主机目录 ./docs。data1 对应的是 Docker 命名卷 v1 的内容。data2 对应的是主机上的目录 ./docs 的内容。将 data1 中的数据拷贝到 data2,相当于将 Docker 卷 v1 中的数据复制到主机目录 ./docs 中。

利用卷做数据备份的示例场景
假设:
主机上有一个目录 ./docs,里面包含一些文件。
主机上有一个命名卷 v1,里面也包含一些文件。

执行命令后:
1、容器启动,并挂载了 v1 和 ./docs。
2、进入容器的 Bash 终端后,可以访问 /app/data1 和 /app/data2 目录:
/app/data1 包含卷 v1 的内容。
/app/data2 包含主机目录 ./docs 的内容。
3、在容器中进行的任何修改(如创建、删除、修改文件)都会反映到主机上的卷或目录中。
4、退出容器后,容器会自动删除,但卷和目录中的数据会保留。

ARG和ENV

下面这两个命令有点云里雾里,还得再研究一下:

ARG APP_VER=1.0 # 主要用于构建容器过程中
ENV APP_ENV=1.0 # 主要用在容器运行过程中RUN echo “$APP_VER” # 打印APP_VER这个变量
RUN echo “$APP_ENV”

运行docker build -t q5 . 显示下面内容
在这里插入图片描述
运行docker run -it q5 bash,并执行env命令查看APP_ENV变量值
在这里插入图片描述
docker build --build-arg APP_VER=2.0 --build-arg APP_ENV=2.0 -t q6 .在这里插入图片描述
可以通过变量APP_VER来将版本号传进去,但是上面中的命令不会改变APP_ENV

HEALTHCHECK

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl--fail http://localhost:5000/ || exit 1

HEALTHCHECK是一个定时命令,会不断地测试这个容器会不断地运行,执行的命令是CMD curl–fail http://localhost:5000/,不断地调用5000端口,如果不能调用成功就会报错,–interval=10s是每隔10s进行测试一次,如果超时3s --timeout=3s --retries=3会重复请求3次
执行docker run -d -p 5005:5000 q7
在这里插入图片描述
可以查看容器的运行状态

相关文章:

docker学习---第3步:docker实操大模型

文章目录 1.Images2.Container3.DockerfileENTRYPOINT和CMDCOPY和ADDLABLE、EXPOSE和VOLUME卷中的数据是如何做数据备份的? ARG和ENVHEALTHCHECK 跟着b站 胖虎遛二狗学习 Docker动手入门 | 大模型工程师必备技能 (🎉已完结&…...

记录第一次在windows环境编译libuvc库 踩的坑

最近遇到windows下编译libuvc库,实现经usb连接的摄像头拍摄采集。绕了一大圈,记录一下。 首先,作为新手,肯定需要参考大神资料,但是还是踩了坑。 要在windows 环境下安装libuvc的驱动并确保可用,需要经过一系列流程&a…...

快速集成DeepSeek到项目

DeepSeek API-KEY 获取 登录DeekSeek 官网,进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存,后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码,具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…...

基础连接已经关闭: 服务器关闭了本应保持活动状态的连接

您在进行 HTTP 请求时遇到“基础连接已经关闭: 服务器关闭了本应保持活动状态的连接”的错误,这通常与连接的保持活动(Keep-Alive)设置有关。以下是可能的原因和解决方法: 可能的原因: Keep-Alive 设置: 默…...

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用,提高可维护性。 —这个有两个方案:一个是二次封装一个是实例化。(设置一些公共的参数,然后进行请求) 为什么可以解决代码的复用: 这是…...

本地部署DeepSeek Nodejs版

目录 1.下载 Ollama 2.下载DeepSeek模型 3.下载 ollama.js 1.下载 Ollama https://ollama.com/ 下载之后点击安装,等待安装成功后,打开cmd窗口,输入以下指令: ollama -v 如果显示了版本号,则代表已经下载成功了。…...

【PL/SQL】常用操作复习20250212

目录标题 1.基本语法结构二级目录三级目录 1.基本语法结构2。变量声明和使用3. SELECT 查询4.插入 insert5.更新UPDATE6.删除(DELETE) 7游标 cursor例子1:基本游标使用例子2:使用FOR循环的简化写法实际应用例子:给高工资员工增加奖金 8 IF 条…...

vue3-02基础认识vue3中main.js入口文件,app.vue(不存在唯一根节点),扩展程序vue-devtools安装

1.main.js入口文件 main.js入口文件 // 引入的再是vue构造函数 // 引入的是createApp的工厂函数-直接进行引用 import { createApp } from vue import App from ./App.vue// vue3中 // createApp(App).mount(#app) // 创建应用实列对象-类似vue2中的vm,app比vm更轻 const app…...

如何下载Qt和运行第一个程序。

Ubuntu24.04 下载比较容易,基本都是无脑操作。途中汇出现有个别package下载不成功的情况,重新下载即可。 文章目录 下载qt运行qt第一个项目 下载qt 1.先找到官网,点击Download。 2.然后选择,community User 3.然后会跳转到这个…...

【MySQL例题】我在广州学Mysql 系列——有关数据备份与还原的示例

ℹ️大家好,我是练小杰,今天周二,明天就是元宵节了呀!!😆 俗话说“众里寻他千百度。蓦然回首,那人却在,灯火阑珊处。” 本文主要对数据库备份与还原的知识点例题学习~~ 前情回顾&…...

硬件学习笔记--40 电磁兼容试验-4 快速瞬变脉冲群试验介绍

目录 电磁兼容试验-快速瞬变脉冲群试验介绍 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-快速瞬变脉冲群试验介绍 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在…...

国密算法SM1、SM2、SM3和SM4 具体的使用和区别

国密算法是中国自主研发的密码算法,包括SM1、SM2、SM3和SM4,分别用于不同场景。以下是它们的具体使用和区别: SM1 对称加密算法 类型: 对称加密 密钥长度: 128位 使用场景: 用于数据加密和解密,适用于金融、政务等领域。 特点: …...

在Ubuntu中安装Docker并配置国内镜像

官方下载安装链接 https://docs.docker.com/engine/install/ubuntu/ 1.查看系统版本,并与之与docker文档对应 OS requirements# 查看系统版本命令 lsb_release -a 2.卸载旧版本 Uninstall old versions 3.安装新版本 Installation methods Install using the…...

【大模型】阿里云百炼平台对接DeepSeek-R1大模型使用详解

目录 一、前言 二、DeepSeek简介 2.1 DeepSeek 是什么 2.2 DeepSeek R1特点 2.2.1 DeepSeek-R1创新点 2.3 DeepSeek R1应用场景 2.4 与其他大模型对比 三、阿里云百炼大平台介绍 3.1 阿里云百炼大平台是什么 3.2 阿里云百炼平台主要功能 3.2.1 应用场景 3.3 为什么选…...

DeepSeek本地部署详细指南

DeepSeek本地部署详细指南 随着人工智能技术的飞速发展,本地部署大模型的需求也日益增加。DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私。以下是…...

厘米和磅的转换关系

在排版和设计领域,厘米(cm)和磅(pt)都是常用的长度度量单位,它们之间的转换关系基于特定的换算标准,下面为你详细介绍: 基本换算关系 磅是印刷行业常用的长度单位,1英寸…...

Unity-Mirror网络框架-从入门到精通之LagCompensation示例

文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…...

DeepSeek+3D视觉机器人应用场景、前景和简单设计思路

DeepSeek3D视觉机器人在多个领域具有广泛的应用场景和巨大的前景。以下是详细的分析: 应用场景 制造业 自动化装配:机器人可以精确地抓取和装配零件,提高生产效率和产品质量。 质量检测:通过3D视觉技术检测产品缺陷,确…...

STM32+Proteus+DS18B20数码管仿真实验

1. 实验准备 硬件方面: 了解 STM32 单片机的基本原理和使用方法,本实验可选用常见的 STM32F103 系列。熟悉 DS18B20 温度传感器的工作原理和通信协议(单总线协议)。数码管可选用共阴极或共阳极数码管,用于显示温度值。…...

Java自动生成api文档

在 Java 开发中,自动生成 API 文档是一项非常实用的功能,它能帮助开发者快速了解项目中的类、方法、参数等信息。以下为你介绍几种常见的 Java 自动生成 API 文档的方式: 1. 使用 Javadoc Javadoc 是 Java 自带的工具,它可以从 J…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...