@hihihiroroのLog

ダラダラと。本ブログは、個人の意見であり、所属会社とは関係がありません。

Docker Advent Calendar 2015 に投稿してみた

Docker Advent Calendar 20156日目に記事を投稿してみました。

今年は、仕事でDocker の環境を構築し、Docker で動くアプリケーションもリリースできたので今年はなんとなくDocker の年かなと思いました。

来年は、もう少し違う技術についてもなにか書けるようになりたいと思います。 また、社外での発表もできるようになってみたいですまる。

Docker ハンズオン - 基本コマンド編

Docker ハンズオンの資料を作成したので投稿してみました。 ハンズオンは探せばいくらでも出てきますが、自分が説明する機会ができたので自分でも作ってみようと思って書いてみました。

ハンズオンの中身

ここではハンズオンの内容をタイトルだけ書いてみました。 詳しい、実施方法はここでご確認ください。

  • Docker のインストール
  • Docker の起動
  • イメージ取得・確認
  • コンテナの起動・プロセスの確認・停止
  • コンテナの詳細情報確認
  • コンテナの削除
  • イメージの変更・保存
  • イメージの削除
  • Dockerfile でコンテナ構築
  • レポジトリへのイメージ登録

初めてDocker コマンドを実行する人を対象にしました。 もし興味のある方がいたら、実施していただきコメントなり指摘なりをいただけると幸いです。 今回はコマンドをたたいてもらうことを中心のハンズオンにしました。 次回はDocker Compose、Docker Swam らへんを中心としたハンズオンを作成したいと思っています。

以下では、実行して気になったことを。

yum -y -q install docker-engine

今回のハンズオンではCentOS7.1.1503 にDocker 1.8.1DockerProject配布のDocker をインストールしています。 Docker 1.7.1RHEL/CentOS配布のDocker の場合、/etc/systemd/system/multi-user.target.wants/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
ExecStart=/usr/bin/docker -d $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
MountFlags=slave

[Install]
WantedBy=multi-user.target

だったのですが、Docker 1.8.1DockerProject配布のDocker の場合

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/docker daemon -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

だいぶシンプルです。 ただ、ここで気になるのはEnvironmentFile が定義されなくなっていることです。 /etc/sysconfig/docker を見ると

# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker daemon

other_args=""

other_args という変数が用意されているのですが、今のままでは何を書いても読み込まれることはありません。 例えば、Docker でOverlayFS を使用しようと想った際には、/etc/systemd/system/multi-user.target.wants/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/docker daemon -H fd:// -$other_args
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

と書き換えた後に、/etc/sysconfig/docker

# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker daemon

other_args="-s overlay"

とか書きなおし、Docker を起動することで対応しました。 ただ、これが正解かどうか分からないので、もし分かる人がいたら教えて下さい。 ※コメントを頂いて、Docker のversion. の問題ではなく、配布元の違いでした。訂正させていだきました。

第1回 Docker社公認トレーニングコース を受けてきた

クリエーションライン株式会社 が主催したDocker社公認トレーニングコースを受講してきました。講習内容は以下の内容でした。

コンテンツ

Day 1

  1. コンテナ入門(Introduction to containers)
  2. Dockerの概念と用語(Docker concepts and terms)
  3. Dockerのインストール(Installing Docker)
  4. イメージ入門(Introduction to images)
  5. コンテナの実行と管理
  6. イメージの構築(Building images)
  7. イメージの管理と配布
  8. コンテナのボリューム(Container volumes)
  9. コンテナのネットワーク(Container networking)
  10. 継続的インテグレーションにおけるDocker(Docker in continuous integration)

Day 2

  1. Dockerデーモンの制御(Controlling the Docker daemon
  2. セキュリティとTLS(Security and TLS
  3. 自分用レジストリのセットアップ(Setting up your own Registry)
  4. Dockerトラステッド・レジストリ(Docker Trusted Registry)
  5. Dockerマシン(Docker Machine)
  6. Dockerスウォーム(Docker Swarm)
  7. マイクロサービス・アプリケーションの構築(Building micro service applications)
  8. Dockerコンポーズ(Docker Compose)

受講の感想

内容は、docker が出てくるまでの歴史の勉強、docker の説明、実際にdocker コマンドを触ってみるハンズオン、個人用レジストリの構築、docker のためのセキュリティ(さらっと)、docker Machine、docker Swarm、docker Compose の実践と大量の内容を6時間×2日で教えてもらい自分でも作業するハードな内容でした。

レーニング環境が与えられ、ハンズオンで試せると言っても、なぜ動いているのか、設定はこれであっているのかを考えるには短い時間でした。

社内でハンズオン形式の勉強会を実施したいと思っているので、資料を作成次第投稿をしていきたいと思う。

紹介

第2回 Docker社公認トレーニングコースが10月7日(水),8日(木)に開催される予定だそうです。(日にちは変更になることがあるそうです。) もし興味のある人は参加を考えてみたら良いと思います。

宣伝

Dockerfile に似た内容があるから気になったのを自分なりにまとめているので読んでいただけると嬉しいです。 ※ 間違っている箇所の指摘などがあればいただけると大変嬉しいです。

COPY vs ADD CMD vs ENTRYPOINT

戯言

Docker は構築の際や運用の際にストレージやネットワークのことも考えるのでインフラレイヤーのことも勉強しないとな、したいなと思います。