@hihihiroroのLog

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

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. の問題ではなく、配布元の違いでした。訂正させていだきました。