Docker 和 Nvidia-Docker 的安装

Posted by Tian on April 9, 2019

一、 Docker-CE

先决条件

操作系统要求

如需安装 Docker,您需要以下 Ubuntu 版本之一的 64 位版本:

  • Cosmic 18.10
  • Bionic 18.04 (LTS)
  • Xenial 16.04 (LTS)

Docker CE 支持 x86_64(或者 amd64)、armhf、arm64、s390x(IBM Z)和 ppc64le(IBM Power)架构。

卸载旧版本

Docker 的早期版本称为 dockerdocker.iodocker-engine。如果安装了这些版本,请卸载它们:

1
$ sudo apt-get remove docker docker-engine docker.io containerd runc

如果 apt-get 报告未安装任何这些软件包,这表示情况正常。

/var/lib/docker/ 的内容,包括镜像、容器、存储卷和网络将被保留。Docker CE 软件包现在称为 docker-ce

安装 Docker CE

您可以通过不同方式安装 Docker CE,具体取决于您的需求:

  • 大多数用户 设置 Docker 的镜像仓库 并从中进行安装,从而可以轻松完成安装和升级任务。这是推荐方法。
  • 一些用户下载 DEB 软件包并手动进行安装,然后完全由手动管理升级。在某些情况(例如,在不能访问互联网的隔离系统中安装 Docker)下,这很有用。

使用镜像仓库进行安装

首次在新的主机上安装 Docker CE 之前,您需要设置 Docker 镜像仓库。然后,您可以从此镜像仓库安装和更新 Docker。

设置镜像仓库

  1. 更新 apt 软件包索引:

    1
    
     $ sudo apt-get update
    
  2. 安装软件包,以允许 apt 通过 HTTPS 使用镜像仓库:

    1
    2
    3
    4
    5
    6
    
    $ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    
  3. 添加 Docker 的官方 GPG 密钥:

    1
    
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    验证密钥指纹是否为 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

    1
    2
    3
    4
    5
    6
    
    $ sudo apt-key fingerprint 0EBFCD88
           
    pub   rsa4096 2017-02-22 [SCEA]
          9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
    sub   rsa4096 2017-02-22 [S]
    
  4. 使用下列命令设置 stable 镜像仓库。您始终需要使用 stable 镜像仓库,即使您还需要通过 edgetesting 镜像仓库安装构建也是如此。如需添加 edgetesting 镜像仓库,请在以下命令中的词 stable 之后添加词 edge 和/或 testing

    :下面的 lsb_release -cs 子命令用于返回您的 Ubuntu 分发版,例如 xenial

    有时,在 Linux Mint 等分发版中,您可能必须将 $(lsb_release -cs) 更改为您的父代 Ubuntu 分发版。例 如:如果您使用的是 Linux Mint Rafaela,您可以使用 trusty

    amd64

    1
    2
    3
    4
    
    $ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    

安装 DOCKER CE

  1. 更新 apt 软件包索引。

    1
    
     $ sudo apt-get update
    
  2. 安装最新版本的 Docker CE,或者转至下一步以安装特定版本。将替换任何现有的 Docker 安装版本。

    1
    
     $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    警告: 如果您启用了多个 Docker 镜像仓库,而且在安装或者更新时不在 apt-get installapt-get update 命令中指定版本,那么将始终安装可用的最高版本, 这可能无法满足您的稳定性需求。

  3. 在生产系统中,您应该安装特定版本的 Docker CE,而不是始终使用最新版本。

    a. 列出所有可用版本:

    1
    2
    3
    4
    5
    6
    7
    
    $ apt-cache madison docker-ce
       
      docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 18.06.1~ce~3-0~ubuntu       | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 18.06.0~ce~3-0~ubuntu       | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      ...
    

    b. 用第二列的版本号指定安装的版本,例如 5:18.09.1~3-0~ubuntu-xenial.

    1
    
    $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
    
  4. 运行 hello-world 镜像,验证是否正确安装了 Docker CE。

    1
    
     $ sudo docker run hello-world
    

    此命令将下载一个测试镜像并在容器中运行它。容器运行时,它将输出一条参考消息并退出。

Docker CE 已安装并且正在运行。您需要使用 sudo 运行 Docker 命令。继续执行 Linux 安装后步骤 以允许非特权用户运行 Docker 命令,以及了解其他可选配置步骤。

升级 DOCKER CE

如需升级 Docker CE,首先运行 sudo apt-get update,然后按照 安装说明 执行操作,并选择您要安装的新版本。

从软件包进行安装

如果您无法使用 Docker 镜像仓库安装 Docker CE,可以下载适用于您的版本的 .deb 文件,并手动进行安装。每次要升级 Docker CE 时,您都需要下载一个新文件。

  1. 转至 https://download.docker.com/linux/ubuntu/dists/ ,选择您的 Ubuntu 版本(lsb_release -a查看),浏览至 pool/stable/,然后选择 amd64, armhf, arm64, ppc64el 或者 s390x。下载适用于您想要安装的.deb文件。

    :如需安装nightly软件包,请将 URL 中的词 stable 更改为 nightly

  2. 安装 Docker CE,将下面的路径更改为您下载 Docker 软件包的路径。

    1
    
     $ sudo dpkg -i /path/to/package.deb
    

    Docker 守护进程将自动启动。

  3. 运行 hello-world 镜像,验证是否正确安装了 Docker CE。

    1
    
     $ sudo docker run hello-world
    

    此命令将下载一个测试镜像并在容器中运行它。容器运行时,它将输出一条参考消息并退出。

  4. 命令行方式下载:

    1
    2
    3
    4
    5
    6
    
    download_url='https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64'
    docker_version='18.06.0~ce~3-0'
    wget --no-check-certificate ${download_url}/docker-ce_${docker_version}~ubuntu_amd64.deb
       
    sudo dpkg -i docker-ce*.deb
    sudo apt-get -f install # 一般只有一个libtfl7的依赖
    

