閃 き

閃き- blog

きらびやかに、美しく、痛烈に.

Ubuntu 16.04.6 LTS (GNU/Linux, x86_64) のGPUマシンの設定・TF1.13.1 / CUDA10.0 / cuDNN7.4.2

f:id:yumaloop:20191105181908p:plain



- 最終更新:2019/11/07

クリーンブートしたUbuntu16.04LTS マシンに,NVIDIA GPUを導入し,CuDA・cuDNNをセットアップしました. おもにtensorflow-gpuを使うためです.導入過程で色々とつまづいたので,得た知識をこのポストにまとめておきます.

実行環境

最終的に完成したマシンの動作環境は下記の通りです. latest update : 2019/05/15

  • OS : Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-145-generic x86_64)
  • Memory : 16 GB
  • CPU(x8) : Intel Core i7-6700 CPU @ 3.40GHz
  • GPU(x1) : NVIDIA Geforce GTX 1080
    • NVIDIA CUDA : 10.0.130 (/usr/local/cuda-10.0/)
    • NVIDIA cuDNN : 7.4.2.24 (/usr/lib/x86_64-linux-gnu/libcudnn.so.7.4.2)
    • Python3 : 3.6.9 (/usr/bin/python3.6)
    • Python2 : 2.7.12 (/usr/bin/python)
      • tensorflow : 1.13.1 ($HOME/.local/lib/python3.6/site-packages)
      • tensorflow-gpu : 1.13.1 ($HOME/.local/lib/python3.6/site-packages)
      • keras : 2.2.4 ($HOME/.local/lib/python3.6/site-packages)

1. OS

  • 方法1: unameコマンドを使う

unameコマンドを使うと,「OS名,ホスト名,OSリリース,OSバージョン,マシンアーキテクチャ,CPUタイプ,プラットフォーム,OS名」が順に表示される.

$ uname -a

Linux XXXX 4.4.0-145-generic #171-Ubuntu SMP Tue Mar 26 12:43:40 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

  • 方法2: /etc/issueをみる

マシンの「Linuxディストリビューション」が表示される.今回はUbuntu16.04.

$ cat /etc/issue

Ubuntu 16.04.6 LTS \n \l

  • 方法3: /etc/lsb-releaseをみる
$ cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

  • 方法4: /etc/os-releaseをみる
$ cat /etc/os-release

NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.6 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial

  • 方法5: /proc/versionをみる

/proc/versionをみると,Linuxカーネルの詳細が確認できる.

$ cat /proc/version

Linux version 4.4.0-159-generic (buildd@lgw01-amd64-042) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #187-Ubuntu SMP Thu Aug 1 16:28:06 UTC 2019

2. HDD

2.1. HDDデバイスの確認

  • dfコマンド
$ df -h

Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 34M 1.6G 3% /run /dev/sda1 214G 101G 103G 50% / tmpfs 7.9G 0 7.9G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup tmpfs 1.6G 64K 1.6G 1% /run/user/1001 /dev/loop0 89M 89M 0 100% /snap/core/7270 /dev/loop1 384K 384K 0 100% /snap/patchelf/61 /dev/loop2 384K 384K 0 100% /snap/patchelf/69

3. メモリ

3.1. メモリデバイスの確認

  • /proc/meminfoをみる

/proc/meminfoをみると,メモリ容量の詳細を確認できる.

$ cat /proc/meminfo

MemTotal: 16377200 kB
MemFree: 3077848 kB
MemAvailable: 15767804 kB
Buffers: 363052 kB
Cached: 12274992 kB
SwapCached: 66936 kB
Active: 8048088 kB
Inactive: 4689560 kB
Active(anon): 25860 kB
Inactive(anon): 86584 kB
...
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 1907316 kB
DirectMap2M: 14815232 kB
DirectMap1G: 0 kB

3.2. 仮想メモリの状態確認

  • 方法1: freeコマンド

freeを使う.

$ free

