一文搞懂!10分钟速通docker,我们普通玩家怎么使用docker,打包镜像,实战教程,狠狠收藏。
0.前言
很久没有更新了,今天更新一个关于docker的工具吧。这两天实习太累了,明天去公司正好用ubuntu的机子把qnn的那篇文章完结。诶!我在公司也是用docker来进行量化然后打包,这样别人也可用,所以这篇文章看看也是好的。话不多,现在开始吧!
1.什么是docker
咱们实践派不讲那么多奇奇怪怪的理论。现在问你,如果你跑通了一个yolov5和v8的代码,你现在想在另外一台机子上去跑一下。你会怎么做,是不是还是傻傻的下载conda,然后create两个不同的环境,pip一大堆库,最后还框框报错。其实没有那么麻烦,如果你一个环境跑通了,你可以创建一个镜像,然后给另外一台机子,然后这个问题就解决了。那这个镜像是什么呢?就是我们要讲的docker,它的用处就是这个。
2.比喻的讲解一下docker
你只需要理解docker就是一个工具。然后你现在用的电脑假如是win系统的。你可以用docker创建一个容器,这个容器就是一个小电脑,可以在里面安装ubuntu,然后可以在容器里面创建conda,在conda里面再创建环境,适配不同的任务。比如上面的yolov5和v8的环境,你可以先创建一个容器,然后在里面下载一个conda,create两个环境,然后挂载到你的本地路径下。这个时候,你就可以在容器里面的终端执行脚本,但是!在容器里面,你的路径是容器路径,容器就是一个小电脑你记住!!

举一个具体的例子,你的电脑有欧美视频,它和容器1互相挂载,但是容器它也是一个独立的小电脑,想在容器里面看,你就必须在容器的路径下去寻找。你在本地的时候,可以往c盘添加视频,然后你在容器里面就可以看见添加的视频。OK你看完了,你想分享给好朋友小明看,你可以导出容器,它就变成了镜像(理解成光碟),然后小明的docker(相当于DVD),就可以制作出一摸一样的容器,他就可以在自己的三年高考五年模拟文件夹看到study路径下的视频,你俩就可以随意分发视频了。
3.实战
因为在宿舍,我就用自己电脑(win系统)搞一下了。
1. 你先在win系统里面装一个docker desktop,如果是ubuntu,你让大模型输出一个指令安装一个docker,不过它没界面,纯靠指令。所以我在win上面也全用指令。
2.下载完成之后把它打开,应该是这个界面。

3.这时候你开一个终端,输入docker images ,这时候你可以看见镜像(就是上面说的光碟),还有这个镜像的id号,大小之类的。如果是第一次使用应该是空的

4.我们来创一个容器,首先先创建一个Dockerfile文件,先创建一个txt,然后给后缀删了就行

5.我们在docker里面创建一个ubuntu22,下载一个conda,具体说明已经在下文,你直接复制进去就行。很多东西不用,如果你觉得用不到直接删了也行。
FROM ubuntu:22.04
# 避免交互式提示
ENV DEBIAN_FRONTEND=noninteractive
# 更换为阿里云镜像源
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 安装基础系统依赖(QNN 需要的基础库)
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
clang-14 \
wget \
unzip \
git \
libgl1-mesa-glx \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# 安装 Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /miniconda.sh && \
bash /miniconda.sh -b -p /opt/conda && \
rm /miniconda.sh
# 设置 Conda 路径
ENV PATH=/opt/conda/bin:$PATH
# 初始化 Conda
RUN conda init bash && \
echo "conda activate base" >> ~/.bashrc
# 创建工作目录
WORKDIR /workspace
CMD ["/bin/bash"]
5.然后再这个路径下面输入 docker build -t myqnn:v1.0 . ,他就会开始创建。myqnn:v1.0这个玩意你自己修改,'名称:什么版本'。
6.这时候你就有一个基础镜像了,你再输入 docker images 应该就可以看见自己创建的镜像了,我们现在创建自己的第一个容器。
docker run -it \
--name qnn_work \ #容器的名称
-v C:\Users\adorkable\data:/workspace/data \ #前面是你win的路径,后面是容器的路径
--entryopint /bin/bash #建议用这个参数,输入bash,可以忽略别人内部一些乱七八糟的东西
myqnn:v1.0 \ #你镜像的名称和版本号
这时候你就创建好了一个容器,你再输入docker ps -a 这个指令就可以看到自己容器。
然后我们启动它,docker start 容器id docker exec -it 容器id /bin/bash 如图所示

这就变成了root开头,base环境了。你就可以随便创建环境,最后你想打包
只需要输入exit 先退出。
# ===== 保存镜像 =====
docker commit -m "完成QNN编译" qnn_work myqnn:compiled-v1.0
# ===== 导出镜像 =====
# 保存到桌面
docker save -o C:\Users\adorkable\Desktop\myqnn-compiled.tar myqnn:compiled-v1.0
最后把这个tar给小明就可以了。小明使用 docker load -i xxx.tar 就可以加载你的镜像
当然,vscode更好用,你可以用vscode去看你容器的东西,如果所示


你就可以手动在这里打开容器,不需要输入指令,而且可以像看工程一样去看这个容器。自己快去摸索摸索吧!!!!!
更多推荐
所有评论(0)