创建镜像:
alias=`whoami | cut -d'.' -f2`; docker run -it --name=my_pytorch_container --runtime=nvidia --ipc=host --privileged -v /home/${alias}/data:/home/${alias}/ pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel bash
下列解释由chatgpt生成:
-
alias=
whoami | cut -d'.' -f2``:whoami
用于获取当前登录用户的用户名。cut -d'.' -f2
用于从用户名中提取第二个字段,这通常是用户的别名或缩写。这个别名将被用作后续命令中的变量。
-
docker run -it --name=my_pytorch_container --runtime=nvidia --ipc=host --privileged -v /home/${alias}/data:/home/${alias}/ pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel bash
:docker run
: 启动一个 Docker 容器。-it
: 以交互模式运行容器,使用户能够与容器进行交互。--name=my_pytorch_container
: 为容器指定一个名字,这里是 "my_pytorch_container"。--runtime=nvidia
: 使用 NVIDIA Container Runtime,表明该容器将会使用 NVIDIA GPU。--ipc=host
: 共享主机的 IPC 命名空间,这是为了在容器内运行一些需要共享内存的应用程序。--privileged
: 赋予容器运行时更多的权限,通常在需要进行一些特殊操作时使用。-v /home/${alias}/data:/home/${alias}/
: 将主机上/home/${alias}/data
目录映射到容器内的/home/${alias}/
目录,实现主机和容器间的数据共享。pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel
: 使用的 PyTorch Docker 镜像,版本为 1.8.1,基于 CUDA 11.1 和 cuDNN 8,包含开发工具。bash
: 在容器内启动 Bash shell,允许用户与容器进行交互。
docker ps #查看正在运行的容器信息
docker ps -a #查看所有的容器信息
#包含names,没有size
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de0d768612d6 pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel "bash" 2 hours ago Up 11 minutes my_pytorch_container
ffe3fdd3a4d5 hello-world "/hello" 4 hours ago Exited (0) 4 hours ago ecstatic_fermi
docker images
#查看所有本地主机上的镜像,可以使用docker image ls代替
#不包含names,有size
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 8 months ago 13.3kB
pytorch/pytorch 1.8.1-cuda11.1-cudnn8-devel 7afd9b52a068 2 years ago 16.5GB
docker start my_pytorch_container #启动已有的容器
docker exec -it my_pytorch_container bash
-
docker exec
: 这是 Docker 命令的一部分,用于在正在运行的容器中执行命令。 -
-it
: 这是两个选项的组合,用于指定在交互模式下运行命令。-i
表示交互式,保持标准输入打开,而-t
表示在一个伪终端(pseudo-TTY)中运行,使得用户可以与容器的 shell 进行交互。 -
my_pytorch_container
: 这是容器的名称或容器的ID,用于指定在哪个容器中执行命令。 -
bash
: 这是在容器内执行的命令。在这个例子中,它启动了一个 Bash shell,允许你进入容器并与其进行交互。
或者直接
docker start -i my_pytorch_container
在这个命令中,-i
表示交互式。这样启动容器后,你将进入容器的主进程的交互式 shell。请注意,这假设容器内有一个可以用于交互的 shell。
注意:镜像和容器不一样(以下仍然是chatgpt的解释)
比如以下命令:
docker run -it ubuntu:latest /bin/bash
如果本地没有 ubuntu:latest
镜像,Docker 将自动从 Docker Hub 拉取最新的 ubuntu
镜像。这确保了您在运行容器时能够使用所需的镜像,而无需手动提前下载。
在拉取完成后,Docker 将使用远程拉取的镜像创建容器,并执行 /bin/bash
命令。如果希望在运行容器之前手动拉取镜像,可以使用 docker pull
命令:
docker pull ubuntu:latest
docker run -it ubuntu:latest /bin/bash