既存のdockerコンテナから新たなイメージを作成する

# 〜Dockerfile編〜

↓ターミナル操作

# Docker hubからimageを取得
・使いたいimageをpullする。

```
<例>docker pull nvcr.io/nvidia/tensorflow:20.12-tf1-py3
```
docker imagesで中身確認。
新たなimageが出現してる。
![Screenshot from 2021-10-06 15-08-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/046196b9-f6bc-d599-fb78-21fb35a052f6.png)

# 適当な場所にフォルダを作成(ここでは/home/で作成したことを想定)

```
mkdir testDockerfile
```
<例>
/home/tmc/testDockerfileが出来上がる
![Screenshot from 2021-10-06 15-12-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/81cd06cd-803d-c424-6be3-7df11c7a75bf.png)

# 作成したフォルダ内に移動する

```
cd testDockerfile
```
# テキストファイルを作成する。

```
touch Dockerfile
```
↓ホスト側操作(マウス操作)
作成したtestDockerfileフォルダ内にDockerfileが作成されているか確認する。
![Screenshot from 2021-10-11 14-22-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/95379ecb-87c0-ea84-ce53-865aad4dba93.png)


# 作成されてたらテキストファイルの中に実行したいコマンドを入力して保存する。
<例>
![Screenshot from 2021-10-06 15-22-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/0838cb52-457e-4110-3096-9b3afe9b1f44.png)

↓ターミナル操作

・新たなimageを生成する。

```
docker build -t 'dockertest'(新しいリポジトリ名を任意に設定) /home/tmc/testDockerfile(dockerfileのありか)
```
もしくは

```
docker build -t 'dockertest'(新しいリポジトリ名を任意に設定) .
```
※最後の'.'を忘れないように！！

# docker imageが生成されたか確認する

```
docker images
```
![Screenshot from 2021-10-06 15-42-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/dda389bf-6623-75bb-ff29-7a45c999b61c.png)

```
docker tag dockertest:latest(上げたいイメージのレポジトリ名) sasagurinaoto/docker(上げたい先dockerhub)
```
# 同じimgeIDで新たなdocker imageが生成されたか確認する。

```
docker images
```

同じimageIDでもう１個イメージが生成されてる。
![Screenshot from 2021-10-06 15-47-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/a06f4a89-3d08-d9f9-6cfd-57ddb1a1590d.png)

# ・docker hubにpushする。

```
docker push sasagurinaoto/docker
```

![Screenshot from 2021-10-06 15-58-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/c257d6f7-1ec0-5bcd-fa26-c12593c76797.png)





ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


# 〜コンテナから直接イメージ作成編〜

# ①ベースとなるdockerイメージをpullする

```
docker pull ユーザー名/イメージ名
```

pullできてるか確認

```
docker images
```


# ②pullしてきたdockerイメージを使ってコンテナを作成

```
docker run レポジトリ名(ユーザー名/イメージ名)
```

# ③コンテナ内で必要モジュールをインストールする

<例>

```
pip install opencv-python
pip install efficientnet
```

# ④コンテナを停止する
exit

![Screenshot from 2021-11-03 09-51-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/d4479266-aae9-4e55-78d3-981597bbe472.png)

停止したか確認する

```
docker ps -a
```
![Screenshot from 2021-11-03 09-51-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/0836629e-448e-76c0-12e1-8d1131abad28.png)


# ⑤新たなイメージを作成する

```
docker commit 元イメージ名　新たなイメージ名:tag名
```

![Screenshot from 2021-11-03 09-52-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/c79dc5fb-9714-c336-888f-66de3807d518.png)
作成されたか確認

```
docker images
```

![Screenshot from 2021-11-03 09-52-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/f296a33c-7494-f4d4-7999-be39bc43dd3f.png)


# ⑥dockerhubに上げたいイメージと上げる先を指定
<例>

```
docker tag イメージ名:tag名(上げたいイメージのレポジトリ名) <例>sasagurinaoto/docker(上げたい先dockerhub)
```
# 同じimgeIDで新たなdocker imageが生成されたか確認する。

```
docker images
```

同じimageIDでもう１個イメージが生成されてる。
![Screenshot from 2021-10-06 15-47-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/a06f4a89-3d08-d9f9-6cfd-57ddb1a1590d.png)

# ⑦docker hubにpushする。

```
docker push sasagurinaoto/docker
```

![Screenshot from 2021-10-06 15-58-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235997/c257d6f7-1ec0-5bcd-fa26-c12593c76797.png)