ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方:いまさら聞けないDocker入門(2)(1/3 ページ)
1.0がリリースされたDockerは「Docker Engine」となり、「Docker」は新たなWebサービス「Docker Hub」などを加えたプラットフォームの総称となった。今回はDocker Engineのインストール方法とdocker runなど主なコマンドの使い方を紹介。
ついにDocker 1.0がリリース! Docker Hubも発表。企業での採用が増えるか
今回の主な内容
- Docker Engineのインストール
- Docker Engineの構成
- Dockerのコンテナー管理のライフサイクル
- Dockerイメージをダウンロードする「docker pull」コマンド
- ダウンロードしたDockerイメージの一覧を確認する「docker images」コマンド
- 補足:Dockerレジストリのイメージ名
- Dockerコンテナーを作成・実行する「docker run」コマンド
- Dockerコンテナーの一覧を取得する「docker ps」コマンド
- Dockerイメージを作成する「docker commit」コマンド
- Dockerコンテナーのバックグラウンドでの実行
- Dockerコンテナーを停止する「docker stop」コマンド
- Dockerコンテナーを削除する「docker rm」コマンド、イメージを削除する「docker rmi」コマンド
- Dockerコンテナーを再実行する「docker start」コマンド
- 次回はDockerfileファイルとdocker buildによる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」などで構成されます(参考:公式ブログ)。
このように、さまざまな発表があった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のプロセス管理と同様にバックグラウンドで常時実行したり、場合によっては強制終了したりすることも可能です。
コンテナー内でソフトウェアのインストールや設定変更などを行った後、そのコンテナーから同じデータを持つコンテナーをコピーするために新しいイメージを作成できます。そのため、Dockerコンテナーの管理はコンテナーの実行/停止と新たなイメージ作成の繰り返しと考えられます。
また、Dockerコンテナーの変更とDockerイメージの作成は、Dockerfileというテキストファイルに変更内容を記述して「docker build」コマンドでバッチ的に行うことが可能です。こちらは、次回以降紹介します。
開発環境でDockerイメージが完成したら、「Docker Hub Registry」をはじめとする「Dockerレジストリ」というDockerイメージを共有する仕組みを利用して本番環境へデプロイし、本番環境のDockerコンテナーとして実行します。
Dockerレジストリへのデプロイは次回以降とし、ここからはDockerコンテナーの管理方法を順に見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.