サーバーにdockerをインストールして開発環境を構築するまで


`su` でrootユーザーになる。

[dockerホームページ](https://docs.docker.com/install/linux/docker-ce/centos/)を参考しながら進めて行く。
サーバーのOSはCentOSの7.3である。

```bash
[In] rpm -q centos-release
-> [Out] centos-release-7-3.1611.el7.centos.x86_64
```

以下のコマンドを打った。

```bash
yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine
```

```bash
yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
```

```bash
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
```

```bash
yum install docker-ce docker-ce-cli containerd.io
```

このままではrootユーザーしかdockerを使えないので、

```bash
sudo usermod -aG docker $USER
```

とすることで、自分も使えるようになる。その後一度外に出て戻ると
```bash
docker run hello-world
```

が使えるようになっている。

```bash
docker version

Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.13
 Git commit:        6a30dfc
 Built:             Sun Sep 15 20:09:01 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)

````

```bash
docker info

Client:
 Debug Mode: false

Server:
 Containers: 14
  Running: 0
  Paused: 0
  Stopped: 14
 Images: 4
 Server Version: 19.03.5
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local

```


## nvidia-docker
次に、nvidia-dockerを入れた。

```bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

yum install -y nvidia-container-toolkit
systemctl restart docker
```

→docker 19.03以降では、nvidia-dockerは内装されているのでインストールする必要がなかった。
>Note that with the release of Docker 19.03, usage of nvidia-docker2 packages are deprecated since NVIDIA GPUs are now natively supported as devices in the Docker runtime.](https://github.com/NVIDIA/nvidia-docker)

## dockerの動作確認
[docker hub](https://hub.docker.com/r/nvidia/cuda/tags) から適切なイメージを取ってくる。
今回は、サーバーのdriverのバージョンが381だったため、CUDAは8.0までしか入らない。<img width="559" alt="スクリーンショット 2020-01-31 19.50.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295781/443df1d4-1cfd-c8c6-63eb-c4bb492fe592.png">
そこで、nvidia/cuda:8.0を取ってきたが、

`docker run nvidia/cuda:8.0 pwd` と打つと、

```
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"pwd\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled 
```
というエラーが出て悲しい感じになった。色々調べたが、結局は、

`docker run nvidia/cuda:8.0-runtime-ubuntu16.04 pwd`とすれば解決した。すなわち、cudaだけのイメージではOSが入っていないので何も出来ないのである。どういう人が使うのかはわからないが、とりあえずubuntu16.04を積んでおけば問題ないことが判明した。

また、普通に色々やりたい時は、
`docker run -it nvidia/cuda:8.0-cudnn7-runtime-ubuntu16.04 /bin/bash`
と打てば良い。`-it`オプションが大事。

GPUを使いたい時は、
`docker run -it --gpus all nvidia/cuda:8.0-cudnn7-runtime-ubuntu16.04 /bin/bash`
とする。dockerのバージョンが19.03より後か前かで大きく異なるので注意。今回は19.03だったので`--gpu`オプションでOK。
詳しくはこの[記事](https://medium.com/nttlabs/docker-1903-5155754ff8ac)を参照。

## docker-composeのinstall

```bash
curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```

以上。

[2020/01/31現在、docker-composeのバージョンが追いついていない](https://github.com/docker/compose/issues/6691)ため、gpuを使うなら、nvidia-container-runtimeをわざわざ入れる必要がある。馬鹿らしいので、今回はdocker run コマンドを長々と書くことにした。




```python:
import torch
torch.cuda.current_device()

-> AssertionError: 
The NVIDIA driver on your system is too old (found version 8000).
Please update your GPU driver by downloading and installing a new
version from the URL: http://www.nvidia.com/Download/index.aspx
Alternatively, go to: https://pytorch.org to install
a PyTorch version that has been compiled with your version
of the CUDA driver.
```

終

サーバーのdriverを変えない限り使えない。

https://qiita.com/nabenabe0928/items/7962dcf3030889667de4