Dockerイメージは、コンテナーを実行するために必要な全てのディレクトリ/ファイルを含むアーカイブと、コンテナーのメタ情報を持ちます。一から自作することも可能ですが手間が掛かるので、Linuxディストリビューションごとに公開されている汎用のベースイメージ(Pre-built Image)を流用することが多いです。
多くのベースイメージはDocker Hub Registryで公開されていますので、そこからダウンロードするのが一般的です。
DockerレジストリからのDockerイメージのダウンロードは、docker pullコマンドを実行します。どのイメージにするかは、引数で{イメージ名}(Repository)と{タグ名}(Tag)で選択します。{タグ名}はGitなどと同様、Dockerイメージのバージョンを示します。
$ docker pull {イメージ名}:{タグ名}
初期設定では、Dockerレジストリとして「Docker Hub Registry」にアクセスするようになっており、Docker Hub Registryで公開されている多くのベースイメージには、最新版(latest)のタグが設定されています。
{イメージ名}はDocker Hub Registryで好みのイメージを検索し、{タグ名}は特別な要件がなければ、latestを指定しましょう。
ここでは例として、Ubuntu Linux Dockerイメージの最新版をダウンロードします。
$ docker pull ubuntu:latest Pulling repository ubuntu 99ec81b80c55: Download complete 511136ea3c5a: Download complete 5e66087f3ffe: Download complete 4d26dd3ebc1c: Download complete d4010efcfd86: Download complete $
ダウンロードしたDockerイメージは、レジストリのイメージと区別するために「ローカルキャッシュ」と呼ぶこともあります。このローカルキャッシュからDockerコンテナーを実行します。
ダウンロードしたDockerイメージ(ローカルキャッシュ)の一覧は、docker imagesコマンドで確認します。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest 99ec81b80c55 4 weeks ago 266 MB $
Dockerレジストリのイメージ名は、通常「ユーザー名/イメージ名」と先頭にユーザー名付け/で区切る形式と定められています。上記のubuntuのように、ユーザー名を持たないイメージはDocker Hubでは「トップレベルリポジトリ」と呼ばれ、Docker公式のものを指します(公式のDockerイメージにも、ユーザー名が付いているものがいくつかあります)。
DockerイメージからDockerコンテナーを作成、実行してみましょう。docker runコマンドで、コンテナーの新規作成と実行の両方を行います。
$ docker run [オプション] [--name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]
タグ名は省略できます。--nameオプションおよびコンテナー名を省略すると、英単語を組み合わせたランダムなコンテナー名がDockerコンテナーに設定されます。
-d:バックグラウンドで実行する(後述)。既定では、コンテナーをフォアグラウンドで実行するため、Webサーバーやアプリケーションサーバーなど常時実行するコンテナーで指定
-i:コンテナーの標準入力を開く。/bin/bashなどでコンテナーを操作する際に指定
-t:tty(端末デバイス)を確保する。/bin/bashなどでコンテナーを操作する際に指定
-p {ホストのポート番号}:{コンテナーのポート番号}:Dockerサーバーのホストとポートマッピングを構成
今回はお試しとしてubuntuイメージからubuntu1コンテナーを作成、端末を開きbashを実行してみます。
$ docker run -it --name ubuntu1 ubuntu /bin/bash root@f66e8ee71dab:/#
コンテナーでbashが実行され、プロンプトが表示されました。コンテナーを新規作成したにもかかわらず、ほとんど一瞬でコンテナーが起動しました。
この原因としては、Dockerコンテナーに含まれるディレクトリ/ファイルは元となるDockerイメージの差分のみが管理されることからコンテナー作成時のファイルコピーがほとんどないこと、ハイパーバイザー型の仮想マシンのようなOSの起動処理が不要なことが挙げられます。
これでコンテナー内で任意の操作ができます。今回は、Webサーバーの「nginx」をコンテナーにインストールしてみます。
root@f66e8ee71dab:/# apt-get install -y nginx :(略) root@f66e8ee71dab:/# dpkg -l nginx Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=================================-=====================-=====================-======================================================================= ii nginx 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server root@f66e8ee71dab:/#
一通り操作したら、[Ctrl]+[d]キーでbashプロセスを終了しましょう。プロセスの終了とコンテナーの停止は連動するため、この時点でコンテナーubuntu1は停止状態になります。
Copyright © ITmedia, Inc. All Rights Reserved.