LoginSignup
9
10

More than 5 years have passed since last update.

負荷試験用のコンテナ

Last updated at Posted at 2014-05-18

Docker のコンテナを使用する際に、わざわざ ssh 等でコンテナにログインして操作したり、
関連するコンテナの IP アドレスを調べて手動で設定したり、プロビジョニングツールで環境を構築するのは面倒なので、
試しに docker run するだけで試験できるようにしてみました

負荷をかける対象のコンテナ

Dockerfile
FROM ubuntu:14.04

RUN apt-get -y update
RUN apt-get -y install aptitude
RUN aptitude -y install apache2
CMD service apache2 start && tail -f /var/log/apache2/access.log

EXPOSE 80

通信はコンテナ間のみですので --link を指定するためにコンテナに名前を付けておきます

$ docker.io run -d -t --name HTTP_SERVER hexa/apache2
c21067ce1c2a9eff781c747922c4123fda6e270e4acce4738a5d589de6eb543c

リクエストを送信するクライアント用のコンテナ

Dockerfile
FROM ubuntu:14.04

RUN apt-get -y update
RUN apt-get -y install aptitude
RUN aptitude -y install erlang make gcc autoconf curl

RUN curl -L -o /root/tsung-1.5.1.tar.gz http://tsung.erlang-projects.org/dist/tsung-1.5.1.tar.gz
RUN cd /root && tar zxvf /root/tsung-1.5.1.tar.gz
RUN cd /root/tsung-1.5.1 && ./configure
RUN cd /root/tsung-1.5.1 && make && make install

ENV TSUNG_LOG_DIR /root/tsung/log
ENV TSUNG_CONF_DIR /root/tsung/conf
ENV TSUNG_CONF $TSUNG_CONF_DIR/http.xml
ENV TSUNG_INTERARRIVAL 1
ENV TSUNG_DURATION 1

RUN mkdir -p $TSUNG_LOG_DIR
RUN mkdir -p $TSUNG_CONF_DIR

ADD ./http.xml $TSUNG_CONF
ADD ./setup.sh /root/setup.sh
RUN chmod 700 /root/setup.sh

CMD /root/setup.sh && tsung -l $TSUNG_LOG_DIR -f /root/tsung/conf/http.xml start

docker run に --link を指定することで、Apache2 のコンテナの IP アドレスが、
このコンテナの環境変数に設定されていますので、この環境変数の値を使用して Tsung の設定ファイルを設定します

setup.sh
#!/bin/bash

[ "$TSUNG_CONF" != "/root/tsung/conf/http.xml" ] && cp $TSUNG_CONF /root/tsung/conf/http.xml

ENVS=$( env | grep HTTP_SERVER_ )
for ENV in ${ENVS[@]}
do
  sed -i "s@{{\s${ENV%%=*}\s}}@${ENV#*=}@" /root/tsung/conf/http.xml
done

ENVS=$( env | grep TSUNG_ )
for ENV in ${ENVS[@]}
do
  sed -i "s@{{\s${ENV%%=*}\s}}@${ENV#*=}@" /root/tsung/conf/http.xml
done

試験用の Tsung の設定ファイル

http.xml
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
  <clients>
    <client host="localhost" use_controller_vm="true" />
  </clients>
  <servers>
    <server host="{{ HTTP_SERVER_PORT_80_TCP_ADDR }}" port="{{ HTTP_SERVER_PORT_80_TCP_PORT }}" type="tcp"></server>
  </servers>
  <load>
   <arrivalphase phase="1" duration="{{ TSUNG_DURATION }}" unit="minute">
     <users interarrival="{{ TSUNG_INTERARRIVAL }}" unit="second"></users>
   </arrivalphase>
  </load>
  <options>
    <option type="ts_http" name="user_agent">
    <user_agent probability="100">Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36</user_agent>
   </option>
  </options>
  <sessions>
    <session name="http-example" probability="100" type="ts_http">
      <request>
        <http url="/index.html" method="GET" version="1.1" ></http>
      </request>
    </session>
  </sessions>
</tsung>

下記のように実行します

$ docker.io run -d -t \
                -v /home/vagrant/log:/root/log \
                -e TSUNG_LOG_DIR=/root/log \
                --link HTTP_SERVER:HTTP_SERVER \
                hexa/tsung

設定を変更する場合は -v や -e を使って各値を指定します

$ docker.io run -d -t \
                -v /home/vagrant/conf:/root/conf \
                -v /home/vagrant/log:/root/log \
                -e TSUNG_CONF=/root/conf/http.xml \
                -e TSUNG_LOG_DIR=/root/log \
                -e TSUNG_INTERARRIVAL=1 \
                -e TSUNG_DURATION=1 \
                --link HTTP_SERVER:HTTP_SERVER \
                hexa/tsung

http.xml に設定した試験が完了すると、-v で指定したホストのディレクトリに試験結果が出力されます

$ ls /home/vagrant/log/20140518-1612/
http.xml match.log tsung_controller@7b7078dcc539.log tsung.log

9
10
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
9
10