Docker入門

今更ですが、、Dockerの基本的なことをまとめる。

Dockerとは

Dockerが必要となった背景

・アプリケーションは作ったら終わりではなく、ユーザの要望を取り込み価値のあるアプリケーションに改善していく必要がある
・ユーザ要望が多様化し、変化のスピードも早くなっているため、迅速かつ柔軟なIT基盤が求められるようになってきた
・継続的インテグレーション時の仮想マシンでの問題を、Dockerは解決できる

特徴

・アプリケーションの実行環境をコード管理できる
 ・アプリケーション開発者も環境をすぐに用意することができる
  (サーバ管理者にサーバ構築してもらう必要がなくなる)
 ・本番環境に追加した設定がテスト環境には追加されていない、を回避しやすくなる
・ベースOSのカーネルや機能を利用するため、仮想マシンと比較してオーバーヘッドが少なくなり、リソース消費量(メモリやディスク容量)が少なくなる
 ・作業が効率化される(構築時間がとても早くなる)
 ・仮想マシンとは違って、ハードウェアやカーネルに影響するアプリケーションは利用できない場合がある

操作方法

Docker for Windows で操作する。
まずは、windows10へのdockerインストールにしたがって、Dockerをインストールした。

ubuntuにnginxをインストールして、ブラウザで閲覧できるようにする

### Dockerレジストリ(リポジトリ)から、コンテナイメージを検索する ###
### 公式で、ubuntuを含むコンテナイメージを検索している ###
> docker search --no-trunc --filter is-official=true ubuntu
NAME                 DESCRIPTION                                                                                            STARS               OFFICIAL            AUTOMATED
ubuntu               Ubuntu is a Debian-based Linux operating system based on free software.                                7991                [OK]
ubuntu-upstart       Upstart is an event-based replacement for the /sbin/init daemon which starts processes at boot         87                  [OK]
neurodebian          NeuroDebian provides neuroscience research software for Debian, Ubuntu, and other derivatives.         50                  [OK]
ubuntu-debootstrap   debootstrap --variant=minbase --components=main,universe --include=inetutils-ping,iproute2 <suite> /   39                  [OK]

### コンテナイメージをダウンロードする ###
### ubuntuの最新バージョンをダウンロードする ###
### もしDockerホストのubuntuのバージョンが古くても、Linuxカーネルは後方互換性があるため基本的には問題ない ###
> docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest

### ダウンロードしたコンテナイメージを表示する ###
> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        5 weeks ago         81.2MB

### Dockerコンテナを起動して、nginxをインストールする ###
### 最初にapt-get updateしないとエラーとなる ###

### docker run オプション ###
### -h hostname ホスト名を指定することが可能※デフォルトではコンテナIDと同じ名前となる ###
### --cpuset-cpus 0-3 --memory 4096m などで利用するCPUやメモリ数を指定することが可能 ###
> docker run -it --name ubuntu-container ubuntu
root@b6ec500d4fd7:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"

root@b6ec500d4fd7:/# apt-get install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nginx

root@b6ec500d4fd7:/# apt-get update && apt-get upgrade
...

root@b6ec500d4fd7:/# apt-get install nginx
...
root@b6ec500d4fd7:/# /etc/init.d/nginx status
 * nginx is not running

root@b6ec500d4fd7:/# /etc/init.d/nginx start
 * Starting nginx nginx                                                                                                                                                      [ OK ]

root@b6ec500d4fd7:/# ps afx
   PID TTY      STAT   TIME COMMAND
     1 pts/0    Ss     0:00 /bin/bash
   920 ?        Ss     0:00 nginx: master process /usr/sbin/nginx
   921 ?        S      0:00  \_ nginx: worker process
   922 ?        S      0:00  \_ nginx: worker process
   924 pts/0    R+     0:00 ps afx

root@b6ec500d4fd7:/# exit
exit

### コンテナイメージを作成する ###
> docker commit ubuntu-container akatuki/ubuntu-nginx
sha256:507f4bf357e5a0bcb5df74d50e51fea31778fcc6f0f17938baf977aeb6db38d0

> docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
akatuki/ubuntu-nginx   latest              507f4bf357e5        5 seconds ago       196MB
ubuntu                 latest              113a43faa138        5 weeks ago         81.2MB

### 80番ポートを利用してコンテナを起動する ###
> docker run -itd -p 80:80 --name ubuntu-nginx-container akatuki/ubuntu-nginx

