第3章 Red Hat CDK Vagrant Box との対話

vagrant up コマンドを使用して Red Hat CDK Vagrant box を作成し、設定した後に、vagrant コマンドを使用して実行中の仮想マシンと対話できます。vagrant-adbinfo プラグインを使用すると、Vagrant box 内で実行される Docker サービスと対話できるようにホストのワークステーションをセットアップできます。

3.1. Vagrant コマンドラインインターフェースの使用

Vagrant のコマンドラインインターフェースは、実行中の仮想マシンを照会し、仮想マシンとそれらの box の両方を管理するためのコマンドの基本セットを提供します。

環境の状態の照会
vagrant status
すべてのアクティブな環境の状態の照会
vagrant global-status
box で実行されているシステムの停止
vagrant halt
box のシステムの初期状態へのリセット
vagrant destroy
box のシステムのシャットダウンなしの一時停止
vagrant suspend
一時停止システムの再開
vagrant resume
実行中のシステムへのログイン
vagrant ssh

上記およびその他のコマンドの詳細については、Vagrant ドキュメントの「Command-Line Interface」を参照してください。

3.2. adbinfo Vagrant プラグインの使用

vagrant-adbinfo プラグインを使用すると、仮想マシンで実行される Docker サービスについての情報を取得できます。以下のコマンドを実行してホストシステム (ご使用の開発ワークステーション) に設定する必要のある環境変数を表示し、ホストベースのツール (Eclipse IDE、docker コマンド、または OpenShift の oc コマンドなど) を有効にして仮想マシンの Docker デーモンと対話できます。

~]$ vagrant adbinfo
# Set the following environment variables to enable access to the
# docker daemon running inside of the vagrant virtual machine:
export DOCKER_HOST=tcp://192.168.121.195:2376
export DOCKER_CERT_PATH=/home/john/cdk/components/rhel/rhel-ose/.vagrant/machines/default/libvirt/.docker
export DOCKER_TLS_VERIFY=1
export DOCKER_MACHINE_NAME=081d3cd
# run following command to configure your shell:
# eval "$(vagrant adbinfo)"

Linux で以下のコマンドを実行し、必要な環境変数を設定します。

~]$ eval "$(vagrant adbinfo)"

3.3. Docker サービスの使用

Red Hat CDK 仮想マシンにログインすると (vagrant ssh コマンドを使用)、Red Hat CDK box の初期化に使用した Vagrantfile に基づいて複数の異なるサービスが事前に設定された状態で実行されます。Docker サービスはいずれの場合でも実行され、このサービスは仮想マシンの起動直後に使用できます。Docker サービスの使用およびこのサービスとの対話は仮想マシン外のホストワークステーションから可能ですが (Eclipse IDE で提供される統合 Docker サポートなどを使用)、このセクションでは、仮想マシン内のコマンドラインから Docker サービスの使用を開始するための数多くの基本的な docker コマンドを紹介します。

Docker サービスの詳細な説明については、『Red Hat Enterprise Linux Atomic Host 7 コンテナーの使用ガイド』の「Docker フォーマットのコンテナーイメージの使用方法」の章を参照してください。

3.3.1. Docker サービスについての情報の取得

docker コマンドは、Docker サービスやこのサービスが実行される環境、ならびに利用可能なリソースについての情報を取得するためのいくつかのサブコマンドを提供します。また、このサービスが管理するイメージおよびコンテナー、および事前に設定されたレジストリーから利用できるイメージのサービスを照会できます。デフォルトで、Red Hat CDK の Docker サービスは Docker Hub (docker.io) および Red Hat Atomic Registry (registry.access.redhat.com) の両方からイメージをダウンロードし、使用できます。

3.3.1.1. Docker 環境についての情報収集

以下のコマンドを使用して、Docker サービスおよび稼働中の環境についての情報を取得します。

Docker サービスのバージョンの確認

