Docker を IBM POWER Linux プラットフォーム上でビルドして使用する

Comments

Docker は、分散アプリケーションを作成、ビルド、リリース、実行するためのオープンソース・コンテナー・エンジン兼ツール・セットです。Docker コンテナー・エンジンは、Docker イメージとして作成されたアプリケーションを実行するためにあります。Docker イメージの共有を可能にするサービスには、Docker Hub レジストリーおよび Docker プライベート・レジストリーの 2 つがあります。開発者は Docker コマンド・ライン・ツールを使用して、Docker イメージをビルドしたり、Docker Hub レジストリーや Docker プライベート・レジストリーを操作したり、Docker イメージを Docker コンテナー・エンジン内のコンテナーとしてインスタンス化したりすることができます。Docker イメージは (VM イメージと比べて) 比較的サイズが小さく、移植可能であるため、開発者は Docker イメージとして作成されたアプリケーションをテスト環境、品質保証環境、本番環境の間でシームレスに移動させることができます。したがって、アプリケーションの開発および運用のアジリティーを高められるようになります。

Docker は、これまでとてもよく利用されてきたテクノロジーであったにも関わらず、そのエコシステムは最近まで主に x86 アーキテクチャーと Linux オペレーティング・システムに限定されていました。IBM POWER Linux、IBM z/Linux、ARM Linux などのシステムで Docker をサポートするには、移植作業が必要になります。このチュートリアルでは、Docker を POWER Linux プラットフォーム上で使用する方法を説明します。また、POWER プラットフォーム上でゼロから Docker を作成する具体的なプロセスも説明します。このプロセスは、POWER 以外のプラットフォームで作業する開発者も、その特定のプラットフォーム上で Docker を有効にする際の参考にすることができます。

このチュートリアルでは、Docker を POWER Linux プラットフォーム上で使用する方法、gccgo をコンパイラー・バックエンドとして使用して Docker バイナリーをコンパイルする方法を説明します。さらに、プライベート Docker イメージをホストする Docker プライベート・レジストリーを作成する方法も紹介します。

アプリケーションを作成するために必要となるもの

ステップ 1. Docker のバイナリー・パッケージを POWER にインストールする

POWER 用 Docker 1.3.0 の Debian パッケージ・ファイルは、ブラジルのカンピーナス大学のご厚意によりftp://ftp.unicamp.br/pub/linuxpatch/docker-ppc64/ubuntu/14_10/docker.io-1.3.0-dev_ppc64el.deb から入手することができます。

以下に記載されているコマンドで、パッケージをダウンロードしてインストールします。dpkg -l コマンドを使用することで、正常にインストールされたことを確認できます。

$ curl -o docker.io-1.3.0-dev_ppc64el.deb \
    'ftp://ftp.unicamp.br/pub/linuxpatch/docker-ppc64/ubuntu/14_10/docker.io-1.3.0-dev_ppc64el.deb'
$ sudo dpkg -i docker.io-1.3.0-dev_ppc64el.deb
$ dpkg -l 'docker*'
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  docker.io-1.3.0-dev   1.3.0-dev-20141 ppc64el         Linux container runtime
...

ステップ 2. POWER 用 Ubuntu ベース・イメージを作成する

このチュートリアルを作成している時点で、公開されている Docker Hub レジストリーに POWER 用のイメージはありません。したがって、Docker コンテナーを実行するには、その前に POWER 用の Ubuntu ベース・イメージを作成する必要があります。

Ubuntu 14.04 (Trusty) の必要最小限のイメージを作成する手順は以下のとおりです。trustyutopic で置き換え、14.0414.10 で置き換えることで、utopic 14.10 (Utopic) 用のイメージも同じ方法で作成することができます。

$ sudo apt-get install -y debootstrap
$ curl -o debootstrap.sh \
    https://raw.githubusercontent.com/docker/docker/master/contrib/mkimage/debootstrap
