最近装了N多套docker环境,把安装步骤整理出来,以后直接拿来用。
docker创建容器的流程,正常情况下是这样的:
docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process
但如果要使用NVIDIA GPU,则需要用到nvidia-docker,那么创建容器的流程则变成下面这样:
docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process
关于nvidia-docker,这里只点一下,更多的介绍,留给后面的博客吧,本篇只讲安装。
1. 安装docker
1.1 apt-get在线安装
(1) 如果之前安装过docker,先卸载掉:
sudo apt-get remove docker docker-engine docker-ce docker.io containerd runc
(2) 安装各依赖项:
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
(3) 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
验证密钥:
sudo apt-key fingerprint 0EBFCD88
(4) 设置稳定版仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
(5) 安装docker-ce:
sudo apt-get update
sudo apt-get install docker-ce
(6) 启动docker:
sudo systemctl start docker
若需要docker服务开机自启动,可执行:
sudo systemctl enable docker
1.2 文件安装
也可以采用deb文件安装,下载地址:https://download.docker.com/linux/ubuntu/dists/
安装命令:
sudo dpkg -i docker-ce_18.06.2_ce_3-0_ubuntu_amd64.deb
2. 安装nvidia-docker2
安装完docker-ce之后,即可安装nvidia-docker2。有一个前提,NVIDIA显卡驱动必须提前装好(显卡安装比较简单,本篇不涉及)。
(1) 添加GPG key:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
(2) 添加源,依次执行以下语句:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
(3) 安装nvidia-docker2:
sudo apt-get update
sudo apt-get install -y nvidia-docker2
(4) 重启docker:
sudo pkill -SIGHUP dockerd
3. Docker的使用
OK,以上步骤进行完,即可启动一个要使用NVIDIA GPU的容器了,当然,普通容器也照常使用。
举个栗子:
sudo docker run -itd \
--restart=always \
--privileged=true \
--network host \
--runtime=nvidia \
--name=my_server \
--device /dev:/dev \
-e DISPLAY=unix$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME:$HOME \
algorithm-server-cuda11-gui:v0.3 \
sh -c "cd /home/delia/my_server && ./my_server >log.log 2>&1"