docker version コマンドを実行し、Docker クライアントおよび Docker サーバーの両方のバージョンを確認します。

~]$ docker version
Client:
 Version:      1.8.2
 API version:  1.20
 Package Version: docker-1.8.2-8.el7.x86_64
 Go version:   go1.4.2
 Git commit:   a01dc02/1.8.2
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.2
 API version:  1.20
 Package Version:
 Go version:   go1.4.2
 Git commit:   a01dc02/1.8.2
 Built:
 OS/Arch:      linux/amd64
システムおよびリソースについての情報の表示

docker info コマンドを実行して、ホストシステム (この場合は、Vagrant が管理する仮想化 Red Hat Enterprise Linux インスタンス)、仮想化リソースの利用、基本的なネットワーク情報、および管理されるコンテナーおよびイメージの数についての情報を表示します。

~]$ docker info
Containers: 10
Images: 32
Storage Driver: devicemapper
 Pool Name: VolGroup00-docker--pool
 Pool Blocksize: 524.3 kB
 Backing Filesystem: extfs
 Data file:
 Metadata file:
 Data Space Used: 1.695 GB
 Data Space Total: 7.818 GB
 Data Space Available: 6.123 GB
 Metadata Space Used: 786.4 kB
 Metadata Space Total: 67.11 MB
 Metadata Space Available: 66.32 MB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Library Version: 1.02.107-RHEL7 (2015-10-14)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.2 (Maipo)
CPUs: 2
Total Memory: 993 MiB
Name: localhost.localdomain
ID: 5BXK:XDRV:CYAY:RIWW:NGGU:HN77:KATM:LQ4I:FTF6:5TNX:3U5P:7YK6
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

3.3.1.2. コンテナーおよびイメージについての情報収集

以下のコマンドを使用して、システム上のイメージおよびコンテナーについての情報を取得します。

管理イメージの一覧表示

docker images コマンドを実行して、ローカルレジストリーで利用できるイメージの一覧を表示します。

~]$ docker images
REPOSITORY                                                 TAG       IMAGE ID      CREATED      VIRTUAL SIZE
docker.io/prom/haproxy-exporter                            latest    559b63e1147d  4 weeks ago  23.56 MB
registry.access.redhat.com/openshift3/ose-haproxy-router   v3.1.0.4  6a3fe65c07f1  6 weeks ago  410.5 MB
registry.access.redhat.com/openshift3/ose-sti-builder      v3.1.0.4  8b1293f81020  6 weeks ago  395.6 MB
registry.access.redhat.com/openshift3/ose-deployer         v3.1.0.4  9580a28b3e18  6 weeks ago  395.6 MB
registry.access.redhat.com/openshift3/ose                  v3.1.0.4  62208f151337  6 weeks ago  395.6 MB
openshift                                                  latest    62208f151337  6 weeks ago  395.6 MB
registry.access.redhat.com/openshift3/ose-docker-registry  v3.1.0.4  eb7a879607cf  6 weeks ago  419.9 MB
registry.access.redhat.com/openshift3/ose-pod              v3.1.0.4  758ab73ad286  6 weeks ago  327.4 MB
管理コンテナーの一覧表示

docker ps コマンドを実行して、実行中のコンテナーの一覧を表示します。--all または -a パラメーターを追加して、利用可能なすべてのコンテナーを一覧表示します (実行中のコンテナーに限らない)。以下の出力例にあるように、 Red Hat CDK には起動直後に実行されるいくつかのコンテナーがあります。これらのコンテナーは Red Hat CDK が提供するサービスの一部を提供するので、これらを停止したり削除したりすることはできません。以下の例は、OpenShift サービスを搭載したコンテナーを示しています。

--format パラメーターを指定して、個別のコンテナーについて表示させたい情報を指定します (利用可能なプレースホルダーの一覧については、docker-ps(1) man ページを参照してください)。以下は例になります。

