開発環境を作ることを考えると、Dockerメチャ便利やん!と思ってきた浅見です。
前回、JMETERのスレーブをDOCKER上に立ててみた という記事では、JMeterスレーブをDockerで動かしてみました。dockerコマンドでも問題なく利用できますが、毎回コマンド実行するのは結構手間がかかりました。
その手間を解消するツールとして、「docker-compose」というものがあるようです。「docker-compose」を使うと、実行コマンドをファイル定義できるようになるので、より手軽にDockerを使うことができます。
ということで、今回は、「docker-compose」を使ってみようと思います。ホストOSは「AmazonLinux2」になります。
目次
インストール
公式サイト を参考に、インストールをしてみます。
「/usr/local/bin」配下に実行コマンドをダウンロードし、実行権限をつけるだけで利用が可能です。rootユーザーで利用する場合は、「/usr/bin」へシンボリックリンクを貼ってあげる必要がありました。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.26.2, build eefe0d31
Dockerfileの作成
Dockerfileは前回作成したものから変更はありません。
# centos7イメージを利用
FROM centos:centos7
# JMeterをインストール
RUN cd /usr/local/src/ \
&& yum update -y \
&& yum install -y wget \
&& yum install -y jre \
&& wget https://ftp.kddi-research.jp/infosystems/apache//jmeter/binaries/apache-jmeter-5.3.tgz \
&& tar -xvzf apache-jmeter-5.3.tgz \
&& rm apache-jmeter-5.3.tgz \
&& ln -s /usr/local/src/apache-jmeter-5.3/ /usr/local/jmeter
# IPアドレスは引数で指定
ARG IP
# JMeterスレーブの起動設定
# - SSL通信無効化
# - rmi.localport指定
# - rmi.server.hostname指定
# - メモリ調整(t3.microを利用しているので64MBとしています
RUN sed -i_date +%Y%m%d
-e s/#server.rmi.ssl.disable=false/server.rmi.ssl.disable=true/g /usr/local/jmeter/bin/jmeter.properties \
&& sed -i_date +%Y%m%d
-e s/#server.rmi.localport=4000/server.rmi.localport=4000/g /usr/local/jmeter/bin/jmeter.properties \
&& sed -i_date +%Y%m%d
-e s/#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx/RMI_HOST_DEF=-Djava.rmi.server.hostname=$IP/g /usr/local/jmeter/bin/jmeter-server \
&& sed -i_date +%Y%m%d
-e 's/: "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"/: "${HEAP:="-Xms64m -Xmx64m -XX:MaxMetaspaceSize=64m"}"/g' /usr/local/jmeter/bin/jmeter
# JMeterスレーブの起動
CMD [ "/usr/local/jmeter/bin/jmeter-server" ]
docker-compose.ymlの作成
前回実行したコマンドを「docker-compose.yml」に置き換えていきます。
buildコマンドの定義
まずは、buildコマンドです。次のようなコマンドを使ってbuildを行っていました。ホストOSのローカルIPを引数で渡したいために、長くなっています。
$ TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
\
&& IP=curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4
\
&& docker build -t ptune/jmeter:5.3 --build-arg IP=$IP .
docker-compose.ymlへ書くと次のようになります。
version: '3.7'
services:
jmeter-slave:
build:
context: .
args:
- IP=$IP
引数で渡していたIPアドレスは、「.env」ファイルへ記載する必要があるので、別途「.env」ファイルを作成します。
TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
\
&& IP=curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4
\
&& echo "IP=$IP" > .env
runコマンドの定義
runコマンドは次のようにしていました。
$ docker run -d -it --name jmeter-slave -p 1099:1099 -p 4000:4000 ptune/jmeter:5.3
「docker-compose.yml」へcontainer_name以降を追加します。
version: '3.7'
services:
jmeter-slave:
build:
context: .
args:
- IP=$IP
container_name: jmeter-slave
restart: always
ports:
- 1099:1099
- 4000:4000
docker-composeの実行
docker-composeを使ってイメージ作成および起動してみます。
$ docker-compose up -d
作成されたイメージおよびコンテナを確認してみます。無事に起動しています。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker_jmeter-slave latest 2952b974a64d 6 minutes ago 647MB
centos centos7 b5b4d78bc90c 2 months ago 203MB
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7489379bfc1a docker_jmeter-slave "/usr/local/jmeter/b…" 7 minutes ago Up 7 minutes 0.0.0.0:1099->1099/tcp, 0.0.0.0:4000->4000/tcp jmeter-slave
まとめ
JMETERのスレーブをDOCKER上に立ててみた で実行したdockerコマンドを、「docker-compose」を使って実装してみました。
「docker-compose」を使うと、ファイル定義できるようになるので再現性が高まりそうです。
お客様の課題ヒアリングと提案活動をメインに行っていましたが、2021年からはマーケティング担当として活動しています。技術ブログはもちろん、様々な形でディーネットの取り組みについて発信していきますので、よろしくお願いします!
LINK
クラウドベリージャム:プロフィールページ