前言
在现代软件开发和运维中,Docker 已成为一个关键的工具,它通过容器化技术提供了高效、可移植和一致的环境,使得应用程序能够在不同的环境中以相同的方式运行。容器化不仅提高了应用程序的可移植性,还简化了开发和部署流程。Docker 的核心概念包括镜像和容器,它们各自承担着不同的功能和角色。
一、Docker镜像是什么?
Docker 镜像 是一个轻量级的、可执行的独立软件包,它包含运行某个应用程序所需的所有代码、运行时、库、环境变量和配置文件。镜像是容器的构建蓝图,可以从 Docker Hub 或其他镜像仓库中获取,或者根据需要从 Dockerfile 构建。
二、Docker容器是什么?
Docker 容器 是镜像的运行实例。它是一个运行中的、可执行的单元,通过镜像构建而来。容器与虚拟机不同,它们更为轻量且启动速度更快。容器在运行时与宿主操作系统共享内核,但相互之间和宿主操作系统是隔离的。
三、前步骤
1.查看是否安装的cuda驱动
代码如下(示例):
# 检查 CUDA 版本:这将显示 CUDA 编译器驱动的版本信息。
nvcc --version
#检查 NVIDIA 驱动版本:这个命令会显示当前安装的 NVIDIA 驱动版本以及 CUDA 版本等信息。
nvidia-smi
2.查看是否已经安装好docker
代码如下(示例):
docker --version
3.预安装镜像地址:
代码如下(示例):
#padde 提供的镜像包地址:
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/docker/linux-docker.html
#jupyter提供的镜像包地址:
https://quay.io/repository/jupyter/pytorch-notebook?tab=tags
四、指令步骤
1.拉去镜像
代码如下(示例):
nvidia-docker pull registry.baidubce.com/paddlepaddle/paddle:2.6.1-gpu-cuda11.2-cudnn8.2-trt8.0
2.建立容器
代码如下(示例):
nvidia-docker run -it --name paddle_2.6.1 --gpus all --shm-size 32g -v /home/sss:/home/sss registry.baidubce.com/paddlepaddle/paddle:2.6.1-gpu-cuda11.2-cudnn8.2-trt8.0 /bin/bash
3.查看镜像容器
代码如下(示例):
#查看镜像
docker image ls
#查看容器
docker ps
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器
-q :静默模式,只显示容器编号。
#查看镜像依赖的容器
docker ps -a --filter ancestor=<container_id_or_name>
4.进入容器
代码如下(示例):
重启容器并进入交互模式
docker start <container_id_or_name>
docker start 命令用于启动一个已停止的容器。它不会自动附加到容器的控制台,只是将容器从停止状态切换到运行状态。
docker attach <container_id_or_name>
docker attach 命令用于附加到一个已经运行的容器的控制台。通过这个命令,您可以与容器的进程进行交互,查看输出,输入命令等。
docker exec -it <container_id_or_name> /bin/bash
由于容器已停止运行,因此您不能通过 docker exec 命令进入它。
以 root 用户身份进入到容器:
docker exec -u root -it 31e33aafc95b /bin/bash
5.退出容器
代码如下(示例):
方式一:exit(run进容器,exit退出,容器停止)
方式二:ctrl+p+q(run进去,ctrl+p+q退出,容器不停止)
6.查看容器日志
代码如下(示例):
docker stop paddle_2.6.1
7.删除镜像/容器
代码如下(示例):
#在删除镜像时,需要提前删除该镜像依赖的容器
docker rmi <container_id_or_name>
#删除容器时,需要停止该容器
dockers rm <container_id_or_name>
#强制删除容器
#可以使用 -f 选项强制删除正在运行的容器:
docker rm -f paddle_bing
8.在已创建的容器中安装torch
代码如下(示例):
#在线安装,可能受网速限制
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
#若网速问题导致安装不了,可以离线安装
torch官网的安装连接:
https://pytorch.org/get-started/previous-versions/
torch等本地下载路径
https://download.pytorch.org/whl/torch_stable.html
使用代码检测torch是否安装成功
python
>>>
>>>import torch
>>>print(torch.__version__)
五、打包步骤
1.停止正在运行的容器: 首先,使用以下命令停止正在运行的 Docker 容器:
代码如下(示例):
docker stop 5a1ad363ae1f
2.保存容器状态为镜像: 一旦容器停止,使用以下命令将其状态保存为一个新的镜像:
代码如下(示例):
docker commit 5a1ad363ae1f tonistiigi:latest
这将创建一个名为 jupyterlab_yolov10_dockerfile,标签为 v1 的新镜像。
3.导出镜像为 tar 文件: 保存好新的镜像后,使用以下命令将其导出为一个 tar 文件:
代码如下(示例):
#未使用sudo
docker save -o /home/sss/jupyterlab_yolov10_file_v1.tar jupyterlab_yolov10_file:v1
#若无权限,使用sudo
sudo docker save -o /home/sss/tonistiigi_latest.tar tonistiigi:latest
这将在 /home/sss/ 目录下创建一个名为 jupyterlab_yolov10_file_v1.tar 的 tar 文件,其中包含了你刚刚保存的镜像。
4、修改文件权限
sudo:以超级用户(root)权限执行命令。
chmod:改变文件权限。
777:设置文件权限为可读、可写和可执行(rwxrwxrwx)。
sudo chmod 777 jupyterlab_yolov10_file_v2.tar
4.从 tar 文件中加载 Docker 镜像:
准备 tar 文件: 确保你有一个包含 Docker 镜像的 tar 文件,例如 image.tar。
加载 Docker 镜像: 使用 docker load -i 命令加载镜像。以下是命令示例:
docker load -i /path/to/image.tar
总结
Docker 是一种广泛使用的容器化平台,它允许开发人员打包应用程序及其依赖项到一个标准化的单元中,这些单元可以在任何系统上运行。通过 Docker,开发和运维团队可以在开发、测试和生产环境中使用相同的环境,从而减少了因环境不一致导致的问题。