Docker を試すサンプルメモ①

# メモ

- Ubuntuのイメージを使ってコンテナを起動してみる
- すぐに終了しない方法も確認してみる

## イメージのダウンロード～コンテナの実行まで

```zsh
# Ubuntuイメージのダウンロード
% docker pull ubuntu
# 確認
% docker images     
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              72300a873c2c        2 weeks ago         64.2MB
# この時点ではコンテナはまだ無い
% docker ps                         
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
# コンテナとして起動。ただしフォアグラウンドのプロセスが無いため（？）すぐに終了する
# createとstartをするのと同義らしい
# http://docs.docker.jp/engine/reference/commandline/run.html
% docker run 72300a873c2c
# 確認。なにもない
% docker ps   
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
# すべて表示（-a）すると確認できる
% docker ps -a              
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
a67c73f36b34        72300a873c2c        "/bin/bash"         6 seconds ago       Exited (0) 5 seconds ago                       suspicious_lamport
# `docker start` で以前使っていたコンテナを実行できる
% docker start a67c73f36b34   
a67c73f36b34
# すぐ終了するけど STATUS が更新された
% docker ps -a             
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
a67c73f36b34        72300a873c2c        "/bin/bash"         8 minutes ago       Exited (0) 2 seconds ago                       suspicious_lamport
# フォアグラウンドのプロセスが無いとすぐに終了するらしいので、run時にループするコマンドを実行させてみる
% docker run 72300a873c2c /bin/sh -c "while :; do sleep 10; done"
# ターミナルは帰ってこない。別ターミナルで `docker ps` で確認する
# Dockerコンテナが実行中であることを確認できる
[別ターミナル]% docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
cfe9f0d0da0d        72300a873c2c        "/bin/sh -c 'while :…"   21 seconds ago      Up 20 seconds                           admiring_kilby
```

## イメージの作成（Dockerfile）
動作確認のため、事前にイメージとコンテナを全部消しておく

```
% docker ps -aq | xargs docker rm; docker images -aq | xargs docker rmi -f
```

以下動作確認

```zsh
# Dockerfile を作成
# Ubuntuイメージを使うのを定義するだけ
% cat Dockerfile
FROM ubuntu
# `docker build .` でイメージ作成
% docker build .
...
Successfully built 72300a873c2c
# イメージの確認
# ↑で確認したのと同じ、素のUbuntuイメージが確認できる
% docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              72300a873c2c        2 weeks ago         64.2MB
# 再度イメージとコンテナを削除し、以下のようにDockerfileを定義してみる
# ↑でコンテナがすぐに終了しないようにするコマンド
% cat Dockerfile
FROM ubuntu
CMD while :; do sleep 10; done
# 再度 build
% docker build .
# 今度は素のイメージのダウンロードされたものと、カスタマイズしたイメージが生成されている（noneのやつ）のが分かる
% docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              361af20afb75        6 seconds ago       64.2MB
ubuntu              latest              72300a873c2c        2 weeks ago         64.2MB
# カスタムしたイメージを実行してみる
# 実行されたままになってプロンプトが帰ってこないはず
% docker run 361af20afb75  
# 別ターミナルで `docker ps` すると実行中のコンテナが確認できる
[別ターミナル]% docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0f063dcd1361        361af20afb75        "/bin/sh -c 'while :…"   22 seconds ago      Up 21 seconds                           reverent_banach

```

# 参考
Dockerのコンテナを起動したままにする - Qiita https://qiita.com/reflet/items/dd65f9ffef2a2fcfcf30

なんやかんや公式ドキュメントは詳しい
run — Docker-docs-ja 17.06.Beta ドキュメント http://docs.docker.jp/engine/reference/commandline/run.html