一、Docker介绍
Docker是一个开源的应用容器引擎,它允许开发者在几乎任何环境中运行应用程序,而无需担心运行环境的问题。Docker的核心概念是容器,它可以将应用程序及其依赖项打包在一起,形成一个独立的环境。这使得开发者可以在不同的机器上复制相同的运行环境,从而实现应用程序的快速部署和迁移。
Docker的主要优点包括:
- 轻量级:Docker容器比虚拟机更轻量,因为它们共享宿主机的操作系统内核。这使得Docker容器启动速度更快,占用资源更少。
- 可移植性:由于Docker容器包含了应用程序的所有依赖项,因此可以在任何支持Docker的环境中运行,无论是在物理机、虚拟机还是在云端。
- 易于管理:Docker提供了强大的镜像管理功能,可以轻松地创建、删除和共享容器镜像。此外,Docker还支持自动化构建和部署,大大提高了开发效率。
- 安全性:Docker容器之间的隔离性较好,可以有效防止应用程序之间的冲突和干扰。此外,Docker还提供了许多安全特性,如命名空间、cgroups和AppArmor,可以帮助保护容器内的应用程序。
- 开源:Docker是一个开源项目,拥有庞大的社区和丰富的资源,包括文档、教程和插件。这使得Docker非常灵活,可以根据需求进行定制和扩展。
1.1 镜像与容器区别
镜像(Image)和容器(Container)是Docker技术中的两个核心概念,它们之间的关系类似于传统计算机中的操作系统和应用程序。
- 镜像(Image):镜像可以看作是一个只读的模板,它包含了创建容器所需的全部内容和元数据。镜像本身并不运行任何程序,而是用来创建容器。一个镜像可以创建多个容器,这些容器之间相互独立。
- 容器(Container):容器是从镜像创建的运行实例,它包含了运行中的应用程序及其所需的依赖项和环境变量。容器是轻量级的,因为它共享了宿主操作系统的内核,这使得容器启动速度非常快,且占用资源较少。
简单来说,镜像定义了容器的行为和属性,而容器则是镜像的运行实例。
二、Docker命令
构建镜像
sudo docker build -f ./ultralytics-main/docker/Dockerfile -t yolov8:v0 .
查看容器
docker imagee
查看正在运行的容器ID(所有运行过的容器)
docker ps -a
安装ssh服务/根据运行的容器,直接进入:
docker exec -t -i ubuntu /bin/bash
运行容器
""" 命令解释 (-d 一直运行;-i 交互式操作; -t 终端;-v 挂载路径 “/home/zzy_ubuntu/share”表示主机路径 “/usr/share/files1”表示docker路径;--gpus表示使用gpu ;“fa50f7fed43a ” 表示容器ID) """ # 一直运行容器,exit不会退出(再次进入需要使用docker exec) sudo docker run -dit --gpus all fa50f7fed43a /bin/bash # 使用GPU sudo docker run -it --gpus all fa50f7fed43a /bin/bash # 使用CPU sudo docker run -t -i 容器id /bin/bash # 运行时挂载 {yolov8:base} 是容器id的tag #### ubuntu挂载 sudo docker run -dit --gpus all -v /home/zzy_ubuntu/share:/workspace/share yolov8:1.0 /bin/bash #### windows挂载 sudo docker run -dit --gpus all -v /mnt/f/python/company_code/Algorithm_architecture/yolov8:/workspace/share yolov8:1.0 /bin/bash
停止运行容器
sudo docker stop <容器ID>
删除容器
############################################## 删除容器 sudo docker rm <容器ID前三位> ############################################## 删除镜像 docker rmi -f 镜像id # 删单个 docker rmi -f 镜像id 镜像id # 删多个 docker rmi -f $(docker images -aq) # 删除所有
进入容器终端
docker exec -it 容器ID /bin/bash # 此方法需要先通过docker run -dit后台启动
保存新镜像(打包tar)
# 使用save参数进行打包,格式如:docker save -o tar文件名称 镜像REPOSITORY:TAG docker commit -m="描述信息" -a="作者" 容器id 目标镜像名: [TAG] ---docker commit -m="最新的yolov8环境-无tensorrt" -a="zhaozhiyuan" 2b22 yolov8:cuda11.6.2-cudnn8302-py38 docker save -o yolov5-v6.2.tar yolov5:v6.2 ---- 将镜像保存为.tar文件,默认保存在当前目录 # sudo docker save <镜像ID> -o /home/yolov8_v0.tar # 其中yolov5:v6.2 是需要保存镜像的REPOSITORY、和TAG;也是上面保存的镜像名称。
给镜像打标签和删除标签
# 打标签 sudo docker tag aba01f181a4a webconsole:latest
容器导出
sudo docker export -o xxx.tar <容器id>
加载tar镜像
# 使用load进行从tar文件导出镜像 docker load -i yolov5-v6.2.tar # 然后查看是否出现镜像 docker images