> docker ps
CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS                NAMES
76c54b34974b        akatuki/ubuntu-nginx   "/bin/bash"         29 seconds ago      Up 27 seconds       0.0.0.0:80->80/tcp   ubuntu-nginx-container

> docker attach ubuntu-nginx-container

root@76c54b34974b:/# /etc/init.d/nginx start
 * Starting nginx nginx

### [Ctl]+[P]+[Q]でコンテナを終了せずに、PowerShellに戻ることが可能 ###
### exitするとPID1の /bin/bash が終了する、つまりコンテナが終了する ###
root@76c54b34974b:/# read escape sequence

localhostにアクセスすると、nginxのページが表示される。

Dockerfileを利用した場合

# Dockerfile

FROM ubuntu
MAINTAINER akatuki

RUN apt-get update && apt-get upgrade && apt-get install nginx
CMD service nginx start && bash
> docker build -t akatuki/ubuntu-nginx-2 .\docker_ubuntu_nginx\
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM ubuntu
 ---> 113a43faa138
Step 2/4 : MAINTAINER akatuki
 ---> Running in 16fcf202048b
Removing intermediate container 16fcf202048b
 ---> 216a90a83370
Step 3/4 : RUN apt-get update && apt-get -y upgrade && apt-get install -y nginx
 ---> Running in 33c5c837b636
...
Removing intermediate container 33c5c837b636
 ---> 3e4fc279fc09
Step 4/4 : CMD service nginx start && bash
 ---> Running in f71c691629b7
Removing intermediate container f71c691629b7
 ---> 1bae7466b72c
Successfully built 1bae7466b72c
Successfully tagged akatuki/ubuntu-nginx-2:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

> docker images
REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
akatuki/ubuntu-nginx-2   latest              1bae7466b72c        About a minute ago   194MB

> docker run -itd -p 80:80 --name ubuntu-nginx-container-2 akatuki/ubuntu-nginx-2

その他便利なコマンド

### dockerのバージョンを確認する ###
> docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:48 2018
 OS/Arch:      windows/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true

### docker実行環境を確認する ###
> docker info
Containers: 2
 Running: 1
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 18.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.87-linuxkit-aufs
Operating System: Docker for Windows
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934GiB
Name: linuxkit-00155d011c1d
ID: IHML:MLXN:VWM4:BN3Q:QYWT:QJC4:QVAO:UD5Q:ZS3M:DQC7:2NVH:EP34
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 27
 Goroutines: 48
 System Time: 2018-07-16T14:06:28.8408325Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/
Labels:
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

