[自分用]Dockerの作業メモ

ドットインストールのDocker入門( http://dotinstall.com/lessons/basic_docker )をやった時の勉強メモ

## VagrantでDockerをインストールするサーバーをつくる
まずは、Vagrantで仮装サーバーを立ち上げ（今回はUbuntu）

```
$vagrant box list #trusty64がなければ、`vagrant box add`で追加
trusty64             (virtualbox, 0) 

$ cd ~/Vagrant
$ mkdir Docker
$ cd Docker
$ vagrant init trusty64
$ vagrant ssh
```

`Vagrantfile`のprivate_networkのIPを設定しておく

```
config.vm.network "private_network", ip: "192.168.55.44"
```

##Dockerをインストール

次にVagrantで立ち上げたUbuntuにDockerをインストール
公式サイトに書いてあるとおりにする。

```
$ sudo apt-get update
$ sudo apt-get install docker.io
```

イメージを検索取得

```
$ sudo docker pull centos
```

イメージを確認

```
$ sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos5             192178b11d36        2 weeks ago         466.9 MB
centos              centos6             70441cac1ed5        2 weeks ago         215.8 MB
centos              centos7             ae0c2d0bdc10        2 weeks ago         224 MB
centos              latest              ae0c2d0bdc10        2 weeks ago         224 MB
```

##コンテナを操作

コンテナを作る。
centosイメージからコンテナを作って`echo "hello world"`を実行してみる

```
$ sudo docker run centos echo "hello world" 
```

コンテナを確認

```
$ sudo docker ps #これだと実行中のものしか出ないので、何もでない。

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

$ sudo docker ps -a #全部出すには`-a`を付ける
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                     PORTS               NAMES
db58d295c773        centos:centos7      echo 'hello world'   4 minutes ago       Exited (0) 4 minutes ago                       prickly_meitner      
```

コンテナを削除するには、`sudo docker rm コンテナID`

次にコンテナを作成して、バックグラウンドでコマンドを実行してみる。

```
$ sudo docker run -d centos free -s 5

a71d132763e10b5e6976d2f0d6b9f1feeaeefcbfe5b97f97607dfb2a8686937c
```

IDを指定してログ確認

```
$ sudo doker logs a71d1

             total       used       free     shared    buffers     cached
Mem:        501764     404956      96808        680       7080     254012
-/+ buffers/cache:     143864     357900
Swap:            0          0          0

             total       used       free     shared    buffers     cached
Mem:        501764     404956      96808        680       7088     254016
-/+ buffers/cache:     143852     357912
Swap:            0          0          0

```

このタスクをフォアグラウンドにもってきたいときは以下のようにする

```
$ sudo docker attach --sig-proxy=false a71d1
```

コンテナの停止・再実行

```
$ sudo docker kill a71d1 #sudo docker startでもOK
$ sudo docker start a71d1
```


##イメージをつくる

実際にコンテナにログインしてみる

```
$ sudo docker run -i -t centos /bin/bash

bash-4.2# touch hello.txt
exit
```

次にこのコンテナをコミットしてイメージ作成

```
$ sudo docker commit 52a2e48ec27f s-kiriki/hello

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
s_kiriki/hello      latest              af39053b9158        About a minute ago   224 MB #ちゃんとイメージできてる！！
centos              centos5             192178b11d36        2 weeks ago          466.9 MB
centos              centos6             70441cac1ed5        2 weeks ago          215.8 MB
centos              centos7             ae0c2d0bdc10        2 weeks ago          224 MB
centos              latest              ae0c2d0bdc10        2 weeks ago          224 MB
```

イメージからコンテナを作ってhello.txtがあるか確認

```
$ sudo docker run -i -t s_kiriki/hello /bin/bash
bash-4.2# ls
bin  dev  etc  hello.txt  home	lib  lib64  lost+found	media  mnt  opt  proc  root  run  sbin	selinux  srv  sys  tmp	usr  var

```

## Dockerfileを使う

```
$ vi Dockerfile
```

```:Dockerfile
FROM centos
MAINTAINER Shinya Kiriki

# RUN: build時に実行
RUN echo "building...."

# CMD: run時に実行
CMD ["echo", "runnning...."]
```

実行してイメージとして保存

```
$ sudo docker build -t kiriki/echo .
Sending build context to Docker daemon 14.85 kB
Sending build context to Docker daemon 
Step 0 : FROM centos
 ---> ae0c2d0bdc10
Step 1 : MAINTAINER Shinya Kiriki
 ---> Using cache
 ---> 2deb26f90244
Step 2 : RUN echo "building...."
 ---> Using cache
 ---> f3ce1a798a0e
Step 3 : CMD ["echo", "runnning...."]
 ---> Running in 069b76d2b384
 ---> cef0238dd965
Removing intermediate container 069b76d2b384
Successfully built cef0238dd965
```

保存したイメージからコンテナを実行

```
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
s_kiriki/echo       latest              cef0238dd965        About a minute ago   224 MB
....
....

$ sudo docker run s_kiriki/echo
runnning....
```

##WEBサーバーを立ちあげ

Dockerfilewを編集


```:Dockerfile
FROM centos
MAINTAINER Shinya Kiriki

RUN yum install -y httpd
ADD ./index.html /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

index.htmlを作成

```index.html
<html>
Docker test
</html>
```

イメージを作成

```
sudo docker build -t s_kiriki/httpd .
```

コンテナを実行

```
$sudo docker run -p 8080:80 -d s_kiriki/httpd #ホスト側の8080ポートをコンテナの80番にリダイレクト
```

これで、最初にVagrantfileで設定したipの8080ポート（`http://192.168.55.44:8080/`）でアクセス可能