Docker CE 已安装并且正在运行。您需要使用 sudo 运行 Docker 命令。继续执行 Linux 的安装后步骤 以允许非特权用户运行 Docker 命令,以及了解其他可选配置步骤。

  1. 升级 DOCKER CE

如需升级 Docker CE,请下载较新的软件包文件并重复上述 安装过程,指向新文件。

卸载 Docker CE

  1. 卸载 Docker CE 软件包:

    1
    
     $ sudo apt-get purge docker-ce
    
  2. 主机上的镜像、容器、存储卷、或定制配置文件不会自动删除。如需删除所有镜像、容器和存储卷,请运行下列命令:

    1
    
     $ sudo rm -rf /var/lib/docker
    

您必须手动删除任何已编辑的配置文件。

以非 root 用户身份管理

docker 守护进程绑定至 Unix 套接字,而不是 TCP 端口。默认情况下,该 Unix 套接字由用户 root 所有,而其他用户只能使用 sudo 访问它。docker 守护进程始终以 root 用户身份运行。

在使用 docker 命令时,如果您不想使用 sudo,请创建名为 docker 的 Unix 组并向其中添加用户。docker 守护进程启动时,它将使 Unix 套接字的所有权可由 docker 组进行读取/写入。

警告docker 组将授予等同于 root 用户的特权。如需有关此操作如何影响系统安全性的详细信息,请参阅 Docker 守护进程攻击面

如需创建 docker 组并添加您的用户,请执行下列操作:

  1. 创建 docker 组。

    1
    
     $ sudo groupadd docker
    
  2. docker 组中添加您的用户。

    1
    
     $ sudo usermod -aG docker $USER
    
  3. 注销并重新登录,以便对您的组成员资格进行更新。

    如果在虚拟机上进行测试,可能必须重启此虚拟机才能使更改生效。

    在桌面 Linux 环境(例如,X Windows)中,彻底从您的会话中注销,然后重新登录。

  4. 验证您是否可以在不使用 sudo 的情况下运行 docker 命令。

    1
    
     $ docker run hello-world
    

    此命令将下载一个测试镜像并在容器中运行它。容器运行时,它将输出一条参考消息并退出。

    如果你之前已经用 sudo 执行过Docker CLI命令,你可能看到如下错误,这个错误表明 ~/.docker/ 文件夹已经被用错误的权限创建。

    1
    2
    
    WARNING: Error loading config file: /home/user/.docker/config.json -
    stat /home/user/.docker/config.json: permission denied
    

    要解决这个问题,要么删除 ~/.docker 文件夹(这个文件夹会自动生成,但是之前的配置会丢失),或者用下列命令修改权限:

    1
    2
    
    $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
    $ sudo chmod g+rwx "$HOME/.docker" -R
    

将 Docker 配置为开机自启动

大多数最新的 Linux 分发版(RHEL、CentOS、Fedora、Ubuntu 16.04 及更高版本)都使用 systemd 来管理在系统启动时启动的服务。 Ubuntu 14.10 及更低版本使用 upstart

systemd

1
$ sudo systemctl enable docker

如需禁用此性能,请改为使用 disable

1
$ sudo systemctl disable docker

如果您需要添加 HTTP 代理,请为 Docker 运行时文件设置另一个目录或分区,请参阅 定制您的 systemd Docker 守护进程选项

upstart

Docker 用 upstart 自动配置为在启动时启动的。如需禁用此行为,请使用以下命令:

1
$ echo manual | sudo tee /etc/init/docker.override

chkconfig

1
$ sudo chkconfig docker on

参考

二、Nvidia-Docker

先决条件

运行安装 nvidia-docker 2.0 需要以下先决条件:

  1. GNU/Linux x86_64 with kernel version > 3.10
  2. Docker >= 1.12
  3. NVIDIA GPU with Architecture > Fermi (2.1)
  4. NVIDIA drivers ~= 361.93 (untested on older versions)

你的 GPU 驱动可能限制你能运行的 CUDA 镜像 (见 CUDA requirements)

Docker CE 支持x86_64(或者amd64),armhfarm64s390x (IBM Z), 和 ppc64le (IBM Power) 架构。

卸载 nvidia-docker 1.0

在继续下一步之前,必须完全卸载 nvidia-docker 1.0 版本。而且必须 stopremove 所有的 nvidia-docker 1.0 启动的容器。

Ubuntu distributions

1
2
docker volpeizhiume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker

安装 nvidia-docker 2.0

确保你已经安装了 NVIDIA驱动docker 支持的 版本(见上面的先决条件)

如果你有修改 /etc/docker/daemon.jsonnvidia-docker2 可能会覆盖它

Ubuntu distributions

  1. 按照 文档 安装配置Repository:
1
2
3
4
5
6
7
8
9
10
11
# In order to setup the nvidia-docker repository for your distribution, follow the instructions below.
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
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
sudo apt-get update

# In order to update the nvidia-docker repository key for your distribution, follow the instructions below.
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
  1. 安装 nvidia-docker2 并且更新 Docker daemon 配置:
1
2
sudo apt-get install nvidia-docker2
sudo pkill -SIGHUP dockerd

使用老版本的 docker

apt-cache madison nvidia-docker2 nvidia-container-runtime 或者 yum search --showduplicates nvidia-docker2 nvidia-container-runtime 列出可用的版本,然后在安装时指定版本,例如:

1
sudo apt-get install -y nvidia-docker2=2.0.1+docker1.12.6-1 nvidia-container-runtime=1.1.0+docker1.12.6-1

验证

使用时必须选择 nvidia 作为runtime:

1
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

参考