docker 基本的な流れについてまとめてみた

## この記事の目的
dockerの全体像を簡単な例を作成しつつ理解する

dockerの使い方などはなんとなくわかってきたけど、
いまいち全体像がイメージできない…
という方は見てもらえればと思います

## 作業概要
今回は次の流れでdockerを実施してみます
1. dockerfileからimage作成(build、pull)
2. imageからコンテナ作成(create)
3. コンテナを動かしてみる
4. コンテナからimage作成(commit)


### docker基本図

![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/6d7d58cf-eef4-2bb9-a99a-e67a8dafacf9.png)


要素について

- dockerfile
公開されているdocker imageをそのまま使用するのではなく、
追加の設定などを行ったdocker imageを作成したいときに使用します

- image
コンテナの立ち上げに必要なファイルをまとめてあります
読み込み専用

- コンテナ
dockerのイメージを元に作成される仮想環境

- dockerhub
docker 社が提供しているイメージ管理用クラウドサービス




## dockerfileからimage作成
画像赤枠部分について実施してきます
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/f14e417c-fc41-392b-2425-7ebab9102060.png)

### dockerfile作成

今回は次のようなdockerfileを作成しました

```
FROM ubuntu

RUN apt update

WORKDIR /opt/

CMD ["/bin/bash"]
```

FROMでベースとなるイメージを指定します
この時指定したイメージをpullしていない場合、pullも同時に行ってくれます

dockerfileに記載されているコマンドは、
FROM,RUN,WORKDIRがdocker buildのタイミングで実行、
CMDがdocker startのタイミングで実行されます


### image作成

dockerfileからimageを作成する際にはbuildコマンドを使用します
例と同じコマンドを使用する場合、dockerfileのあるフォルダに移動してからコマンドを実施してください

```
docker build -t test:1.0 .
```

コマンドの実施後、docker images で確認すると、新しいimageが作成されています

```
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
test                    1.0       cb7375570b67   2 minutes ago   103MB
```


## imageからコンテナ作成
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/0031206b-3860-0dab-926d-97e390cc5bc8.png)

docker imageからコンテナを作成する際にはcreateコマンドを使用します

```
docker create -it --name testdayo test:1.0
```

コマンドの実施後、docker ps -a で確認すると、新しいコンテナが作成されています

```
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS                    PORTS     NAMES
9ecd3887bb6e   test:1.0                "/bin/bash"              7 seconds ago   Created                             testdayo
```


## コンテナを動かしてみる
作成したコンテナを起動するにはstartコマンドを使用します

```
docker start -i testdayo
```

起動し、bashが使用できるようになっていれば成功です

```
root@9ecd3887bb6e:/opt#
root@9ecd3887bb6e:/opt# pwd
/opt
```
## コンテナからイメージ作成
今回はapacheのインストールを行った、イメージを作成します
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/f0b49475-c97a-9b3b-7b74-7ddadf12f95f.png)


### apacheのインストール
まずは事前にインストールされていないことを確認します

```
apache2 -v
bash: apache2: command not found
```

apache2のインストールを行います

```
apt install apache2
```

コマンド実施後、インストールされたことを確認します

```
apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2021-07-05T07:16:56
```

exitでbashから抜けます

### コンテナからimage作成
apacheをインストールしたコンテナでコミットを実施します

```
docker commit testdayo test2
```

イメージが作成されているか確認します

```
docker images

REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
test2                   1.0       01b3cf3ea958   16 seconds ago   226MB
test                    1.0       2a7093e5c996   8 days ago       103MB
```

### apacheの起動確認
コンテナを作成し、動かします

```
docker create -it -p 8080:80 --name testdayo2 test2:1.0
docker start -i testdayo2
```


apacheを起動し、ブラウザからlocalhost:8080に接続します

```
/etc/init.d/apache2 start

/etc/init.d/apache2 status
 * apache2 is running
```

画像のような画面がでれば起動ができています

![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/da557ce3-723f-9845-0bd5-9389d5a70d0a.png)

## 参考 docker docks

https://docs.docker.jp/index.html

## 終わり
dockerのおおまかな流れが理解したいと思いまとめてみました
間違っている部分があれば教えてください