### コンテナの詳細情報を取得する ###
> docker inspect ubuntu-nginx-container
[
    {
        "Id": "76c54b34974ba7c0cba4aade1875f280517e27588796b96831290386fc12e813",
        "Created": "2018-07-16T13:58:33.5983827Z",
        "Path": "/bin/bash",
        "Args": [],
...

### コンテナ内で変更があったディレクトリとファイルを表示する ###
> docker diff ubuntu-nginx-container
C /root/.bash_history
C /run/nginx.pid
C /var/log/nginx/access.log
C /var/log/nginx/error.log

### コンテナのプロセスを確認する ###
> docker top ubuntu-nginx-container
PID                 USER                TIME                COMMAND
14521               root                0:00                /bin/bash
14671               root                0:00                nginx: master process /usr/sbin/nginx
14672               xfs                 0:00                nginx: worker process
14673               xfs                 0:00                nginx: worker process

### コンテナ内部で実行された標準出力、標準エラー出力への内容を確認する ###
> docker logs ubuntu-nginx-container
root@76c54b34974b:/# /etc/init.d/nginx start
 * Starting nginx nginx

### コンテナイメージの中間イメージの履歴を表示する ###
> docker history akatuki/ubuntu-nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
507f4bf357e5        30 minutes ago      /bin/bash                                       115MB
113a43faa138        5 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           5 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           5 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   2.76kB
<missing>           5 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           5 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B
<missing>           5 weeks ago         /bin/sh -c #(nop) ADD file:28c0771e44ff530db…   81.1MB

### コンテナを出力する ###
> docker export ubuntu-nginx-container > ubuntu-nginx-container.img

補足1 – コンテナ管理について

複数アプリケーション利用時のコンテナ数について

・アプリケーションごとにコンテナを分割がベストプラクティス
 ・コンテナを作り直す際に、設定変更内容が明確になるため

コンテナのスナップショット

・コンテナ起動時にスナップショットを作成する
 停止時はスナップショットを保持する
 削除時にスナップショットを削除する

補足2 – すべてのコンテナイメージを削除する

> docker rmi -f  $(docker images -aq)

参考

今、なぜ「Docker」なのか
Docker実践入門――Linuxコンテナ技術の基礎から応用まで
docker コマンド チートシート
docker初心者の方が知っておいた方がよい基礎知識
docker-compose upするとコンテナが一瞬でexited with code 1する話

Docker for Window で稼働しているローカルLinuxコンテナをAWSへ移動させてみた

クライアント端末(Windows 10)必要なソフトをインストールする

Microsoft Windows で AWS Command Line Interface をインストールする
windows10へのdockerインストール
 記事を参考に「Kitematic(カイトマチック)」もインストールした。

Kitematic(カイトマチック)のイメージ



hello-world-nginxのコンテナをローカルで実行する

PS C:\Users\shimizu> docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (xxxx): xxxx
Password:
Login Succeeded

PS C:\Users\shimizu> docker search hello-world
NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
hello-world                                Hello World! (an example of minimal Dockeriz…   489                 [OK]
kitematic/hello-world-nginx                A light-weight nginx container that demonstr…   97
...

PS C:\Users\shimizu> docker pull kitematic/hello-world-nginx
Using default tag: latest
latest: Pulling from kitematic/hello-world-nginx
77c6c00e8b61: Pull complete
9b55a9cb10b3: Pull complete
e6cdd97ba74d: Pull complete
7fecf1e9de6b: Pull complete
6b75f22d7bea: Pull complete
e8e00fb8479f: Pull complete
69fad424364c: Pull complete
b3ba6e76b671: Pull complete
a956773dd508: Pull complete
26d2b0603932: Pull complete
3cdbb221209e: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:ec0ca6dcb034916784c988b4f2432716e2e92b995ac606e080c7a54b52b87066
Status: Downloaded newer image for kitematic/hello-world-nginx:latest

PS C:\Users\shimizu> docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
kitematic/hello-world-nginx   latest              03b4557ad7b9        2 years ago         7.91MB

PS C:\Users\shimizu> docker run --name mydocker -d -p 80:80 kitematic/hello-world-nginx
cfbb354fff9823393377d4e2dfe70cb7962d9732ae8cba089f2da07f934c8724

PS C:\Users\shimizu> docker ps -a
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS                NAMES
cfbb354fff98        kitematic/hello-world-nginx   "sh /start.sh"      34 seconds ago      Up 33 seconds       0.0.0.0:80->80/tcp   mydocker

PS C:\WINDOWS\system32> docker stop mydocker
mydocker

localhostにアクセスするとコンテナが動作していることがわかる。

AWSユーザを作成し、AWS CLIに認識させる

特定IPアドレスにadministrator権限を与えるIAMポリシーを作成し、ユーザに紐づける。
そのユーザでアクセスキーを作成し、AWS CLIに設定する。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AdministratorAccess",
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    },
    {
      "Sid": "SourceIPRestriction",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "NotIpAddress": {"aws:SourceIp": "x.x.x.x"}
      }
    }
  ]
}
PS C:\Users\shimizu> aws configure
AWS Access Key ID [None]: AKIAxxxxxxxx
AWS Secret Access Key [None]: 9Qexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

Amazon Elastic Container Service (ECS)

ECSはEC2が必要であるが、Fargateを利用するとEC2の管理が不要となる。
Fargateは2018年4月現在東京リージョンにないためECSを利用する。

Elastic Container Registryにローカルのimageを登録する

ECRを作成する。

指示に従ってローカルのimageをECRへ登録する。

PS C:\WINDOWS\system32> aws ecr get-login --no-include-email --region ap-northeast-1
docker login -u AWS -p e...z https://377343199566.dkr.ecr.ap-northeast-1.amazonaws.com
PS C:\WINDOWS\system32> docker login -u AWS -p e...z https://377343199566.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded

PS C:\WINDOWS\system32> docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
kitematic/hello-world-nginx   latest              03b4557ad7b9        2 years ago         7.91MB
PS C:\WINDOWS\system32> docker tag kitematic/hello-world-nginx 377343199566.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world-nginx
PS C:\WINDOWS\system32> docker images
REPOSITORY                                                            TAG                 IMAGE ID            CREATED             SIZE
377343199566.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world-nginx   latest              03b4557ad7b9        2 years ago         7.91MB
kitematic/hello-world-nginx                                           latest              03b4557ad7b9        2 years ago         7.91MB

PS C:\WINDOWS\system32> docker push 377343199566.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world-nginx:latest
The push refers to repository [377343199566.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world-nginx]
5f70bf18a086: Pushed
b51acdd3ef48: Pushed
3f47ff454588: Pushed
f19fb69b288a: Pushed
b11278aeb507: Pushed
fb85701f3991: Pushed
15235e629864: Pushed
86882fc1175f: Pushed
9e8c93c7ea7e: Pushed
e66f0ebc2eef: Pushed
6a15a6c08ef6: Pushed
461f75075df2: Pushed
latest: digest: sha256:583f0c9ca89415140fa80f70f8079f5138180a6dda2c3ff3920353b459e061a3 size: 3226

クラスターを作成する






タスク定義とクラスターへのタスク登録





EC2インスタンスにアクセスするとコンテナが動作していることがわかる。

参考URL

【初心者向け】Dockerを速習しよう
初心者か゛伝えるDocker超入門
AWS管理コンソールへのアクセスをIPアドレスで制限したい

Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: unauthorized: incorrect username or password.

以下のエラー時はdocker loginすべし。

PS C:\Users\shimizu> docker run hello-world
Unable to find image 'hello-world:latest' locally
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: unauthorized: incorrect username or password.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

PS C:\Users\shimizu> docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (xxxx): xxxx
Password:
Login Succeeded

PS C:\Users\shimizu> docker run hello-world
... imageのダウンロードが開始される ...

docker Client.Timeout exceeded while awaiting headers

Windows10 の docker でエラーとなったため対応した。

PS C:\Users\shimizu> docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (xxxxxxxx):
Password:
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Docker Hubにloginしようとしたら、net/http: request canceled while waiting for connectionを参考に以下画像のように
dockerのDNSサーバに 8.8.8.8 を指定したところ、docker loginが成功するようになった。

Developers Summit 2016に参加した – そのに –

クラウド・ネイティブ時代の2016年だから始めるDocker基礎講座 – 前佛 雅人さん

http://docs.docker.jp/
を作成している方

dockerとは

・アプリケーションを動かすための仕組みを提供
・2016年3月で3歳になる
・それぞれのコンテナは隔離されている(例えばinitは1から開始される)
・それぞれのコンテナについてIPアドレスを持てる
 →ホストとは別のIPアドレスを設定可能、メモリもそれぞれのコンテナで上限を設定可能

ツール類

・Docker Machine
 Docker Engine動作環境や仮想マシン環境・Swarmクラスタを自動的に構築、一元管理する

・Docker compose
 複数のコンテナ管理に有益(dockerコマンドと似ている)、scaleコマンドでコンテナの増減自由自在
 Composeファイルに設定を記載する
・docker SWARM(スウォーム)
 物理サーバや仮想サーバの数に関係なくdockerを操作することができる(まだ開発途上とのこと)
 →少し癖がある。ディスカバリ・バックエンド、ストラテジ、フィルタという概念がある。

Docker

2015-07-02_214621

概要

http://dotinstall.com/lessons/basic_docker
のまとめ。このメモ見るなら本家見たほうがよいです

Dockerとは

・軽量な仮想化環境を作るツール
・Ubuntuにて開発されている

root@ubuntu:/home/shimizu# wget -qO- https://get.docker.com/ | sh
...
The following NEW packages will be installed:
  crda iw libnl-3-200 libnl-genl-3-200 linux-image-3.13.0-55-generic
  linux-image-extra-3.13.0-55-generic linux-image-extra-3.16.0-40-generic
  linux-image-extra-virtual linux-image-generic wireless-regdb
0 upgraded, 10 newly installed, 0 to remove and 32 not upgraded.
Need to get 89.5 MB of archives.
...

root@ubuntu:/home/shimizu# docker -v
Docker version 1.7.0, build 0baf609

イメージ

2015-07-02_223317
Docker Index:Imageの共有サイト
Imageをダウンロード(docker pull)して、Containerとして実行する(docker run)
Containerを別のDockerサーバに移動させるには、ContainerをImageに変換(docker commit)して
Docker Indexに登録する(docker push)