total used free shared buff/cache available
Mem: 16377148 300020 6661176 9876 9415952 15688968 Swap: 16720892 0 16720892

  • 方法2: vmstatコマンド

vmstatを使う.

$ vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 90724 1771068 363852 9020168 322 295 335 492 1 1 2 0 97 1 0

  • 方法3: topコマンド

topを使う.

$ top

top - 20:17:14 up 56 days, 1:17, 5 users, load average: 2.02, 1.99, 1.66
Tasks: 180 total, 3 running, 177 sleeping, 0 stopped, 0 zombie %Cpu(s): 25.0 us, 0.0 sy, 0.0 ni, 75.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 16377200 total, 1078612 free, 5914516 used, 9384072 buff/cache KiB Swap: 16720892 total, 16630168 free, 90724 used. 10049856 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14461 xxxxxxx 20 0 54.634g 1.768g 12740 R 100.0 11.3 18:30.96 python3
14499 xxxxxxx 20 0 54.634g 1.752g 12448 R 100.0 11.2 17:54.35 python3
1 root 20 0 119680 4616 3084 S 0.0 0.0 0:31.51 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.20 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.32 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 S 0.0 0.0 18:07.52 rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root rt 0 0 0 0 S 0.0 0.0 0:00.25 migration/0
...

4. CPU

4.1. CPUデバイスの確認

  • 方法1: /proc/cpuinfoをみる
# CPUデバイスの確認
$ cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
stepping : 3
microcode : 0xc6
cpu MHz : 800.062
cache size : 8192 KB
physical id : 0
siblings : 8
...
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
...

5. GPU

5.1. GPUバイスの確認

  • lshwコマンド
# GPUデバイスの確認
$ sudo lshw -C display 

*-display
詳細: VGA compatible controller
製品: GP104 [GeForce GTX 1080]
ベンダー: NVIDIA Corporation
物理ID: 0
バス情報: pci@0000:01:00.0
バージョン: a1
幅: 64 bits
クロック: 33MHz
性能: pm msi pciexpress vga_controller bus_master cap_list rom
設定: driver=nvidia latency=0
リソース: irq:16 メモリー:de000000-deffffff メモリー:c0000000-cfffffff メモリー:d0000000-d1ffffff IOポート:e000(サイズ=128) メモリー:df000000-df07ffff

  • lspciコマンド

lspciでハードウェアデバイス一覧が確認できる.

# GPUデバイスの確認
$ lspci  | grep -i nvidia 

01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)

5.2. NVIDIA ドライバ

下記のリンクから,自分のGPUにあうドライバを検索して,ダウンロードする.

f:id:yumaloop:20191106131727p:plain

今回,NVIDIA GeForce 1080に対応したドライバ情報は以下のようになった.

f:id:yumaloop:20191106131109p:plain

新しくGPUドライバ(NVIDIAドライバ)をインストールする前に,すでにインストールされているGPUドライバを確認する.

# マシンにインストール済みのNVIDIAドライバを一覧表示
$ dpkg -l | grep nvidia

# apt-getでインストールできるNVIDIAドライバの一覧表示
$ apt-cache search "^nvidia-[0-9]{3}$"
# NVIDIA ドライバを提供している xorg-edgers レポジトリを追加する
$ sudo add-apt-repository ppa:xorg-edgers/ppa -y
$ sudo apt-get update
# ドライバ nvidia-396 をインストール
$ sudo apt-get install -y nvidia-396
$ reboot

5.3. CUDA 10.0をマシンにインストール

f:id:yumaloop:20191106123629p:plain

まず,CUDA・cuDNN・TensorFlow-GPUのバージョンを合わせる必要があります. 以下のリンクから,Tensorflow-gpuに対応するcuDNNとCUDAのバージョンを確認できます.

f:id:yumaloop:20191106125506p:plain

今回は,

  • Python 3.6.9
  • tensorflow-gpu 1.13.1
  • CUDA 10.0
  • cuDNN 7.4

