Docker 安装 www.baidu.com 一大坨安装教程,看到你吐血!!!
按照规定的标准输入与输出格式开发算法,将算法封装到Docker镜像内,并将镜像推送到官方仓库中。提交镜像文件具体要求如下:
CUDA版本要求11.0; 构建镜像时指定CMD作为默认执行的命令; 容器内禁止使用网络 *** 作,否则会造成容器卡死,影响算法执行; 数据输入目录为/input_path(容器内目录),目录权限只读,此目录对应数据组织结构中的test目录; 数据输出目录为/output_path(容器内目录),目录权限可写; 算法入口程序为main.py,所在文件夹为/work(容器内目录),main.py需要读取/input_path中的数据,并将结果输出到/output_path;
下面是使用Dockerfile配置环境的示例和main.py示例:
Dockerfile示例:
# 基础镜像, cuda为11.0,ubuntu18.04 FROM cuda:11.0-cudnn8-runtime-ubuntu18.04 ##自行修改 # 配置程序依赖环境 RUN apt-get update && apt-get install -y --no-install-recommends build-essential cmake curl ca-certificates libjpeg-dev libpng-dev python3 python3-dev python3-pip && rm -rf /var/lib/apt/lists/* # 安装torch RUN pip3 install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html RUN pip3 install matplotlib>=3.2.2 RUN pip3 install numpy>=1.18.5 RUN pip3 install scikit-build RUN pip3 install setuptools>=33.1.1 RUN pip3 install Pillow RUN pip3 install PyYAML>=5.3.1 RUN pip3 install scipy>=1.4.1 RUN pip3 install torch>=1.7.0 RUN pip3 install tqdm>=4.41.0 RUN pip3 install grpcio RUN pip3 install tensorboard RUN pip3 install seaborn>=0.11.0 RUN pip3 install pandas RUN pip3 install opencv-python>=4.1.2 RUN python3 -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu110/torch1.7/index.html # 将程序复制到容器内的/work路径下 COPY . /work #COPY ./weights/best.pt /work/weights/ # 容器启动命令 CMD ["python3", "-u", "/work/main.py"]
1.main.py示例:
def fun(input_dir, output_dir): pass if __name__ == '__main__': parser = argparse.ArgumentParser() # 数据集路径 parser.add_argument("--input_dir", default='/input_path', help="input path", type=str) # 输出路径 parser.add_argument("--output_dir", default='/output_path', help="output path", type=str) args = parser.parse_args() start_time = time.time() torch.backends.cudnn.benchmark = True os.environ['CUDA_VISIBLE_DEVICES'] = '0' fun(args.input_dir, args.output_dir) print('total time:', time.time() - start_time)
2.构建镜像
编写好Dockerfile后,与需要打包的程序放到同一个文件夹下,然后进行以下步骤:
docker build -t docker.image/:1.0.0 .
注意最后的.前面有空格.
3.测试:
运行完成后可在/data/output_path/中查看输出结果
docker run -it --rm -v /data/input_path/:/input_path -v /data/output_path/:/output_path docker.image/:1.0.0
如果需要进行深度学习算法更换,只需要替换main.py中的fun函数就可以.
4.Docker 中会用到的指令:
- 镜像构建失败,需要删除tag为的镜像:
删除none的镜像,要先删除镜像中的容器。要删除镜像中的容器,必须先停止容器。 $ docker images $ docker rmi $(docker images | grep "none" | awk '{print }') 直接删除带none的镜像,直接报错了。提示先停止容器。 $ docker stop $(docker ps -a | grep "Exited" | awk '{print }') //停止容器 $ docker rm $(docker ps -a | grep "Exited" | awk '{print }') //删除容器 $ docker rmi $(docker images | grep "none" | awk '{print }') //删除镜像
- 删除所有镜像:
docker rmi -f $(docker images -qa)
- 容器 *** 作:
查看运行容器
docker ps
查看所有容器
docker ps -a
进入容器
其中字符串为容器ID:
1. docker exec -it d27bd3008ad9 /bin/bash 2. docker attach d27bd3008ad9
1.停用全部运行中的容器:
docker stop $(docker ps -q)
2.删除全部容器:
docker rm $(docker ps -aq)
3.一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
- docker系统修剪
docker system prune了以下内容:
所有停止的容器 至少一个容器未使用的所有网络 所有悬空的图像 所有悬空的构建缓存
此清除命令将节省大量硬盘空间。
$ sudo docker system prune WARNING! This will remove: 1. all stopped containers 2. all networks not used by at least one container 3. all dangling images 4. all dangling build cache Are you sure you want to continue? [y/N] y Deleted Containers: 10b3f08a93df89818976a29c26f5ccefbda1e2dc2e0205a02e9a3306590a1455 89d9cb3e102dbadc9d314bea0db5feb3110931727e2da0b88d6d88d7d78f4400 49e429f26db40615557a85fdf758cd66afa208dba03f74aea860bb04bb4772b2 3e36a2c0c241f8b815ddc73f398cae97962a6799c244fd5169cd845023c5b657 ... Deleted Images: deleted: sha256:fe111236265a30b8ec54390defb5da60cc7b76a0d3ff0e883691b8b3c663f2e9 deleted: sha256:2e591f44cd334c7896ed01660d45099f4f58169d0584163b6009dea56c3abcbe deleted: sha256:8b1c255bf0e627c789fc35b3b3b0a1e5033f6be612e01dca08eb1aa4fd161364 ... Total reclaimed space: 251.3MB
- docker 从镜像中复制代码到本地
docker cp:/file/path/within/container /host/path/target
注意是containerId 不是 image Id .
如果刚拉取的镜像, 先 *** 作:
1. sudo docker run -it your_docker_image:version /bin/bash 2. docker ps -a
如果Version 是**
docker tag ec083d1555e4 docker.image/image_name:1.0.15 sudo docker cp -a 427870a03728:/work /home/yourPC/Desktop/1.0.8f/
查看对应镜像的容器ID.继续执行copy *** 作即可.
- 本地复制到docker image:
建议使用Dockerfile的 *** 作:
有两个类似Dockerfile指令,COPY或着ADD,这两者都用于为包括在文件中的图像
COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。
满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩。
- COPY指令
COPY指令能够将构建命令所在的主机本地的文件或目录,复制到镜像文件系统。
exec格式用法(推荐):
COPY ["",... " "],推荐,特别适合路径中带有空格的情况
shell格式用法:
COPY...
- ADD指令
ADD指令不仅能够将构建命令所在的主机本地的文件或目录,而且能够将远程URL所对应的文件或目录,作为资源复制到镜像文件系统。
所以,可以认为ADD是增强版的COPY,支持将远程URL的资源加入到镜像的文件系统。ADD命令能对本地归档文件进行解包而COPY不行。
exec格式用法(推荐):
ADD ["",... " "],特别适合路径中带有空格的情况
shell格式用法:
ADD...
将当前路径下所有程序复制到容器内的/work路径下 COPY . /work
-
COPY指令和ADD指令的用法非常相似,具体注意事项如下:
源路径可以有多个
源路径是相对于执行build的相对路径
源路径如果是本地路径,必须是build上下文中的路径
源路径如果是一个目录,则该目录下的所有内容都将被加入到容器,但是该目录本身不会
目标路径必须是绝对路径,或相对于WORKDIR的相对路径
目标路径如果不存在,则会创建相应的完整路径
目标路径如果不是一个文件,则必须使用/结束
路径中可以使用通配符 -
读取URL远程资源
RUN mkdir -p /usr/src/things && curl -SL http://example.com/big.tar.xz | tar -xJC /usr/src/things && make -C /usr/src/things all
- 切换GPU docker中 nvidia-smi可查看GPU属性
sudo docker run --gpus all nvidia/cuda:9.0-base nvidia-smi
至此,基本 *** 作基本完成,有用都帮忙点个赞呗,写文档确实很耗时间,谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)