Dockerのチュートリアルを通してDockerに触れてみます
公式ページの覚書および作業メモです

環境

vagrant 1.8.6
docker 1.12.3
centos 7

Dockerではじめよう


技術者でない人も、チュートリアルのシンプルなタスクをこなすうちにDockerの基本的な特徴を学べるよ

学ぶこと

チュートリアル全体を通して学ぶことリスト
今回は1と2のさわりまで

  1. Dockerのインストールの仕方
  2. コンテナの中でイメージを動かす方法
  3. Docker Hubでのイメージのあさり方
  4. コンテナに好きなイメージを作って動かす方法
  5. Docker Hubアカウントとイメージリポジトリ作成の方法
  6. イメージの作り方
  7. Docker Hubへのイメージプッシュのやり方

問題なくすすめるために、自分勝手にうろちょろして進めないでSTEPに従って進めなさい。45分位で終わるから。と。

システム要件

・64-bit OS
・version 3.10 or higher of the Linux kernel.

### kernel versionのチェック ###
# uname -r
3.10.0-327.13.1.el7.x86_64

Docker Engineをインストールしよう

方法は2つ
1.yumで。
2.curlで。(yumで実行されるインストールスクリプトを実行している)

1.yumで。

sudoでコマンド実行可、あるいは、rootになれるようにしておく。
パッケージのアップデート

$ sudo yum update

yumレポジトリの追加

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

Dockerパッケージのインストール

$ sudo yum install docker-engine
Installing:
 docker-engine                     x86_64            1.12.3-1.el7.centos               dockerrepo             19 M
Installing for dependencies:
 audit-libs-python                 x86_64            2.4.1-5.el7                       base                   69 k
 checkpolicy                       x86_64            2.1.12-6.el7                      base                  247 k
 docker-engine-selinux             noarch            1.12.3-1.el7.centos               dockerrepo             28 k
 libcgroup                         x86_64            0.41-8.el7                        base                   64 k
 libseccomp                        x86_64            2.2.1-1.el7                       base                   49 k
 libsemanage-python                x86_64            2.1.10-18.el7                     base                   94 k
 libtool-ltdl                      x86_64            2.4.2-21.el7_2                    updates                49 k
 policycoreutils-python            x86_64            2.2.5-20.el7                      base                  435 k
 python-IPy                        noarch            0.75-6.el7                        base                   32 k
 setools-libs                      x86_64            3.3.7-46.el7                      base                  485 k

サービスの有効可

$ sudo systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Dockerデーモンの起動

$ sudo systemctl start docker
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2016-12-05 02:24:22 EST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 19193 (dockerd)
   Memory: 16.4M
   CGroup: /system.slice/docker.service
           tq19193 /usr/bin/dockerd
           mq19196 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docke...

Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.470367222-05:00" level=warni...und"
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.470765268-05:00" level=info ...rt."
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.488652368-05:00" level=warning m...
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.515356796-05:00" level=info ...lse"
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.718659894-05:00" level=info ...ess"
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.854272176-05:00" level=info ...ne."
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.854505454-05:00" level=info ...ion"
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.854526417-05:00" level=info ...12.3
Dec 05 02:24:22 localhost.localdomain dockerd[19193]: time="2016-12-05T02:24:22.862445109-05:00" level=info ...ock"
Dec 05 02:24:22 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

正常にインストールされたかの確認
コンテナにテストイメージを作成してみる

 $ sudo docker run --rm hello-world

Dockerのメッセージが表示されればオッケーっぽい
httpプロキシの設定や、異なるディレクトリorパーティションの設定を入れたい場合は以下参照


以上

2.curlで。

sudoでコマンド実行可、rootになれるようにしておく
パッケージのアップデート

$ sudo yum update

Dockerインストールスクリプトを実行

$ curl -fsSL https://get.docker.com/ | sh

サービスの有効可

$ sudo systemctl enable docker.service

Dockerデーモンの起動

$ sudo systemctl start docker

正常にインストールされたかの確認
コンテナにテストイメージを作成してみる

 $ sudo docker run --rm hello-world

以上

dockerグループの作成

DockerデーモンはTCPポートの代わりにUNIXソケットにバインドされている
デフォルトではUNIXソケットのオーナーはroot。その他ユーザもsudoでアクセス可能。
このために、Dockerデーモンは常にrootユーザーで実行される
dockerコマンドを実行する際にsudoの使用を避けるために、dockerという名前のunixグループを作成してユーザを追加する

注意:dockerグループに属するユーザはrootと等しい権限を持つことになる。
このことがシステムセキュリティにどう影響を及ぼすかは以下を参照

$ sudo groupadd docker
### すでにできてた
groupadd: group 'docker' already exists

dockerグループにユーザを追加

$ sudo usermod -aG docker vagrant
$ id vagrant
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),992(docker)

ログイン・ログアウトする
sudoなしでdockerコマンドを実行してdockerグループに属していることを確かめる

$ docker run --rm hello-world

インストールの確認

$ dokcer version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

何もつくっていないので空っぽ

$ dokcer ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Hello-Worldしてみる

$ docker run hello-world
 
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 Hub account:
 https://hub.docker.com

もう一度プロセス見てみる

$ docker ps -a
[vagrant@localhost ~]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
9a4917a92d1b        hello-world         "/hello"            About a minute ago   Exited (0) About a minute ago                       grave_liskov

-aオプションなしで実効すると、現在起動中のコンテナしか見えない。hello-worldは即終了しているので-aオプションをつけないと確認できない。

アンインストール

Dockerパッケージ一覧を表示

$ yum list installed | grep docker
docker-engine.x86_64             1.12.3-1.el7.centos            @dockerrepo
docker-engine-selinux.noarch     1.12.3-1.el7.centos            @dockerrepo

パッケージを削除

$ sudo yum -y remove docker-engine.x86_64
$ sudo yum -y remove docker-engine-selinux.noarch

このコマンドでは、ホスト上に作成したボリューム、イメージ、コンテナ、コンフィグは削除されない
すべてを削除するには

$ rm -rf /var/lib/docker

その他ファイルも削除、移動する

以上