$ chmod 755 debootstrap.sh
$ sudo ./debootstrap.sh ubuntu --components=main,universe trusty
$ sudo tar -C ubuntu -c . | docker import - ubuntu:14.04
$ docker tag ubuntu:14.04 ubuntu:trusty
$ docker tag ubuntu:14.04 ubuntu:latest
$ sudo rm -fr ubuntu

: イメージには、必ず latest タグを追加してください。指定されたイメージ名にタグ名がない場合、Docker は latest タグが付けられたイメージを検索します。latest タグが付けられたイメージがローカル・リポジトリーにない場合、Docker は公開レジストリーとなっている Docker Hub からイメージをダウンロードしようとしますが、このレジストリーには x86 プラットフォーム用のイメージしかありません。これらのイメージでは上手く行きません。公開されていて入手可能な Dockerfile では、FROM 行に含まれるベース・イメージ名にタグが指定されていないのが通常なので、レジストリー内では常に、ベース・イメージに latest のタグを付けておく必要があります。

イメージのターゲット・アーキテクチャーを確認するには、docker inspect コマンドを使用します。例えば、POWER プラットフォーム用イメージにはメタデータ "ppc64" があります。

$ uname -m
ppc64le
$ docker inspect f3b2472e2593 | grep Architecture
    "Architecture": "ppc64",

x86 マシンの場合、そのメタデータは "amd64" です。

$ uname -m
x86_64
$ docker inspect eca7633ed783 | grep Architecture
    "Architecture": "amd64",

Docker イメージが正常に作成されたことを確認するには、docker images コマンドを使用します。

$ docker images
REPOSITORY         TAG                 IMAGE ID            CREATED                 VIRTUAL SIZE
ubuntu                     14.04              f3b2472e2593        About a minute ago   188.3 MB
ubuntu                     latest              f3b2472e2593        About a minute ago   188.3 MB
ubuntu                     trusty              f3b2472e2593        About a minute ago   188.3 MB

後は、他のプラットフォームでの場合と同じように Docker コンテナーを実行することができます。docker run コマンドを実行すると、ランダムに生成されたホスト名のコンテナーが起動され、そのコンテナー内で hostname コマンドが実行されます。

$ hostname
myhost.mydomain
$ docker run ubuntu hostname
bf4ab3d25d4d

ステップ 3. POWER 上に独自の Docker レジストリーを作成する

www.docker.io でホストされている Docker Hub レジストリーは、Docker を他のコンテナー・ベースのテクノロジーと差別化する主要コンポーネントです。この公開されたレジストリーを介して、ユーザーは簡単にイメージを共有できるようになっています。公式イメージも配布しているこのレジストリーには、Ubuntu などの無料のオペレーティング・システム、Nginx や MongoDB などのミドルウェア、WordPress などのアプリケーションの信頼できるイメージが幅広く揃っています。しかし残念なことに、これらのイメージは x86 プラットフォーム向けにビルドされたものであり、このチュートリアルを作成している時点では POWER 用のイメージを配布している公開レジストリーはありません。

その一方で、独自のレジストリー・サーバーを実行すれば、イメージを友人や同僚と共有することができます。そこで、このセクションでは、独自のレジストリー・サーバーを作成して実行する手順を説明します。

Docker レジストリーは Python アプリケーションです。そのソース・コードは GitHub プロジェクトとして入手できるので、それをビルドすることで、独自のレジストリー・サーバーを POWER マシン上で実行することができます。Docker レジストリーは、Docker コンテナー内でも Docker の外部でも実行可能です。このチュートリアルでは、コンテナー内で Docker レジストリーを実行する手順を紹介します。Docker レジストリー・サイトに用意されている README.md ファイルには、クイック・スタート手順が記載されていますが、それには従わないでください。その手順は、公開レジストリーの Docker イメージを使用することが前提となっているためです。

