Ubuntu上でのDocker環境構築

# Ubuntu16.04LTS上でのDocker環境構築(CPU/GPU)
社内の開発環境としてDocker環境を構築した。備忘録としてメモする。

## 背景
サーバ向けアプリの機能開発のため、以前から聞いたことのあったDockerを使用した開発を試みた。
備忘録としてメモに残しておく。

## GPUなしの環境での環境構築
### 環境
　Ubuntu16.04 LTS

### セットアップ手順
* Dockerをインストールする。
 
```shell
# sudo apt update
# sudo apt install docker
```
* Dockerの起動、自動起動設定

```shell
# sudo systemctrl start docker
# sudo systemctrl enable docker
```
* Dockerのプロキシ設定をする ※Proxy環境のみ設定

```shell
# mkdir /etc/systemd/system/docker.service.d/
# vim /etc/systemd/system/docker.service.d/http-proxy.conf
```
```conf:http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://(proxy_ip):(proxy_port)/"
```
※`proxy_ip`と`proxy_port`は使用環境のものを設定

* DNSサーバの設定をする

```shell
# sudo vim /etc/docker/daemon.json
```
```json:daemon.json
{
    "dns" : ["dns_ip"],
    "dns-opts" : ["timeout:1"]
}
```
※`dns_ip`には使用環境のDNSサーバIPを入れる

* Dockerの再起動

```shell
# sudo systemctrl daemon-reload
# sudo systemctrl restart docker
```

* 一般ユーザでもDockerが起動できるようにする

```shell
# sudo usermod -G docker user_name
```
※`user_name`には使用するユーザ名を入れる

* Dockerの起動テスト確認　※上記一般ユーザで実施

```shell
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest:sha256:0add3ace90ecb4adbf777・・・・
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
(省略)
```
おわり

## GPUありの環境での環境構築(nvidia-docker)
### 環境
　Ubuntu16.04 LTS
　Nvidia Geforce 1080ti

### セットアップ手順
* nvidia driverのｲﾝｽﾄｰﾙ

```shell
# sudo add-apt-repository ppa:graphics-drivers/ppa
# sudo apt update && sudo apt install -y nvidia-384
# sudo reboot
```

* cuda9.0のｲﾝｽﾄｰﾙ

```shell
# wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64-deb
# sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64-deb
# sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
# sudo apt upgrade
# sudo apt update && sudo apt install -y cuda-9-0
# sudo reboot
```

※`nvcc`コマンドが聞かない場合には、`~/.bashrc`に以下を追記する

```conf:.barhrc
## CUDA paths
export PATH=/usr/local/cuda-9.0/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:${LD_LIBRARY_PATH}
```
* Dockerをインストールする。
 
```shell
# sudo apt update
# sudo apt install docker
```
* Dockerの起動、自動起動設定

```shell
# sudo systemctrl start docker
# sudo systemctrl enable docker
```
* Dockerのプロキシ設定をする ※Proxy環境のみ設定

```shell
# mkdir /etc/systemd/system/docker.service.d/
# vim /etc/systemd/system/docker.service.d/http-proxy.conf
```
```conf:http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://(proxy_ip):(proxy_port)/"
```
※`proxy_ip`と`proxy_port`は使用環境のものを設定

* DNSサーバの設定をする

```shell
# sudo vim /etc/docker/daemon.json
```
```json:daemon.json
{
    "dns" : ["dns_ip"],
    "dns-opts" : ["timeout:1"]
}
```
※`dns_ip`には使用環境のDNSサーバIPを入れる

* Dockerの再起動

```shell
# sudo systemctrl daemon-reload
# sudo systemctrl restart docker
```

* 一般ユーザでもDockerが起動できるようにする

```shell
# sudo usermod -G docker user_name
```
※`user_name`には使用するユーザ名を入れる

* nvidia-dockerに必要なライブラリをインストール

```shell
# sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
```

* nvidia-packageのダウンロード&インストール

```shell
# wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
# sudo dpkg -i nvidia-docker_1.0.1-1_amd64.deb
```

* nvidia-dockerの起動テスト確認　※上記一般ユーザで実施

```shell
$ nvidia-docker run -it --rm nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

(docker containerログイン後)

# nvidia-smi
```


おわり