連載
» 2014年06月10日 18時00分 UPDATE

いまさら聞けないDocker入門(2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方 (1/3)

1.0がリリースされたDockerは「Docker Engine」となり、「Docker」は新たなWebサービス「Docker Hub」などを加えたプラットフォームの総称となった。今回はDocker Engineのインストール方法とdocker runなど主なコマンドの使い方を紹介。

[大瀧隆太,クラスメソッド株式会社]

ついにDocker 1.0がリリース! Docker Hubも発表。企業での採用が増えるか

「いまさら聞けないDocker入門」のインデックス

連載目次

 本日、Docker 1.0がリリースされました。開発元であるDocker社は公式ブログで、「エンタープライズでの活用に耐え得るものになった」と述べています。また、これと同時に企業向けサポートやトレーニング、コンサルティングも開始すると発表(参考:公式ブログ)。今後、企業での活用も増えることが予想されます。

 1.0のリリースに合わせて、Dockerの名称変更がアナウンスされました。前回の「アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識」で概要、特徴や動作環境を説明したDockerの本体となるソフトウェアは、今後「Docker Engine」と呼ばれることになります。これにDocker社が提供するWebサービスである「Docker Hub」、APIを介して連携するサードパーティのソフトウェア/サービスによるエコシステムを含めたDockerによるプラットフォーム全体の総称を「Docker」と呼ぶことになりました。

 Docker Hubは、今回発表されたWebサービスです。前回記事で紹介したAWS Elastic BeansTalkやGoogle Compute Engine、OpenShiftなどのクラウドサービスに「Docker Hub API」を介して自動デプロイする機能に加えて、GitHubやAtlassian Bitbucketなどのソースコード管理サービスと連携して自動ビルドする機能、GitHubやAWS、Jenkinsなどと連携するWebhooks機能、そしてDockerイメージを共有する「Docker Hub Registry」などで構成されます(参考:公式ブログ)。

docker2_05.jpg PLATFORM=Docker Engine+Docker Hub+APIs+Ecosystem(公式ブログより引用)

 このように、さまざまな発表があったDockerの使い方を解説する本連載ですが、今回は、Docker Engineのインストールとコンテナーの起動までを試します。

Docker Engineのインストール

 Docker EngineはLinuxで動作しますので、Linuxマシンを用意します。Windows PCやMacをお持ちであれば、VMware PlayerやVirtualBoxなどでLinux仮想マシンを用意するのがいいでしょう。また、Amazon EC2やさくらVPSなどを利用しても構いません。今回はUbuntu Server 14.04 LTS(Trusty Tahr)64bitで進めていきます。

 Ubuntuのaptには「docker.io」パッケージが提供されているので、apt-getコマンドでインストールします。RHELやCentOS 6ではEPELリポジトリに「docker-io」パッケージが、Amazon EC2のAmazon Linuxであれば「docker」パッケージが提供されています。

$ sudo apt-get install docker.io

 続いて、docker.ioサービスの自動起動を有効にしておきます。

$ sudo update-rc.d docker.io defaults

 インストールできたら、docker.io infoでDocker Engineの情報を確認しましょう。rootユーザーの権限が必要なため、ubuntuユーザーなどの場合はsudoコマンドの引数に指定します。

$ sudo docker.io info
Containers: 0
Images: 0
Storage Driver: devicemapper
 Pool Name: docker-8:1-262163-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 291.5 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 0.7 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.1
Kernel Version: 3.13.0-24-generic
WARNING: No swap limit support

 これで、インストールは完了です。

dockerコマンドのシンボリックリンク

 Ubuntu/Debianでは、別にdockerパッケージがある関係でパッケージ名およびコマンド名がdocker.ioになっています。コマンド名を指定しづらければ、以下のようにシンボリックリンクを設定しましょう。

$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

 以下の説明では、このシンボリックリンクが設定済みとしてdockerコマンドで記述します。

dockerコマンドの非rootユーザーでの実行

 dockerコマンドは、内部でDockerサーバー(後述)にアクセスするためのソケットファイル(/var/run/docker.sock)を使用します。このソケットファイルには一般ユーザーの書き込み権が与えられていないため、先ほどの例ではdockerコマンド実行のためにsudoコマンドによってrootユーザーの権限を付与していました。

 ソケットファイルはdockerグループのメンバーに書き込み権が設定されているので、dockerコマンドを実行するユーザーをdockerグループのメンバーに追加することで、root以外のユーザーでもsudoなしでdockerコマンドを実行できるようになります。

$ sudo gpasswd -a ubuntu docker
Adding user ubuntu to group docker
$
(ubuntuユーザーで再ログイン)
$ docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
  : 【略】
$

2015年9月29日追記

上記コマンド1行目のubuntuユーザーをdockerグループに追加する点について、読者の方よりセキュリティに懸念があるという指摘を頂きました。

確かにdockerグループはrootと同等の権限を持つため、グループに所属するユーザーの取り扱いには注意が必要です。以下のリンクを参考にしてください。


Docker Engineの構成

 Docker Engineは一般的なクライアント/サーバーシステムとして動作します。コンテナーの管理をDockerサーバーが、サーバーの操作をDockerクライアントが担います。

 Dockerサーバーはクライアントによる操作の他に、RESTful APIを持つことで、HTTPリクエストを発行できるさまざまなプログラムと連携したり、コンテナー管理をDockerクライアントとは別のプログラムで行ったりすることも可能です(参考:dockerでDashingを触ってみた - ようへいの日々精進 XP)。

 Dockerクライアント、サーバーの状態はdocker versionコマンドでバージョンと共に確認できます。

$ sudo docker version
Client version: 0.9.1
Go version (client): go1.2.1
Git commit (client): 3600720
Server version: 0.9.1
Git commit (server): 3600720
Go version (server): go1.2.1
Last stable version: 0.11.1, please update docker
$

Dockerのコンテナー管理のライフサイクル

 Dockerコンテナーは、元となるDockerイメージというテンプレートから作成します。Dockerコンテナーは実行中停止の状態があり、コンテナーで実行するプロセスの状態と連動します。

 例えば、プロセスが終了すればコンテナーも停止し、通常のLinuxのプロセス管理と同様にバックグラウンドで常時実行したり、場合によっては強制終了したりすることも可能です。

docker2_01.png

 コンテナー内でソフトウェアのインストールや設定変更などを行った後、そのコンテナーから同じデータを持つコンテナーをコピーするために新しいイメージを作成できます。そのため、Dockerコンテナーの管理はコンテナーの実行/停止と新たなイメージ作成の繰り返しと考えられます。

 また、Dockerコンテナーの変更とDockerイメージの作成は、Dockerfileというテキストファイルに変更内容を記述して「docker build」コマンドでバッチ的に行うことが可能です。こちらは、次回以降紹介します。

 開発環境でDockerイメージが完成したら、「Docker Hub Registry」をはじめとする「Dockerレジストリ」というDockerイメージを共有する仕組みを利用して本番環境へデプロイし、本番環境のDockerコンテナーとして実行します。

 Dockerレジストリへのデプロイは次回以降とし、ここからはDockerコンテナーの管理方法を順に見ていきます。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。