Dockerのコマンド・設定・エラー対処

# コマンド
## イメージ生成（build）

```
docker build -t [タグ名] [Dockerfileのパス]
```

## コンテナの起動（run）

### コンテナ名を指定して起動

```
docker run --name [任意のコンテナ名] -it [利用したいイメージ] /bin/bash
```
参考サイト：https://qiita.com/shimo_yama/items/d0c42394689132fcb4b6

### 各種オプション
#### フォルダをマウント
```
-v [ホストマシンの任意のディレクトリ]:[Dockerコンテナ内の任意のディレクトリ] -it [利用したいイメージ]
```

#### NVIDIA GPUを使用する（v19.03以降）

##### すべてのGPUを使用

```
--gpus all
```

##### 指定したGPUを使用

```
--gpus '"device=0"'
```
参考サイト：https://github.com/NVIDIA/nvidia-docker/tree/master#quickstart


#### GUIの使用
docker run の前に`xhost +local:user`を追加し、下記を追加

```
--env DISPLAY=$DISPLAY \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
--volume /etc/localtime:/etc/localtime:ro \
--volume $HOME/.Xauthority:/root/.Xauthority \
```
#### ホストのIPアドレスを使う

```
--net host
```

#### ホストの時刻を使う

```
--volume /etc/localtime:/etc/localtime:ro
```

参考サイト： https://qiita.com/HommaHomma/items/c6dbb554afb51f1b95d5 

#### ホストのUSBデバイスを使う

```
--privileged
```

## 実行中のコンテナに入る
#### 起動しているコンテナIDまたはコンテナ名を確認
```
docker ps
```
#### 指定したコンテナに入る

```
docker exec -it [コンテナID or コンテナ名] /bin/bash
```

## コンテナの停止
#### 起動しているコンテナIDまたはコンテナ名を確認
```
docker ps
```
#### 指定したコンテナを停止
```
docker stop [コンテナID]
```

## イメージの削除

### 特定のイメージを削除

#### イメージのリスト表示

   ```
docker images
   ```

#### 指定したイメージの削除

   ```
docker rmi [イメージID]
   ```
参考サイト：https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae

### タグ無しイメージを一括削除
```
docker rmi `docker images -f "dangling=true" -q`
```
参考サイト：https://qiita.com/boiyaa/items/9972601ffc240553e1f3

### 全てのイメージを削除
```
docker images -aq | xargs docker rmi
```
参考サイト：https://qiita.com/fist0/items/2fb1c7f894b5bdff79f4


## コンテナの削除

### 特定のコンテナを削除
#### 停止しているコンテナのリスト表示

```
sudo docker ps -a
```

#### 指定したコンテナを削除

```
sudo docker rm [コンテナID]
```
参考サイト：https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae

### 全てのコンテナを一括削除
```
docker rm $(docker ps -aq)
```
参考サイト：https://qiita.com/ozhaan/items/9e2090da22ffd6c7ad2a

## ホストーコンテナ間でのファイルのコピー
### コンテナからホスト

```
docker cp [コンテナID]:[コンテナ内の絶対パス] [ホストOS内の絶対パス]
```

### ホストからコンテナ

```
docker cp [ホストOS内の絶対パス] [コンテナID]:[コンテナ内の絶対パス]
```
参考サイト：https://qiita.com/gologo13/items/7e4e404af80377b48fd5


## イメージのエクスポート

### イメージを保存

```
docker save [IMAGE NAME] > [IMAGE NAME].tar
```

### 保存したイメージを読み込む

```
docker load < [IMAGE NAME].tar 
```
参考サイト：https://uxmilk.jp/55512


## コンテナのエクスポート

### コンテナを保存

```
docker export [CONTAINER NAME] > [CONTAINER NAME].tar
```

### 保存したコンテナを読み込む

```
cat [CONTAINER NAME].tar | docker import - [REPOSITORY NAME]:[TAG NAME]
```
参考サイト：https://uxmilk.jp/55512


# 設定
## sudo無しで使う
下記コマンドを打って再起動

```
sudo usermod -aG docker [ユーザー名]
```
参考サイト：https://www.virment.com/docker-sharing-folder-setup/#dockersudo

# エラー対処
## OCI runtime create failed:

CUDAのバージョンとNVIDIA ドライバーのバージョンがあってないとエラーを吐くみたい。
NVIDIAドライバーを更新すればOK

```
sudo apt-get install nvidia-[VERSION]
```
参考サイト：https://blog.sky-net.pw/article/103
参考サイト：https://qiita.com/min9813/items/90a1ef62b3dc37d0cc33

## Error response from daemon: Unknown runtime specified nvidia.
もう一回nvidia-docker2をインストールし直す

## permission denied

```
sudo chown [USER NAME]:[USER NAME] /home/[USER NAME]/.docker -R
```

```
sudo chmod g+rwx "/home/[USER NAME]/.docker" -R
```
参考サイト：https://www.answiz.com/questions/1818/docker-warning-config-json-permission-denied