で環境構築しようと思います.

以下のURLから,自分の環境にあったCUDA Toolkitパッケージをダウンロードし,マシンへインストールします.

注意:https://developer.nvidia.com/cuda-downloads は,最新バージョンのダウンロードリンクなので,ここから安易にダウンロードしてはいけない.特に,tensorflow-gpuは,最新のCUDA Toolkitに対応していないので注意する.CUDAとTensorflow-gpuのバージョンがあっていないと,たとえばImportError: libcublas.so.10.0が発生する. github.com

f:id:yumaloop:20191107152200p:plain

今回は,CUDA10.0で,マシンの環境として,

  • Operating System: Linux
  • Architecture: x86_64
  • Distribution: Ubuntu
  • Version: 16.04
  • Installer Type: deb [network]

を選択しました.

f:id:yumaloop:20191107160732p:plain

対応するCUDA Toolkit(CUDA 10.0)の.debファイル(network)は「cuda-repo-ubuntu1604_10.0.130-1_amd64.deb」です. この.debファイルをwgetコマンドを使って,マシンへダウンロードし,

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb

dpkgコマンドでパッケージとして保存します.さらに,aptコマンドでcudaパッケージをインストールします. 注意:公式に書かれているsudo apt-get install cudaを実行すると自動的に最新版のCUDAがインストールされる.

# CUDA Toolkit(CUDA 10.0)をマシンにインストールする
$ sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-10-0

これでCUDA Toolkit(10.0)のインストールは完了です. あとは,環境変数を設定しましょう.

  • CUDAの確認

CUDA Toolkit(CUDA 10.0)が正常にインストールされているか確認します.

# CUDAがインストールされているか確認
$ ls -l /usr/local/ | grep cuda

lrwxrwxrwx 1 root root 9 11月 7 16:51 cuda -> cuda-10.0
drwxr-xr-x 16 root root 4096 11月 7 16:51 cuda-10.0

/usr/local/以下にcuda-10.0というディレクトリがあり,かつリンク cuda -> cuda-10.0が貼られています.

  • CUDA Toolkit(cuda-10.0)のパス - /usr/local/cuda-10.0/bin
  • NVIDIAドライバ(nvidia-418)のパス - /usr/lib/nvidia-418

次にnvccコマンドのPATHを通すために,~/.bashrcに以下を追加して,source ~/.bashrcで更新します.

# 環境変数$PATHにCUDA Toolkitのパスを追加
export PATH=/usr/local/cuda-10.0/bin:${PATH}

# 環境変数$LD_LIBRARY_PATHにCUDA Toolkitのパスを追加
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH}

# 環境変数$LD_LIBRARY_PATHにNVIDIAドライバのパスを追加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia-418

  • CUDAの詳細情報

CUDA Toolkitの詳細情報は,nvccコマンドで取得できます.

# CUDAの確認
$ nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

nvccコマンドは,CUDA Toolkitに対応して「/usr/local/cuda-10.1/bin/nvcc」にあればOK

$ which nvcc

/usr/local/cuda-10.0/bin/nvcc

  • CUDAのバージョン確認

CUDAのバージョンを確認したい場合,/usr/local/cuda/version.txtをみればよい.

# CUDAのバージョン確認
$ cat /usr/local/cuda/version.txt

CUDA Version 10.0.130

5.4. cuDNN 7.4.2をマシンにインストール

