Ubuntu Weekly Recipe

第481回CockpitとsnapでDockerコンテナをお手軽に管理する

第480回ではウェブブラウザーベースのシステム管理ツールであるCockpitを紹介しました。このCockpitにはDockerコンテナや仮想マシンを管理するUIも備わっています。今回はCockpitを使って、Dockerコンテナを操作する方法を紹介しましょう。

UbuntuでDockerをインストールするもうひとつの方法

さらに遡ること半年弱、第458回では「UbuntuでDocker再入門」と題してUbuntuでDockerをインストールするいくつかの方法を紹介しました。今一度、その方法を列挙しておきましょう。

  • Docker公式のdocker-ceパッケージをインストールする方法
  • Ubuntu公式リポジトリにあるdocker.ioパッケージをインストールする方法
  • snapを使ってdockerパッケージをインストールする方法

第458回ではそれぞれの選択基準を次のように紹介しました。

Docker公式のdocker-ceパッケージ
常に最新版のDockerを使いたい場合[1]
Ubuntuリポジトリのdocker.ioパッケージ
最新版であることにこだわりがない、LXD上でDockerを使いたい場合
snap版のdockerパッケージ
snapの技術的デモという位置づけ、通常は使用しない

Docker公式パッケージについてはインストール手順が若干変わっています。主にリポジトリのURL、公開鍵の取得先、それにパッケージ名が変更点です。今から新規にインストールするのであれば、この手順にあわせておきましょう第458回も新しい手順に修正済みです⁠⁠。また、Ubuntuリポジトリのdocker.ioパッケージについては大きな変更点はありません。CanonicalがKubernetesにもリソースを注いでいるため、今後もそれなりのメンテナンスはされるはずです。

そしてsnap版のパッケージについては「通常は使用しない」ということで前回は紹介を省きました。しかしながらその位置づけが現在では大きく変わっています。まずパッケージの提供元がDocker, Inc.になりました。ソースパッケージもGitHubのDockerチームのリポジトリで管理されています[2]⁠。その結果、特にリポジトリを追加することなく比較的新しいバージョンを試せます。ただしLXD上ではまだきちんと動くようにはなっていません。Ubuntu CoreのようなRaspberry Pi2やNextcloud Box上で動くマシンでもDockerを試したい時に、有力な選択肢のひとつになるはずです。

そこで、実際にsnap版のDockerをインストールする方法も紹介しておきましょう。まずsnap版のDockerにはいくつかのバージョンがあります。普通にインストールするとstableの「17.06.0-ce-1」がインストールされます[3]⁠。またまもなく「17.06/candidate」チャンネルには、Docker本家としては既にリリースされているリリース候補版の「17.06.1-ce-rc1」が用意される予定です。これは17.06.1-ceが正式にリリースされたら、snapリポジトリのstableチャンネルへと移行するはずです。

$ snap info docker
name:      docker
summary:   "The docker app deployment mechanism"
publisher: docker-inc
contact:   snappy-devel@lists.ubuntu.com
description: |
  Docker for snappy.

  This snap allows you to use the full capabilities of docker on snappy.

  In order to use 'docker build', 'docker save' and 'docker load', you need to
  place your dockerfile within $HOME. All files that you want docker to access
  to must be within this path.

  You may also use the 'docker-privilege' command to allow you to use 'docker
  run --privileged'. Because docker is unencumbered on snappy, it is recommended
  that you follow the Docker project's recommendations for using docker
  securely.
channels:
  latest/stable:    17.06.0-ce-1   (155) 43MB -
  latest/candidate: 17.06.1-ce-rc1 (165) 43MB -
  latest/beta:      17.03.1-ce-0   (102) 37MB -
  latest/edge:      17.06.1-ce-rc1 (165) 43MB -

  17.03/stable:     17.03.2-ce-1   (159) 42MB -
  17.03/candidate:  17.03.2-ce-1   (159) 42MB -
  17.03/edge:       17.03.2-ce-1   (159) 42MB -

  17.06/stable:     17.06.0-ce-1   (155) 43MB -
  17.06/candidate:  17.06.1-ce-rc1 (165) 43MB -
  17.06/edge:       17.06.1-ce-rc1 (165) 43MB -

今回はstableの「17.06.0-ce-1」を使います。

$ snap install docker
$ docker.help
Docker snap: Docker Linux container runtime.

Due to the confinement issues on snappy, it requires some manual setup to make docker-snap works on your machine.
We'll take you through the steps needed to set up docker snap work for you on ubuntu core and ubuntu classic.

On Ubuntu classic, before installing the docker snap,
please run the following command to add the login user into docker group.
    sudo addgroup --system docker
    sudo adduser $USER docker
    newgrp docker

On Ubuntu Core 16, after installing the docker snap from store,
you need to connect the home interface as it's not auto-connected by default.
    sudo snap connect docker:home :home

Then have fun with docker in snappy.

一般ユーザーの権限でdockerコマンドを実行するためには、上記のように別途dockerグループを作成し、そのユーザーを追加する必要があります。ヘルプどおりにインストールする前でもかまいませんが、インストールしたあとに作成した場合であっても、一度デーモンを再起動すれば問題ありません。

