LoginSignup
8
7

More than 5 years have passed since last update.

docker-compose を試してみる

Posted at

今更ながら公式ドキュメントに従ってdocker-composeを試してみたのでメモ

Prerequisites

まずはインストールから。
今回はdocker-machine(docker-toolbox)で行います

$docker-machine ssh

インストール手順に従ってインストール

$ sudo su
# curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod a+x /usr/local/bin/docker-compose

※わざわざrootになって実行したあとに気づいたのですが sudo -i使えばいいよって公式に書いてありましたね

確認

$ docker-compose --version
docker-compose version 1.7.1, build 0a9ab35

Step 1: Setup

  1. テスト用のディレクトリを作成

    $ mkdir composetest
    $ cd composetest
    
  2. app.py を作成

    $ vi app.py
    
    app.py
    from flask import Flask
    from redis import Redis
    
    app = Flask(__name__)
    redis = Redis(host='redis', port=6379)
    
    @app.route('/')
    def hello():
       redis.incr('hits')
       return 'Hello World! I have been seen %s times.' % redis.get('hits')
    
    if __name__ == "__main__":
       app.run(host="0.0.0.0", debug=True)
    

    Flaskってなんだろって調べたらPython用の軽量なフレームワークみたいですね。
    参考:http://a2c.bitbucket.org/flask/

    app.pyの中身はアクセスするたびに
    カウンターをインクリメントしていく,
    カウンターはredisで保持って感じかな・・・?

  3. requirements.txtを作成

    pip install 用にrequirements.txtを作成します

    $ cat << EOF >  requirements.txt
    flask
    redis
    EOF
    

Step 2: Create a Docker image

Docker imageの作成

  1. Dockerfileの作成

    Dockerfile
    FROM python:2.7
    ADD . /code
    WORKDIR /code
    RUN pip install -r requirements.txt
    CMD python app.py
    
  2. ビルド

    $ docker build -t web .
    

    -tオプションで名前:タグ付け

Step 3: Define services

いよいよ本命 docker-compose.yml!

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis
  • build: Dockerfileのビルド。Dockerfileのディレクトリを指定
  • ports: ホストマシンとコンテナのポートマッピングを指定
  • volumes: ホストマシンのディレクトリをコンテナにマウント。host:container
  • depends_on:サービスの依存関係を指定。この場合 redis → web の順番で起動する
  • image: コンテナイメージを指定

yamlでかけるので簡潔でいいですね~
わかりやすいです

Step 4: Build and run your app with Compose

  1. docker-compose.ymlで定義したサービス郡を起動

    $ docker-compose up
    

    おお~、特に問題なさそうです。
    ちゃんとredis → web の順番で起動してますね。

  2. http://xxx:5000 にアクセス

docker machine 上で実行したため、
まずはdocker machine のipを調べます

   $ docker-machine ip
   192.168.99.100

そしてブラウザでアクセスすると
image

おお!!!!
ちゃんとアクセスするたびに増えているみたいです

Step5 では

docker-compose up -d
docker-compose run

などの説明がされていましたが今回は割愛

感想

複数コンテナを動かすときはかなり楽できそうです。
docker-compose.ymlがわかりやすいのですごくとっつきやすいですね。

色々と試す時の環境構築などにも使っていきたいと思います

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7