GCE上のContainer-Optimized OSでDocker Composeを使う（和訳）

# 訳者からひとこと

Google Cloudコミュニティに昨年投稿されたContainer-Optimized OS上でDocker Composeを動かすチュートリアルを和訳しました。

（あまり流行ってないですが、）Container-Optimized OSとはGoogleがGCE上でDockerを動かすために提供している軽量OSです。GKEでクラスタ組む程ではないけど、GCE上でDocker使いたいって時に使えます。
このOSでは初期状態でDockerのみが使えるようになっており、Docker Composeは入っていません。このチュートリアルを実行することで、Container-Optimized OS上でDocker Composeが使えるようになります。

なお、日本のリージョンを指定したり翻訳時の最新版ソフトウェアを使用したりするように、本文の一部を変更しています。

お気づきの点やよりわかりやすい表現の提案がありましたら、ご指摘お願い致します。

以下、本文です。

## 翻訳元

[Running Docker Compose with Docker](https://cloud.google.com/community/tutorials/docker-compose-on-container-optimized-os)

翻訳元の最終更新日: 2017年5月3日

# DockerでDocker Composeを動かす

このチュートリアルでは、[Container-Optimized OS](https://cloud.google.com/container-optimized-os/) が動作するインスタンス上のコンテナで [Docker Compose](https://docs.docker.com/compose/) を実行する方法を説明します。

## 目的

- Container-Optimized OS上でDockerを使ってDocker Composeを動かす
- コンテナ上で動く `docker-compose` へのエイリアスを作成する

## はじめる前に

1. [Google Cloud Platformコンソールのプロジェクトページ](https://console.cloud.google.com/project?_ga=2.21402427.-1834751951.1532430293) からCloud Platformプロジェクトを作成または選択する
2. プロジェクトの [課金を有効](https://support.google.com/cloud/answer/6293499#enable-billing) にする

## 料金

このチュートリアルでは、以下のようなCloud Platformの有料機能を利用します。

- [Google Compute Engine](https://cloud.google.com/compute/pricing)

料金を推計するには [料金シミュレータ](https://cloud.google.com/products/calculator/) を利用してください。

## 仮想マシンの設定をする

[Container-Optimized OS](https://cloud.google.com/container-optimized-os/) の安定版イメージを使って、新しいCompute Engineインスタンスを作成してください。

1. [Google Cloud Platformコンソール](https://console.cloud.google.com/?_ga=2.50787241.-1834751951.1532430293) を開く。
2. [新しいCompute Engineインスタンスを作成する](https://console.cloud.google.com/compute/instancesAdd?_ga=2.12883767.-1834751951.1532430293)。
3. 任意の**ゾーン**を選択する。（例: "asia-northeast1-b"）
4. 任意の**マシンタイプ**を選択する。（例: "micro" (f1-micro)）
5. **起動ディスク**を "Container-Optimized OS stable" に変更する。
6. **ファイアフォール**欄のHTTPトラフィックを許可するチェックボックスを選択する。
7. **作成**ボタンを押し、Conpute Engineインスタンスを作成する。

## サンプルコードを入手する

1. インスタンスの作成が完了したら、**SSH**ボタンを押してインスタンスに接続されたターミナルを開く。
2. `git` コマンドを使って [Hello Worldサンプル](https://github.com/docker/dockercloud-hello-world) をダウンロードする。

    ```sh
    $ git clone https://github.com/docker/dockercloud-hello-world.git
    $ cd dockercloud-hello-world
    ```

## Docker Composeを実行する

[Container-Optimized OS](https://cloud.google.com/container-optimized-os/) には多くの [利点](https://cloud.google.com/container-optimized-os/docs/concepts/features-and-benefits) がありますが、[デフォルトで制限されている](https://cloud.google.com/container-optimized-os/docs/concepts/security)ため、コンテナにバンドルされていないソフトウェアを実行するのは難しいです。例えば、ファイルシステムのごく限られた範囲しか実行可能な状態でマウントされていないため、一般的な説明に沿ってインストールした [Docker Compose](https://docs.docker.com/compose/) は利用できません。代わりに [Docker Composeイメージ](https://hub.docker.com/r/docker/compose/) を実行することができます。

1. Docker Composeイメージをダウンロードし実行します。最新版を使うには [Docker Composeのタグ](https://hub.docker.com/r/docker/compose/tags/) を確認してください。

    ```sh
    $ docker run docker/compose:1.22.0 version
    ```

2. サンプルコードを実行するため、Docker Composeコマンドを実行してください。
Docker ComposeコンテナがDockerデーモンにアクセスできるように `-v /var/run/docker.sock:/var/run/docker.sock` オプションでDockerソケットをマウントしてください。
カレントディレクトリをコンテナ内で利用できるように `-v "$PWD:/rootfs/$PWD"` オプションを使ってボリュームとしてマウントし、 `-w="/rootfs/$PWD"` で作業ディレクトリを変更してください。

    ```sh
    $ docker run --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v "$PWD:/rootfs/$PWD" \
        -w="/rootfs/$PWD" \
        docker/compose:1.22.0 up
    ```

3. `docker run` コマンドを実行したまま [Google Cloud Platformコンソールのインスタンスページ](https://console.cloud.google.com/compute/instances?_ga=2.260477581.-1834751951.1532430293) を開き、インスタンスの**外部IP**アドレスへのリンクをクリックしてください。
"Hello World"というメッセージが表示されていることが確認できるはずです。
4. SSHウィンドウを開き、Ctrl-Cを押してサンプルアプリケーションを停止してください。

## Docker Composeへのエイリアスを作成する

`docker run ... docker/compose:1.22.0 up` コマンドは、通常の方法でDocker Composeがインストールされたシステムで `docker-compose up` コマンドを実行するのと同じです。この長いコマンドを覚えたり打ち込んだりしなくて良いように、このコマンドのエイリアスを作りましょう。

1. あなたが使っているシェルの設定ファイル（例: `.bashrc`）に `docker-compose` エイリアスを作成してください。

    ```sh
    $ echo alias docker-compose="'"'docker run --rm \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v "$PWD:/rootfs/$PWD" \
        -w="/rootfs/$PWD" \
        docker/compose:1.22.0'"'" >> ~/.bashrc
    ```

2. bashの設定を再読込してください。

    ```sh
    $ source ~/.bashrc
    ```

3. サンプルディレクトリにいない場合、戻ってください。

    ```sh
    $ cd ~/dockercloud-hello-world
    ```

4. 新たに作った `docker-compose` エイリアスを使って、サンプルコードを実行してください。

    ```sh
    $ docker-compose up
    ```

    インスタンスの外部IPアドレスにアクセスすると、"Hello World" というメッセージが表示されているはずです。