cuDNNのインストールには,NVIDIA accountを登録(無料)してログインする必要があります. (注:https://developer.nvidia.com/rdp/cudnn-download は,最新バージョンのダウンロードリンクなので,ここから安易にダウンロードしてはいけない.

f:id:yumaloop:20191107171227p:plain

今回はCUDA10.0を使うので,「Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0」を選択します.

f:id:yumaloop:20191107171352p:plain

インストールするマシンのOS(Ubuntu16.04)に合わせて,3つの.debファイルをダウンロードします.

  • cuDNN Code Samples and User Guide for Ubuntu16.04 (Deb) - libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
  • cuDNN Runtime Library for Ubuntu16.04 (Deb) - libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
  • cuDNN Developer Library for Ubuntu16.04 (Deb) - libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb

パッケージをダウンロードしたディレクトリで,パッケージをインストールします.

# cuDNN7.4.2 (for CUDA10.0)をインストール
$ sudo dpkg -i libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb

注意:3つの.devファイルには依存関係があるので,「libcudnn7 > libcudnn7-dev > libcudnn7-doc」の順番でインストールする.

github.com

5.5. cuDNNの動作確認

CUDA Toolkit(CUDA10.0)に付属しているサンプルコードを実行して,cuDNNの動作確認をします.

$ cd /usr/local/cuda-10.0/bin
# ホームディレクトリにサンプルコードのあるディレクトリをコピー
$ cuda-install-samples-10.0.sh ~
Copying samples to /home/uchiumi/NVIDIA_CUDA-10.0_Samples now...
Finished copying samples.
$ cd ~/NVIDIA_CUDA-10.0_Samples
$ make
$ cd 2_Graphics/volumeRender
$ ./volumeRender # exeファイルを実行する
$ cd
$ rm -rfv ~/NVIDIA_CUDA-10.0_Samples/ # サンプルコードを消す。

5.6. cuDNNの確認

dpkg -lコマンドでインストール済みのパッケージを一覧表示する.

# マシンにインストール済みのcuDNNパッケージを一覧表示
$ dpkg -l | grep cudnn

ii libcudnn7 7.4.2.24-1+cuda10.0 amd64 cuDNN runtime libraries
ii libcudnn7-dev 7.4.2.24-1+cuda10.0 amd64 cuDNN development libraries and headers
ii libcudnn7-doc 7.4.2.24-1+cuda10.0 amd64 cuDNN documents and samples

5.7. cuDNNの保存場所

# debパッケージが保存されているディレクトリを確認(-Lオプション)
$ dpkg -L libcudnn7

/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libcudnn.so.7.4.2
/usr/share
/usr/share/doc
/usr/share/doc/libcudnn7
/usr/share/doc/libcudnn7/changelog.Debian.gz
/usr/share/doc/libcudnn7/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libcudnn7
/usr/lib/x86_64-linux-gnu/libcudnn.so.7

5.9. CUDA(/usr/local/cuda-***/bin)のPATHチェック

# 出力に"/usr/local/cuda-10.0/bin"が含まれているか?
$ echo $PATH

5.10. CUDAとNVIDIAドライバ(/usr/lib/nvidia-***)のPATHチェック

# 出力に"/usr/local/cuda-10.0/lib64"と"/usr/lib/nvidia-418"が含まれているか?
$ echo $LD_LIBRARY_PATH  

5.11. CUDAとnvccコマンドのPATHチェック

# 出力が"/usr/local/cuda-10.0/bin/nvcc"になっているか?
$ which nvcc             
/usr/local/cuda-10.0/bin/nvcc

5.12. nvidia-smiコマンドのPATHチェック

# 出力が"/usr/bin/nvidia-smi"になっているか?
 $ which nvidia-smi
/usr/bin/nvidia-smi

# GPUの状態が表示されているか?
$ nvidia-smi             
Thu May 16 13:26:12 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.14       Driver Version: 430.14       CUDA Version: N/A      |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1080    Off  | 00000000:01:00.0 Off |                  N/A |
| 32%   42C    P5    27W / 200W |      0MiB /  8118MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

6. Tensorflow-GPU

6.1. tensorflow インストール (1.10.0以上だとCUDAに対応していないかも)

以下のリンクから,Tensorflow-gpuに対応するcuDNNとCUDAのバージョンを確認する. - https://www.tensorflow.org/install/source#linux

f:id:yumaloop:20191106125506p:plain

なお,Version 1.16.4より最新のNumpyを使っている場合,import tensorflowとしたときに不具合が発生します. pip3 numpy install==1.16.4とすればOK.(下記参照) github.com

Ubuntuの場合,

  • sudo pip3でインストールしたもの
    /usr/local/lib/python3.?/site-packages/へ保存
  • pip3でインストールしたもの
    /home/<username>/.local/lib/python3.?/site-packages/へ保存
# tensorflow インストール
$ pip3 uninstall tensorflow-gpu
$ pip3 install tensorflow-gpu==1.13.1
$ pip3 show tensorflow-gpu # version check

pyteyon.hatenablog.com

$ python3
Python 3.6.9 (default, Jul  3 2019, 15:36:16) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()
...

[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 12399580590058509262
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 8346102148670114463
physical_device_desc: "device: XLA_GPU device"
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: 17179869184
locality {
}
incarnation: 16269880268349154236
physical_device_desc: "device: XLA_CPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 7938857370
locality {
bus_id: 1
links {
}
}
incarnation: 9065886904258284582
physical_device_desc: "device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0, compute capability: 6.1"
]

7.ディスプレイ

7.1 ディスプレイマネージャ(DM)を確認

$ cat /etc/X11/default-display-manager
/usr/sbin/lightdm

ja.clccomputers.com

7.2 GUI/CUIの切り替え

systemctlコマンドを使って,GUI/CUIの切り替えを行う.

#GUIログインが有効かどうか確認
$ sudo systemctl get-default
graphical.target #GUIログインが有効
# CUIログインに変更
$ sudo systemctl set-default multi-user.target 

# GUIログインに変更
$ sudo systemctl set-default graphical.target

bellsmarket.hatenablog.com

8.ディスクとファイルシステム

8.1. 現在のディレクトリ直下のファイル数を確認

lsコマンドの出力結果の行数をwcコマンドで数える.

# ファイル数を確認
$ ls -1 | wc -l

8.2. 現在のディレクトリ直下のファイルサイズを確認

ncduコマンドを使って,ファイルサイズを確認.

# ncduコマンドをインストール
$ sudo apt-get install ncdu -y (Debian/Ubuntu)
$ sudo yum install ncdu -y (RHEL系)

# ルート直下でncduコマンドを起動
$ cd /
$ ncdu

orebibou.com

duコマンドを使って,ファイルサイズを確認.duは,ディスク使用量をディレクトリごとに集計して表示するLinuxコマンド.

# カレントディレクトリ直下のファイルおよびディレクトリのディスク使用量とその合計を表示する
$ du -s -c *
84698948    Kaggle
1292748 NVIDIA_CUDA-10.1_Samples
705000  Research
107836  dataset
12  envinfo.txt
12  examples.desktop
9484    gym
7830428 workspace
1412    yt8m
686388  ダウンロード
4   テンプレート
4   デスクトップ
4   ドキュメント
4   ビデオ
4   ピクチャ
4   ミュージック
4   公開
95332296    合計

8.3. ディスクの空き領域を確認

dfコマンドを使って,ディスクの空き領域を確認./dev/sda1が物理的な(ハードウェアレベルでの)データ容量.

# dfでディスクの空き領域を表示
# -hオプション: 読みやすいサイズ表記で表示する
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G  9.2M  1.6G   1% /run
/dev/sda1       214G  111G   92G  55% /
tmpfs           7.9G  184K  7.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/loop0      384K  384K     0 100% /snap/patchelf/79
/dev/loop3       90M   90M     0 100% /snap/core/7713
/dev/loop2       89M   89M     0 100% /snap/core/7396
tmpfs           1.6G   36K  1.6G   1% /run/user/108
tmpfs           1.6G     0  1.6G   0% /run/user/1001
/dev/loop4      384K  384K     0 100% /snap/patchelf/87

9. Docker

9.1. Dockerをインストール

hirosanote.hatenablog.jp

9.2. Dockerチュートリアル

docs.docker.com


参考文献