操作方法

### Imageのダウンロード ###
root@ubuntu:/home/shimizu# docker search centos
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                        The official build of CentOS.                   1092      [OK]
tutum/centos                  Centos image with SSH access. For the root...   13                   [OK]
blalor/centos                 Bare-bones base CentOS 6.5 image                9                    [OK]
torusware/speedus-centos      Always updated official CentOS docker imag...   6                    [OK]
million12/centos-supervisor   Base CentOS-7 with supervisord launcher, h...   5                    [OK]
jdeathe/centos-ssh            CentOS-6 6.6 x86_64 / EPEL Repo. / OpenSSH...   3                    [OK]
layerworx/centos              A general CentOS 6 image with the EPEL6 an...   2                    [OK]
jdeathe/centos-ssh-mysql      CentOS-6 6.6 x86_64 / MySQL.                    2                    [OK]
pdericson/centos              Docker image for CentOS                         0                    [OK]
nathonfowlie/centos-jre       Latest CentOS image with the JRE pre-insta...   0                    [OK]

root@ubuntu:/home/shimizu# docker pull centos
latest: Pulling from centos
f1b10cd84249: Pull complete
c852f6d61e65: Pull complete
7322fbe74aa5: Already exists
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:a4627c43bafc86705af2e8a5ea1f0ed34fbf27b6e7a392e5ee45dbd4736627cc
Status: Downloaded newer image for centos:latest

root@ubuntu:/home/shimizu# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              7322fbe74aa5        13 days ago         172.2 MB

# 詳細を表示する。IDについては一意であれば何文字でもOK
root@ubuntu:/home/shimizu# docker inspect 73 
...

### Containerを作成する ###
root@ubuntu:/home/shimizu# docker run 73 echo "hello world"
hello world

# 実行が完了したプロセスを表示する
root@ubuntu:/home/shimizu# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS               NAMES
6d654c9581e3        73                  "echo 'hello world'"   About a minute ago   Exited (0) About a minute ago                       sharp_kirch

root@ubuntu:/home/shimizu# docker run -d centos free -s 3
29c3e9f265781ab94817e1c8ca2f54bf26d243ad702db0acd1f2631c4332a283

# 実行中のプロセスを表示する
root@ubuntu:/home/shimizu# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
29c3e9f26578        centos              "free -s 3"         2 seconds ago       Up 1 seconds                            hungry_jones

root@ubuntu:/home/shimizu# docker logs 29c3e9f26578
              total        used        free      shared  buff/cache   available
Mem:         686628       84136      107884         452      494608      474308
Swap:             0           0           0

              total        used        free      shared  buff/cache   available
Mem:         686628       81572      110440         460      494616      476900
Swap:             0           0           0

              total        used        free      shared  buff/cache   available
Mem:         686628       81572      110440         460      494616      476900
Swap:             0           0           0

              total        used        free      shared  buff/cache   available
Mem:         686628       81560      110440         460      494628      476900
Swap:             0           0           0

              total        used        free      shared  buff/cache   available
Mem:         686628       81560      110440         460      494628      476912
Swap:             0           0           0

root@ubuntu:/home/shimizu# docker kill 29c3e9f26578
29c3e9f26578

root@ubuntu:/home/shimizu# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

### ContainerからImageを作成して、正しく動作するか確認する ###
root@ubuntu:/home/shimizu# docker run -i -t centos /bin/bash
[root@ff4b98c69eb6 /]# touch hello.txt
[root@ff4b98c69eb6 /]# ls
bin  dev  etc  hello.txt  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@ff4b98c69eb6 /]# exit

root@ubuntu:/home/shimizu# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                       PORTS               NAMES
ff4b98c69eb6        centos              "/bin/bash"            25 seconds ago      Exited (0) 9 seconds ago                         hopeful_pike                    

root@ubuntu:/home/shimizu# docker commit ff4 test/hello
8fac9b012f2d1983a9bd10ad5f1e48ab270b9603963dff46dd22be777ccdb04f

root@ubuntu:/home/shimizu# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
test/hello          latest              8fac9b012f2d        9 seconds ago       172.2 MB
centos              latest              7322fbe74aa5        13 days ago         172.2 MB

root@ubuntu:/home/shimizu# docker run -i -t test/hello /bin/bash
[root@33f4291501ed /]# ls
bin  dev  etc  hello.txt  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var