Dockerインストールメモ


# インストール

[Explore - Docker Store](https://store.docker.com/search?offering=community&type=edition)で各OSとAWS、Azureのようなクラウドサービス向けのインストール方法が紹介されていますので、目的のdockerのインストールページを参照してください。


## Windows

[Docker Community Edition for Windows - Docker Store](https://store.docker.com/editions/community/docker-ce-desktop-windows)からインストーラをダウンロードできます。
ただ、Docker CEは、バックエンドがHyper-Vなので、VMWare Playerと共存ができないので要注意です。
Hyper-Vを使えない環境では[Docker Toolbox](https://docs.docker.com/toolbox/overview/)を利用すると、バックエンドがVirtualBoxなのでいいらしいですが、使ったことがないので使用感が分かりません．．．


## Mac

[Docker Community Edition for Mac - Docker Store](https://store.docker.com/editions/community/docker-ce-desktop-mac)からdmgファイルをダウンロードできます。
2017年11月現在、macOSではDocker用仮想ネットワークに母艦となるmacOSが接続できない制限があるらしいです。macOSに詳しければその制限を乗り越えられるのかもしれませんが、私には無理でした．．．


## Linux

詳しくは、[Get Docker CE for Debian | Docker Documentation](https://docs.docker.com/engine/installation/linux/docker-ce/debian/)を参照してください。


### Raspbian(RaspberryPi 2 and 3)

```
$ sudo apt-get update
$ sudo apt-get install --yes \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg2 \
  software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ echo "deb [arch=armhf] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ sudo apt-get install --yes docker-ce
$ sudo usermod pi -G 100,27,docker
```

Dockerインストール後、既存のユーザをdockerグループに所属させるかdockerグループ所属のユーザを追加します。  
Docker Hubで公開されているコンテナは、基本的にx86_32/64でARM/ARM64は少ないです。Docker Registry入れてプライベートDocker Hubみたいな用途で使ってます。


### Ubuntu Linux

```
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get -y install docker-ce
```


### CentOS7

* dockerリポジトリの追加

```
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

* yumのパッケージインデックスの更新（おまじない）

```
$ sudo yum makecache fast
```

* インストール
    * 最新版のインストール
    
    ```
    $ sudo yum install docker-ce
    ```
    * バージョン指定
    
    ```
    $ yum list docker-ce.x86_64 --showduplicates | sort -r
    ```
    でバージョンを確認して、
    
    ```
    $ sudo yum install docker-ce-18.03.0.ce-1.el7.centos
    ```
    のような感じでインストール。


### dockerユーザーの管理

Dockerインストール後、既存のユーザをdockerグループに所属させるかdockerグループ所属のユーザを追加します。  

dockerグループへの参加は、

```
$ sudo adduser $USER -G docker
```

または、

```
$ sudo usermod -aG docker $USER
```

のような感じで行います。直接、/etc/groupを編集するというのも、個人的にはアリです。  
  

ユーザにグループ追加した後は、一回ログアウトして、再ログインします。
再ログイン後、groupsコマンドを実行すると「docker」が追加されていればdockerグループに参加しています。

```
$ groups
adm cdrom sudo dip plugdev lpadmin sambashare docker
```

### dockerデーモンの起動制御

* 起動
```$ sudo systemctl start docker```

* 停止
```$ sudo systemctl stop docker```

* 自動起動
```$ sudo systemctl enable docker```



## 動作確認

**$ docker run hello-world**を実行して、

```
・・・
Hello from Docker!
This message shows that your installation appears to be working correctly.
・・・
```

が表示されれば、正しくインストールできています。  
実際の「docker run hello-world」は、下記のように、結構たくさんのメッセージが表示されます。

```
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
5b0f327be733: Pull complete
Digest: sha256:07d5f7800dfe37b8c2196c7b1c524c33808ce2e0f74e7aa00e603295ca9a0972
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
```


# 基本的な使い方

## コンテナの起動と停止

### コンテナの起動

起動方式としては、起動と同時にコンテナのプロンプトに入るインタラクティブ起動と、Dockerホストのバックグラウンドで起動するバックグラウンド起動の2パターンがあります。
と言っても、コンテナ起動直後のプロンプトがコンテナ側かDockerホスト側かの違いだけです。


#### インタラクティブ起動（Debian:latestの例）

```
$ docker run -i -t debian /bin/bash
root@ea6e3a0da093:/#
root@ea6e3a0da093:/# cat /etc/debian_version
9.2
root@ea6e3a0da093:/# 
```

コンテナからは[Ctrl+p Ctrl+q]で抜けます。コンテナにもどる方法はバックグラウンドで起動してコンテナに入る時と同じです。


#### バックグラウンド起動（Debian:latestの例）

```
$ docker run -d -i -t debian /bin/bash
6a00bf7d180013246f04648d78c8cd5e25b397fe517a2507230ffb3702e61c7a
```

「-d」を付けるとバックグラウンドで起動します。

##### コンテナのプロンプトに入る方法

**$ docker ps**コマンドで起動中のコンテナのIDを調べて、**$ docker attach Container_ID**でコンテナのプロンプトに入ります。

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6a00bf7d1800        debian              "/bin/bash"         18 seconds ago      Up 17 seconds                           adoring_engelbart
$ docker attach 6a00bf7d1800
root@6a00bf7d1800:~# cat /etc/debian_version
9.2
root@6a00bf7d1800:~# [Ctrl+p Ctrl+q]、または、「exit」コマンドでコンテナを抜け、dockerホストのプロンプトに戻る
```


#### コンテナの停止

* コンテナの中から止める  
```
root@6a00bf7d1800:~# exit
```
* コンテナの外から止める  
**$ docker ps**コマンドで対象のコンテナIDを調べ、**$ docker stop Container_ID**で止めます。


#### 停止中のコンテナの再開

**$ docker start Container_ID**で再開します。　　
**$ docker run ...**ではないので注意です。  
ちなみに停止中のコンテナのコンテナIDは**$ docker ps -a**で調べられます。


#### 起動中・停止中のコンテナから別のコンテナを作成する

```
$ docker commit Container_ID 作成するコンテナ名
```


#### コンテナの削除

コンテナ本体は、

```
$ docker rmi Container_ID
```

で削除します。コンテナから起動したインスタンス？の削除は、

```
$ docker rm Container_ID
```

で削除します。  


#### コンテナのバックアップとリストア

* バックアップ  
```
$ docker save -o backup.tar.gz
```
* リストア  
```
$ docker load -i backup.tar.gz
```



# 参考サイト

* [Docker - Build, Ship, and Run Any App, Anywhere](https://www.docker.com/)