~]$ docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"
CONTAINER ID  IMAGE                                    COMMAND                 STATUS
79dbe220fe97  openshift3/ose-haproxy-router:v3.1.0.4   "/usr/bin/openshift-r"  Up 2 hours
bd496c95575e  prom/haproxy-exporter:latest             "/bin/go-run -haproxy"  Up 2 hours
09101cf1e40b  openshift3/ose-pod:v3.1.0.4              "/pod"                  Up 2 hours
59b3323bed2b  openshift3/ose-docker-registry:v3.1.0.4  "/bin/sh -c 'REGISTRY"  Up 2 hours
7889628047b1  openshift3/ose-pod:v3.1.0.4              "/pod"                  Up 2 hours
7506009d9e1c  openshift                                "/usr/bin/openshift s"  Up 2 hours
コンテナーリソースの使用についての情報の表示

docker stats <container> コマンドを実行して、特定の実行中のコンテナーのリソース使用の統計を表示するライブ出力を表示します。以下は例になります。

~]$ docker stats openshift
CONTAINER    CPU %     MEM USAGE/LIMIT     MEM %    NET I/O
openshift    0.00%     65.65 MB/1.041 GB   6.30%    0 B/0 B
コンテナーおよびイメージ設定についての詳細情報の表示

docker inspect <container> コマンドを実行して、コンテナーまたはイメージについてのローレベルの情報を JSON 形式で表示します。同じ名前のコンテナーとイメージがある場合には、--type パラメーターを使用して、コンテナー (デフォルト) または イメージ についての情報を表示するかどうかを指定します。

--format パラメーターを指定して、表示させたい出力部分を指定します (出力例については、docker-inspect(1) man ページを参照してください)。たとえば、以下の形式を定義して、コンテナーによって公開されるネットワークポートを一覧表示します。

~]$ docker inspect --format='{{.Config.ExposedPorts}}' openshift
map[8443/tcp:{} 53/tcp:{}]

3.3.2. 新規 Docker フォーマットのコンテナーイメージの取得

コンテナーを作成するために使用する既存イメージは、2 つの事前に設定されたリポジトリー (Docker Hub (docker.io) および Red Hat Atomic Registry (registry.access.redhat.com)) のいずれかからダウンロード (取得) するか、またはローカルファイルからインポートできます。

レジストリーを使用したイメージの検索

docker search <search-term> コマンドを実行して、事前に定義されたレジスターでイメージを検索します。たとえば、名前または名前空間に文字列 rhscl を含むイメージを検索するには、以下のコマンドを使用します。

~]$ docker search rhscl
INDEX        NAME                                                           DESCRIPTION                                     STARS  OFFICIAL  AUTOMAT
docker.io    docker.io/rhscl/mongodb-26-centos7                             A Centos7 based MongoDB v2.6 image for use...   0
redhat.com   registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7  Developer toolset toolchain                     0
redhat.com   registry.access.redhat.com/rhscl/httpd-24-rhel7                Apache HTTP 2.4 Server                          0
redhat.com   registry.access.redhat.com/rhscl/mariadb-100-rhel7             MariaDB 10.0 SQL database server                0
redhat.com   registry.access.redhat.com/rhscl/mongodb-26-rhel7              MongoDB 2.6 NoSQL database server               0
redhat.com   registry.access.redhat.com/rhscl/mysql-56-rhel7                MySQL 5.6 SQL database server                   0
redhat.com   registry.access.redhat.com/rhscl/nginx-16-rhel7                Nginx 1.6 server and a reverse proxy server     0
[...]
レジストリーからのイメージのダウンロード

docker pull <image> コマンドを実行して、ローカルで使用するために指定されたイメージをシステムにダウンロード (プル) します。イメージの名前のみを指定することは可能ですが、取得元のレジストリーおよび特定のイメージが公開される名前空間を指定するとなお望ましいと言えるでしょう。以下の順序に基づく命名規則が使用されます。 [registry/][namespace/]name