イメージをビルドする前に、Ubuntu イメージに ubuntu:14.04 タグが付いていることを確認してください。Dockerfile はそのタグを参照します。

  1. 最初のステップは、ソース・コードをダウンロードすることです。この手順では、安定版であるバージョン 0.9.1 を使用します。
    $ cd ~
    $ git clone https://github.com/docker/docker-registry
    $ cd ~/docker-registry
    $ git checkout -q 0.9.1
  2. 次に、gevent-1.0.1 パッケージに含まれる config.guess ファイルと config.sub ファイルを更新する必要があります。このパッケージに含まれている config.* ファイルは古いバージョンなので、ppc64le を認識しません。ppc64le を認識するようにファイルを更新するには、以下の手順に従って、docker-registry/Dockerfile にパッチを適用します。
    $ cat ~/docker-registry/docker-registry.patch
    *** docker-registry.orig/Dockerfile     Sat Jan 31 07:20:32 2015
    --- docker-registry/Dockerfile  Sat Jan 31 13:12:11 2015
    ***************
    *** 19,24 ****
    --- 19,27 ----
              libssl-dev \
              liblzma-dev \
              libevent1-dev \
    + # Install deps for building gevent
    +         curl \
    +         cython \
          && rm -rf /var/lib/apt/lists/*
    
      COPY . /docker-registry
    ***************
    *** 27,32 ****
    --- 30,45 ----
      # Install core
      RUN pip install /docker-registry/depends/docker-registry-core
    
    + # Install gevent 1.0.1 using updated config.guess and config.sub
    + RUN curl https://pypi.python.org/packages/source/g/gevent/gevent-1.0.1.tar.gz | tar -xzf - -C / \
    +     && curl -o /gevent-1.0.1/libev/config.guess \
    +          'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' \
    +     && curl -o /gevent-1.0.1/libev/config.sub \
    +          'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' \
    +     && cp -pf /gevent-1.0.1/libev/config.guess /gevent-1.0.1/c-ares/config.guess \
    +     && cp -pf /gevent-1.0.1/libev/config.sub /gevent-1.0.1/c-ares/config.sub \
    +     && pip install /gevent-1.0.1
    +
      # Install registry
      RUN pip install file:///docker-registry#egg=docker-registry[bugsnag,newrelic,cors]
  3. パッチを適用したら、docker build コマンドを実行してイメージをビルドします。
    $ cd ~/docker-registry
    $ patch -p1 < docker-registry.patch
    $ docker build -t registry .
  4. ここからは、Docker レジストリー・プロジェクトに含まれる README.md ファイルの説明に従って、ローカル・レジストリー・サーバーを起動することができます。その際、ストレージ・オプションを指定することをお勧めします。このオプションを指定しないと、レジストリー用のストレージがコンテナー内に作成されて、コンテナーの終了時にストレージも一緒に消去されることになるからです。
    $ docker run -p 5000:5000 registry
  5. ローカル・レジストリーの場所は、ホスト名とポート番号で指定することができます。イメージをローカル・レジストリー・サーバーにプッシュするには、Docker がレジストリーの完全な場所を認識するように、<ホスト名>:<ポート番号>/<イメージ名> をタグとしてイメージに追加する必要があります。詳細については、「How to Use Your Own Registry」を参照してください。
    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    registry                  latest              82b144bfff96        17 minutes ago      428.1 MB
    ubuntu                   14.04               f3b2472e2593        2 days ago          188.3 MB
    ubuntu                   latest              f3b2472e2593        2 days ago          188.3 MB
    ubuntu                   trusty              f3b2472e2593        2 days ago          188.3 MB
    $ docker tag f3b2472e2593 localhost:5000/ubuntu
    $ docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    registry                     latest              82b144bfff96        2 hours ago         428.1 MB
    localhost:5000/ubuntu        latest              f3b2472e2593        2 days ago          188.3 MB
    ubuntu                       14.04               f3b2472e2593        2 days ago          188.3 MB
    ubuntu                       latest              f3b2472e2593        2 days ago          188.3 MB
    ubuntu                       trusty              f3b2472e2593        2 days ago          188.3 MB
  6. これで、ホスト名、ポート番号、イメージ名を指定して、Ubuntu イメージをプッシュすることができます。また、ローカル・レジストリー・サーバーにあるイメージを検索することもできます。
    $ docker push localhost:5000/ubuntu
    The push refers to a repository [localhost:5000/ubuntu] (len: 1)
    Sending image list
    Pushing repository localhost:5000/ubuntu (1 tags)
    f3b2472e2593: Image successfully pushed
    Pushing tag for rev [f3b2472e2593] on {http://localhost:5000/v1/repositories/ubuntu/tags/latest}
    $ docker search localhost:5000/ubuntu
    NAME             DESCRIPTION   STARS     OFFICIAL   AUTOMATED
    library/ubuntu                 0

詳細については、Docker レジストリー・プロジェクトに含まれる README.md を参照してください。

ステップ 4. POWER 上に Docker 用の環境を構築する

Docker の新しいバージョン (1.4.1 など) を試すには、ソース・コードから Docker をビルドする必要があります。このセクションでは、POWER プラットフォーム上で利用できるツールについて説明します (このチュートリアルでは、オペレーティング・システムが Ubuntu 14.04 であることを前提とします。Ubuntu 14.04 の場合と同様の手順に従えば、POWER 上で Debian を使用することもできますが、その手順については、このチュートリアルでは説明しません)。

Docker のソース・コードは Go プログラミング言語で作成されています。Go 言語 (別名 golang) は、Google Inc によって開発されたコンパイル型プログラミング言語です。Go 言語の公式コンパイラーである gc と、go コマンドなどのサポート・ツールは、インターネットから無料で入手することができます。go コマンドは一般的な作業 (例えば、ソース・ツリーの作成、パッケージの管理、ユニット・テスト、デバッグなど) を実行するためのフロントエンドのコマンドです。

しかし残念ながら、公式の Go ツール・チェーンは、x86 プロセッサーと ARM プロセッサー上の Linux、Mac OS X、FreeBSD、Windows しかサポートしていません。POWER Linux など、他のプラットフォームでは、代わりとなるツール・チェーンが必要になります。それが、gccgo という gcc ベースの Go コンパイラーです。POWER Linux と z/Linux ならびに x86 と ARM Linux をはじめとし、gccgo は gcc がサポートしているすべてのプラットフォームをサポートします。

gccgo をビルドする

このセクションでは、POWER 上の Ubuntu で gccgo をビルドする手順を説明します。POWER 上の Ubuntu は、リトルエンディアンの POWER プラットフォームしかサポートしないことに注意してください。

  1. 以下のように、必要なパッケージをインストールします。
    $ sudo apt-get install -y build-essential libgmp-dev libgmp3-dev libmpfr-dev libmpc-dev flex subversion
    $ sudo apt-get install -y git mercurial libsqlite3-dev lxc libffi-dev pandoc ruby ruby-dev curl
    $ sudo apt-get install -y aufs-tools btrfs-tools libdevmapper-dev libapparmor-dev
    $ sudo apt-get install -y linux-image-extra-`uname -r`
    $ sudo gem install fpm

    Docker の最新リリースは、バージョン 1.4.1 です。このチュートリアルを作成している時点では、バージョン 1.5.0 の開発が進められているところです。Docker のバージョン 1.4.1 およびそれより前のバージョンでは、Go コンパイラーのバージョン 1.3 でコンパイルすることが前提となっています。Docker 1.5.0 では、Go 1.4 が前提となります。Go 1.3 に対応する gccgo のリビジョンは 219550 であり、Go 1.4 に対応するリビジョンは 219661 です。ビルドする Docker のバージョンに対応する gccgo のリビジョンをダウンロードしてください。このチュートリアルでは、Docker 1.4.1 をビルドするための gccgo リビジョン 219550 をビルドする手順を紹介します。

  2. 上記のいずれのリビジョンにも統合されていない gccgo には、パッチを適用する必要があります。パッチを適用した後は、configuremake、および make install コマンドを実行することで、gccgo をビルドすることができます。
    $ mkdir ~/gccgo
    $ cd ~/gccgo
    $ svn co -q --revision 219550 svn://gcc.gnu.org/svn/gcc/trunk src
    $ curl 'https://gcc.gnu.org/bugzilla/attachment.cgi?id=33966&action=diff&context=patch&format=raw' | \
        sed 's/cgo_unix\.go\.orig/cgo_unix\.go/' | patch -p1
    $ mkdir bld
    $ cd bld
    $ ../src/configure --enable-threads=posix --enable-shared --enable-__cxa_atexit \
        --enable-languages=c,c++,go --enable-secureplt --enable-checking=yes --with-long-double-128 \
        --enable-decimal-float --disable-bootstrap --disable-alsa --disable-multilib \
        --prefix=/usr/local/gccgo
    $ make
    $ sudo make install
  3. gccgo のインストールが完了したら、シェルで以下の環境変数が設定されていることを確認します。
    $ export PATH=/usr/local/gccgo/bin:$PATH
    $ export LD_LIBRARY_PATH=/usr/local/gccgo/lib64:$LD_LIBRARY_PATH

POWER 上でソース・コードから Docker をビルドする

このチュートリアルでは、Docker コンテナー外部で Docker をビルドする手順を紹介します。これは、x86 プラットフォームでの公式なビルド手順とは異なる手順です。

gccgo でビルドする Docker ソース・コードを準備する

  1. まず、Docker ソース・コードを複製しなければなりません。以下の例では、作業ディレクトリーが ~/docker.work にあるという前提で、ソース・コードを ~/docker.work/src/github.com/docker/docker サブディレクトリーに複製します。パス src/github.com/docker/docker は、変更しないでください。ソース・コードには、このパスがインクルード・パスとしてハードコーディングされています。バージョン 1.4.1 の Docker ソース・コードを複製する手順は、以下のとおりです。
    $ mkdir -p ~/docker.work/src/github.com/docker
    $ cd ~/docker.work/src/github.com/docker
    $ git clone https://github.com/docker/docker
    $ cd docker
    $ git checkout -q v1.4.1
  2. Docker を gccgo でビルドする場合は、元のソース・コードにパッチを適用する必要があります。IBM の Srini Brahmaroutu 氏が保守しているいくつかのソース・ツリーは、POWER 上および z システム上で gccgo を使ってビルドすることができます。彼の GitHub リポジトリーを使用して、一連のパッチを抽出することができます。
    $ cd ~/docker.work/src/github.com/docker/docker
    $ curl
    'https://github.com/brahmaroutu/docker/compare/docker:v1.4.1...gccgo_power_141.patch' | \
        patch -p1
  3. ソース・コードの準備が完了したら、シェルで以下の環境変数が設定されていることを確認します。GOPATH は、go ソース・コードのインクルード・パスです。値が誤っていると、誤ったソース・コードがビルドされる結果となります。
    $ export GOPATH=~/docker.work:~/docker.work/src/github.com/docker/docker/vendor
    $ export CGO_ENABLED=1

go-md2man ツールと LVM2 ライブラリーをビルドする

Docker をビルドする前に必要なステップとして、次に、Docker のビルド・スクリプトで使用するツールとライブラリーをビルドします。具体的には、go-md2man と、静的にリンクされた LVM2 のライブラリーです。これらのビルド・ステップはどのプラットフォームでも必要になりますが、Docker コンテナーを使用して Docker をビルドする場合、ビルド・ステップは Dockerfile 内に隠されます。

  1. go-md2man は、マークダウン形式の文書から UNIX man ページを生成するツールです。go-md2man をビルドする手順は、以下のとおりです。
    $ cd ~/docker.work/src
    $ git clone -b v1 https://github.com/cpuguy83/go-md2man.git github.com/cpuguy83/go-md2man
    $ git clone -b v1.2 https://github.com/russross/blackfriday.git github.com/russross/blackfriday
    $ go build -gccgoflags '-static-libgo -static-libgcc' github.com/cpuguy83/go-md2man
    $ cp -p go-md2man /usr/local/gccgo/bin
  2. Docker が devmapper サポートを有効にするには、静的にリンクされた LVM2 のライブラリーが必要です。パッケージに含まれているこれらのライブラリーは、動的にリンクされるバイナリーであるため、apt-get で指定することはできません。LVM2 をビルドする手順は、以下のとおりです。
    $ cd ~
    $ git clone --no-checkout https://git.fedorahosted.org/git/lvm2.git lvm2
    $ cd ~/lvm2
    $ git checkout -q v2_02_103
    $ curl -o autoconf/config.guess \
        'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
    $ curl -o autoconf/config.sub \
        'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
    $ ./configure --enable-static_link --prefix /usr/local/lvm2
    $ make device-mapper
    $ sudo make install_device-mapper
  3. LVM2 ライブラリーのインストールが完了したら、シェルで以下の環境変数が設定されていることを確認します。
    $ export C_INCLUDE_PATH=/usr/local/lvm2/include
    $ export LIBRARY_PATH=/usr/local/lvm2/lib:$LIBRARY_PATH
    $ export LD_LIBRARY_PATH=/usr/local/lvm2/lib:$LD_LIBRARY_PATH

Docker の Debian パッケージをビルドする

これで、Docker ソース・コードをビルドする準備が整いました。project/make.sh スクリプトに渡すパラメーターで、ビルド・ターゲットを指定します。ここでは、binary パラメーターによって実行ファイルをビルドすることを指定し、ubuntu パラメーターによって Debian パッケージを作成することを指定します。make.sh の 1 回の呼び出しの中で、すべてのターゲットを指定する必要があります。Docker 1.3 をビルドする場合は、project/make.sh ではなく、hack/make.sh を実行してください。これは、バージョン 1.4 では hack/ ディレクトリーの名前が変更されているためです。

$ cd ~/docker.work/src/github.com/docker/docker
$ export DOCKER_BUILDTAGS="apparmor selinux btrfs_noversion"
$ project/make.sh binary ubuntu

ビルドに成功すると、bundles/1.4.1-dev/ubuntu ディレクトリーに Debian パッケージが作成されます。このディレクトリーには 2 つの .deb ファイルがありますが、大きいほうのファイルが、インストールするパッケージです。パッケージをインストールするには、dpkg -i コマンドを使用します。

$ ls bundles/1.4.1/
binary  ubuntu
$ ls -s bundles/1.4.1/ubuntu/
total 8524
8520 lxc-docker-1.4.1_1.4.1-20150201030418-5bc2ff8-dirty_ppc64el.deb
   4 lxc-docker_1.4.1-20150201030418-5bc2ff8-dirty_ppc64el.deb
$ sudo dpkg -i bundles/1.4.1/ubuntu/lxc-docker-1.4.1_1.4.1-20150201030418-5bc2ff8-dirty_ppc64el.deb
Selecting previously unselected package lxc-docker-1.4.1.
(Reading database ... 26658 files and directories currently installed.)
Preparing to unpack .../lxc-docker-1.4.1_1.4.1-20150201030418-5bc2ff8-dirty_ppc64el.deb ...
Unpacking lxc-docker-1.4.1 (1.4.1-20150201030418-5bc2ff8-dirty) ...
Setting up lxc-docker-1.4.1 (1.4.1-20150201030418-5bc2ff8-dirty) ...
Processing triggers for ureadahead (0.100.0-16) ...
$ sudo dpkg -l '*docker*'
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  lxc-docker-1.4.1      1.4.1-201502010 ppc64el         Linux container runtime
...
$ docker version
Client version: 1.4.1
...

unicamp.br からダウンロードした Docker 1.3.0 をインストールしてある場合は、それをアンインストールしてから、ビルド・パッケージをインストールする必要があります。

$ sudo dpkg -r docker.io-1.3.0-dev

まとめ

このチュートリアルでは、Docker を POWER Linux プラットフォーム上で使用する方法を説明しました。また、gccgo をコンパイラー・バックエンドとして使用して Docker バイナリーをコンパイルする方法、プライベート Docker イメージをホストする Docker プライベート・リポジトリーを作成する方法についても取り上げました。締めくくりとして、このトピックに関する詳細を取り上げている他の参考文献を以下に記載します。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=DevOps, Cloud computing
ArticleID=1015187
ArticleTitle=Docker を IBM POWER Linux プラットフォーム上でビルドして使用する
publish-date=10012015