$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker
  (もしくはログインしなおす)
$ sudo systemctl restart snap.docker.dockerd

第458回のようにProxyの設定を行う場合、snapパッケージではサービスファイルのパスが異なるため注意してください。次のように設定します。

$ sudo mkdir -p /etc/systemd/system/snap.docker.dockerd.service.d
$ cat <<EOF | sudo tee /etc/systemd/system/snap.docker.dockerd.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=https://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart snap.docker.dockerd
$ systemctl status snap.docker.dockerd.service
● snap.docker.dockerd.service - Service for snap application docker.dockerd
   Loaded: loaded (/etc/systemd/system/snap.docker.dockerd.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/snap.docker.dockerd.service.d
           └─proxy.conf

あとの使い方は普通のDockerと同じです。

ちなみにdocker.composeコマンドやdocker.machineコマンドも一緒にインストールされます。コマンド名がハイフンではなくピリオドになっていることに注意してください。

CockpitのDockerインターフェース

第480回の手順に従ってCockpitをインストール済みであれば、cockpit-dockerパッケージをインストールするだけでDockerインターフェースが追加されます。

Debianパッケージ版のDockerをインストールしている場合:
$ sudo apt install cockpit-docker

snapパッケージ版かパッケージ管理システムを使わずにDockerをインストールした場合:
$ sudo apt install --no-install-recommends cockpit-docker

cockpit-dockerパッケージは推奨パッケージとしてdocker.ioもしくはdocker-engineパッケージ、docker-ceを指定しています。つまり--no-install-recommendsを指定しないと、docker.ioパッケージ(UbuntuリポジトリのDockerパッケージ)かdocker-engineパッケージ(バージョンルールが変わる前のDocker公式パッケージ)かdocker-ceパッケージ(バージョンルールが変わったあとのDocker公式パッケージ)のいずれかをインストールしようと試みます。これらのいずれかのパッケージを使っているのであれば--no-install-recommendsは不要です。snap版のパッケージを使っている場合もしくはソースから自分でDockerをビルドしてインストールした場合はこのオプションが必要になります。

これだけでCockpitにインターフェースが追加されます。実際にログインしてみましょう。

図1 サイドペインに「Containers」が追加された
画像

「Containers」では、コンテナの実行中のリソース使用量の表示やコンテナ・イメージの管理を行えます。Dockerをインストールした直後であれば、何もない状態のはずです。⁠Get new image」をクリックして、まずはイメージを取得(pull)しましょう。

図2 イメージの検索ダイアログ
画像

ダイアログで検索し、取得したいイメージをクリックします。左下のタグフィールドには取得するイメージのタグが自動で入力されます。別のタグのイメージを取得したい場合は、適宜変更してください。⁠Download」ボタンで取得を開始します。

図3 イメージ取得の進捗が表示される
画像
図4 取得が完了するとRunアイコンが現れる
画像

イメージの名前の部分をクリックすると、イメージの管理画面が表示されます。イメージを削除したい場合はこの管理画面に遷移してください。またイメージフィールドにはRunアイコン(再生ボタン)が存在します。このボタンをクリックすると、このイメージを起動(run)します。

図5 起動するコンテナの詳細設定
画像

起動時のオプションも管理インターフェースから指定可能です。具体的にはdocker image inspect イメージで表示されるオプションを一通り設定できます。また各フィールドには初期設定値が入力されていますので、このまま起動することも可能です。

RStudio Serverを起動するtokyor/rstudioコンテナ」の場合、Portsの8787をホストの適当なポートに指定しておけば「http://(cockpitが動いているマシンのアドレス):(指定したポート番号⁠⁠」でRstudio Serverにアクセスできるようになります。またVolumesを適切なディレクトリにマウントしておけば、RStudio Server上の編集結果をローカルディスクに残せるでしょう。⁠Restart Policy」はコンテナが終了したときに再起動するかどうかを設定します。RStudio Serverのようなデーモンの場合は、再起動するように設定してもいいかもしれません。

Runボタンでコンテナが起動します。

図6 Containersに起動したコンテナが追加された
画像
図7 コンテナの詳細画面
画像

詳細画面では、起動したコンテナの情報やコンソールログ、リソースの情報が表示されます。またコンテナの停止や再起動、削除もこの画面から設定可能です。一時的なリソース制限の変更も可能なので、特定のコンテナが暴走したときにも便利でしょう。

表示されるIPアドレスはコンテナそのもののIPアドレスです。このアドレスに直接アクセスできる環境であれば、つまりDockerデーモンが動いているホストマシン上からアクセスするのであれば、このIPアドレスをウェブブラウザーに入力すればRStudio Serverの画面を表示できます。また、Portsフィールドにあるように、ポート8787をホストマシンのポート8787にマップしているので、ホストマシンの外からホストマシンのアドレスを指定することでもアクセス可能です。

実際にウェブブラウザーのアドレスフィールドに「http://(cockpitが動いているマシンのアドレス):(指定したポート番号⁠⁠」を入力してアクセスしてみましょう。

図8 RStudio Serverが動いている!
画像

このようにCockpitを使えば、CUIでdockerコマンドを打つことなくDockerコンテナを管理できます。

おすすめ記事

記事・ニュース一覧