たとえば、Red Hat Atomic Registry から Red Hat Developer Toolset ツールチェーンコンポーネントを使ってイメージを取得するには、以下のコマンドを使用します。

~]$ docker pull registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7
Using default tag: latest
68f6775524af: Download complete
6c3a84d798dc: Download complete
Status: Downloaded newer image for registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7:latest

~]$ docker images registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7
REPOSITORY                                                     TAG     IMAGE ID      CREATED      VIRTUAL SIZE
registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7  latest  68f6775524af  7 weeks ago  365.5 MB
ファイルからのイメージのロード

docker load < file.tar コマンドを実行してイメージをローカルファイルの file.tar からロードします。デフォルトで docker pull コマンドはイメージデータを標準入力からロードします。ファイルからイメージをロードするには、--input または -i パラメーターを使用します。たとえば、docker save コマンドを使用して tar ファイルに事前に保存された Red Hat Developer Toolset ツールチェーンイメージをロードするには、以下のコマンドを使用します。

~]$ docker load -i devtoolset.tar

3.3.3. コンテナーの使用

以下のコマンドを使用して、コンテナーの起動、停止、または削除を実行するか、またはコンテナー内からアプリケーションを実行します。

新規コンテナーの起動およびコマンドの実行

docker run <image> <command> コマンドを実行し、新規コンテナーをイメージから起動し、指定されたコマンドを実行します。--name パラメーターを使用してコンテナーの名前を指定し、Docker サービスがランダムな名前をコンテナーに割り当てることを防ぎます。たとえば、Red Hat Developer Toolset ツールチェーンから作成されたコンテナーで uname -a コマンド (-a は出力を表示) を実行するには、以下のコマンドを使用します。

~]$ docker run --name devtoolset registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7 uname -a
Linux 22b819dec3f1 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux

~]$ docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Command}}\t{{.Status}}"
CONTAINER ID  NAMES       COMMAND     STATUS
22b819dec3f1  devtoolset  "uname -a"  Exited (0) 2 seconds ago
[...]
既存コンテナーの実行

docker start -i <container> コマンドを使用して、直前の例で起動したコンテナーを実行します (--interactive または -i パラメーターはコンテナーの標準入力を現在のシェルに割り当てるようにします。つまり、コンテナーで実行された出力が表示されるようにします):

~]$ docker start -i devtoolset
Linux 22b819dec3f1 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
新規コンテナーの起動およびコンテナーのシェルへの切り替え

docker run -ti <image> bash コマンドを実行し、イメージから新規コンテナーを起動し、コンテナー内のインタラクティブシェルに切り替えます。--interactive または -i パラメーターを --tty または -t パラメーターと共に使用し、Bash シェルが実行される疑似 TTY (pseudo-TTY) を割り当てます。以下は例になります。

~]$ docker run -it registry.access.redhat.com/rhscl/devtoolset-4-toolchain-rhel7 bash
bash-4.2$ uname -a
Linux 5e224c8c3878 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
bash-4.2$ exit
exit

~]$ docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Command}}\t{{.Status}}"
CONTAINER ID  NAMES       COMMAND     STATUS
5e224c8c3878  devtoolset  "uname -a"  Exited (0) 2 seconds ago
[...]
コンテナーの削除

docker rm <container> コマンドを実行して、1つ以上のコンテナーを削除し、ホストのリソースを解放します。たとえば、直前の例で作成されたコンテナーを削除するには、以下のコマンドを使用します。

~]$ docker rm devtoolset
devtoolset

~]$ docker ps -a | grep devtoolset

3.4. その他のリソース

  • 利用可能な docker コマンドの一覧およびそれらの機能の詳細説明については、docker(1) man ページの COMMANDS セクションを参照してください。
  • Red Hat Enterprise Linux および Red Hat Atomic プラットフォームの使用および管理についての詳細は、『コンテナーの使用ガイド』を参照してください。