Docker入門2 基本的なコマンドを使ってみる

## 前のページ
[Docker入門1 仮想化からコンテナまで \- Qiita](https://qiita.com/maruuuuu/items/50be4b7980fa26131af7)

## インストール
それでは、PCでDockerを使えるようにしましょう。お使いのPCがMacならDocker Desktop for Mac、WindowsならDocker Desktop for Windowsをインストールします。

* Macの方
[Install Docker Desktop on Mac \| Docker Documentation](https://docs.docker.com/docker-for-mac/install/)

* Windowsの方
[Install Docker Desktop on Windows \| Docker Documentation](https://docs.docker.com/docker-for-windows/install/)

あれ、LinuxカーネルじゃないんだけどDocker使えるの？と思った方、ちゃんとDocker入門1を読んでくれたのですね。ありがとうございます。
これらのツールはゲストOSとしてLinuxも一緒にインストールしてくれるので、MacやWindowsでもDockerが使えるのです。（下記のようなイメージ）

![Untitled Diagram (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386017/c36530cd-3688-b7a8-328e-ae6dea19ed60.png)


## Dockerの基本的なライフサイクル

PCにDockerをインストールできましたか？
まずは、Dockerの超基本的なライフサイクルです。
Dockerfileを元にビルドするとDockerイメージが作成され、Dockerイメージを実行するとDockerコンテナが起動します。

![Untitled Diagram (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386017/a159bb7e-5322-def0-3779-01f952bed473.png)

## 基本的なコマンドを使ってみる

#### 1. Dockerファイルを作成する

`Dockerfile`というファイル名のファイルを作成し、次の1行だけ入力して保存してください。
これは、Linuxディストリビューションであるalpineという軽量なOSを使うという宣言です。

```Dockerfile

FROM alpine
```
#### 2. コンテナイメージを作成する

ターミナルで、Dockerfileのあるディレクトリに移動し、次のコマンドを実行します。
-t オプションはタグ名の指定です。ビルドすると、`docker-test`というタグ名でDockerイメージが作成されます。最後の`.`はビルドする対象のフォルダを指定していて、ターミナルで今いるカレントディレクトリのことを示しています。
まとめると、カレントディレクトリのDockerファイルを使ってdocker-testというタグ名のイメージを作成する、ということになります。

```bash
$ docker build -t docker-test .
Sending build context to Docker daemon  4.096kB
Step 1/1 : FROM alpine
latest: Pulling from library/alpine
89d9c30c1d48: Pull complete 
Digest: sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
Status: Downloaded newer image for alpine:latest
 ---> 965ea09ff2eb
Successfully built 965ea09ff2eb
Successfully tagged docker-test:latest
```
コンテナイメージがちゃんと作成できたのか確かめましょう。

```
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              965ea09ff2eb        4 weeks ago         5.55MB
docker-test         latest              965ea09ff2eb        4 weeks ago         5.55MB
```
`docker-test`というイメージが作成されていますね。
`alpine`というイメージも作成されています。これについては、あとで説明します。

#### 3. コンテナを実行する
では、イメージファイルを元にコンテナを実行しましょう。

```
$ docker run docker-test
```
コンテナが作成されたのか確認します。
-a は終了したコンテナも含めて全て表示するオプションです。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
ac067a3ee3d9        docker-test         "/bin/sh"           10 seconds ago      Exited (0) 8 seconds ago                       priceless_diffie
```
`docker-test`のコンテナが表示されましたね。

ちなみに、`docker ps`だけだと何も表示されません。上記の結果で`STATUS`が`Exited (0) 8 seconds ago`となっているように、`docker-test`のコンテナは、コンテナの中で何のアプリケーションも起動していないので、コンテナがすぐに終了してしまったためです。 

#### 4. コンテナの中に入る
コンテナを起動したタイミングで、コンテナに入ってコマンドを実行することもできます。
alpineはシェルとしてashを使用するため、最後に`/bin/ash`と付けて実行します。

```
$ docker run -it docker-test /bin/ash
```
入ったら、試しにカレントディレクトリでディレクトリ/ファイル一覧を表示してみましょう。
alpineのルートディレクトリです。

```
/ # ls -l
total 56
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 bin
drwxr-xr-x    5 root     root           360 Nov 24 12:03 dev
drwxr-xr-x    1 root     root          4096 Nov 24 12:03 etc
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 home
drwxr-xr-x    5 root     root          4096 Oct 21 13:39 lib
drwxr-xr-x    5 root     root          4096 Oct 21 13:39 media
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 mnt
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 opt
dr-xr-xr-x  185 root     root             0 Nov 24 12:03 proc
drwx------    1 root     root          4096 Nov 24 12:03 root
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 run
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 sbin
drwxr-xr-x    2 root     root          4096 Oct 21 13:39 srv
dr-xr-xr-x   13 root     root             0 Nov 24 12:03 sys
drwxrwxrwt    2 root     root          4096 Oct 21 13:39 tmp
drwxr-xr-x    7 root     root          4096 Oct 21 13:39 usr
drwxr-xr-x   11 root     root          4096 Oct 21 13:39 var
```

#### 5. コンテナから出る

コンテナから出るには`exit`を使います。

```
exit
```