Docker

Dockerの全体イメージとコマンドについてまとめてみた

こんにちは。最近負荷テストサービスのサイトをリニューアルしている浅見です。

先日、そのサイトを見ていただいた、AWS社のソリューションアーキテクトの方から、「AWS での分散負荷テスト」ソリューションも使ってみて。というお話をいただきました。

ということで、自社で動かしているJMeterのツールもクラウドネイティブな環境で動かしたいなー、と思い、JMeterを「AWS Fagate」上で動かすべく奮闘中です。

が、しかし、FagateどころかDockerすら使ったことがないので、まずはDockerの全体的なイメージと各コマンドについてまとめてみました。

Dockerの全体的なイメージ

Dockerの全体的なイメージは図のようになりそうです。

docker全体イメージ
docker全体イメージ

ポイントとしてはこんな感じでしょうか。

  • イメージを作る方法は3パターン
     - リポジトリから取得(pull)
     - Dockerfileから作成(build)
     - コンテナから作成(commit)
  • 実際に動かすためには、イメージからコンテナの起動が必要
  • 一つのイメージから複数のコンテナを起動することも可能
  • コンテナは停止させることができ、状態は保存される

リポジトリに対するコマンド

docker search

リポジトリからイメージを探します。

jmeterに関連するイメージを探します。

# docker search jmeter
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
justb4/jmeter                      Lightweight Docker image for running the Apa…   54                                      [OK]
cirit/jmeter                       Jmeter 2.13 + Debian OS + Java Server JRE 8     29                                      [OK]
egaillardon/jmeter                 Docker image for Apache JMeter                  10                                      [OK]
egaillardon/jmeter-plugins         Docker image for Apache JMeter and JMeter pl…   8                                       [OK]

docker pull

リポジトリからイメージを取得します。

centos7のイメージを取得してみます。

# docker pull centos:centos7
centos7: Pulling from library/centos
Digest: sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7

docker push

リポジトリへイメージを登録します。

使ったことないので、ヘルプを引用しておきます。

# docker push --help

Usage:  docker push [OPTIONS] NAME[:TAG]

Push an image or a repository to a registry

Options:
      --disable-content-trust   Skip image signing (default true)

イメージに対するコマンド

docker build

Dockerfileからイメージを作成します。

カレントディレクトリのDockerfileをもとに、イメージ名「ptune/jmeter」タグ名を「5.3」で作成します。

# docker build -t ptune/jmeter:5.3 .

docker images

イメージの一覧を表示させます。

作成したイメージの一覧を確認します。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ptune/jmeter        5.3                 a262aa8443c4        4 seconds ago       604MB
centos              centos7             b5b4d78bc90c        2 months ago        203MB

docker rmi

イメージの削除を行います。

イメージの指定は、「REPOSITORY:TAG」の形式で行います。

# docker rmi ptune/jmeter:5.3
Untagged: ptune/jmeter:5.3

docker run

イメージからコンテナを起動させます。

「jmeter」という名前で、「ptune/jmeter:5.3」のイメージを起動します。また、ローカルの1099番ポート、60000番ポートをコンテナ上のポートに紐づけています。

# docker run -d -it --name jmeter -p 1099:1099 -p 60000:60000 ptune/jmeter:5.3
[root@61933a2b99ce /]#

コンテナ上のコンソールから抜ける場合は、「Ctl+p → Ctl+q」で行います。「Ctl+c」や「exit」で抜けてしまうと、コンテナが停止してしまいます。

コンテナに対するコマンド

docker ps

起動中のコンテナの一覧を表示させます。

先ほど起動したコンテナが表示されます。

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                              NAMES
61933a2b99ce        ptune/jmeter:5.3    "/bin/bash"         2 minutes ago       Up 2 minutes        0.0.0.0:1099->1099/tcp, 0.0.0.0:60000->60000/tcp   jmeter

「docker ps」のみの場合は、稼働中のコンテナの一覧を表示させます。停止中のコンテナを表示させたい場合は、「docker ps -a」とする必要があります。

docker stop

コンテナを停止させます。

コンテナの指定は、「NAMES」または「CONTAINER ID」で行います。

# docker stop jmeter

docker ps -a

状態にかかわらずすべてのコンテナを表示します。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
61933a2b99ce        ptune/jmeter:5.3    "/bin/bash"         4 minutes ago       Exited (137) About a minute ago                       jmeter

ちなみに、-aオプションを付けないと起動中のコンテナが存在しないため、何も表示されません。

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

docker start

コンテナを起動させます。

# docker start jmeter
jmeter

docker restart

コンテナを再起動させます。

# docker restart jmeter
jmeter

docker attach

コンテナへログインします。

 docker attach jmeter
[root@61933a2b99ce /]#

コンテナ上のコンソールから抜ける場合は、「Ctl+p → Ctl+q」で行います。「Ctl+c」や「exit」で抜けてしまうと、コンテナが停止してしまいます。

docker logs

コンテナの標準出力内容を出力します。

コンテナログイン時に、「uname -a」を打っていたので、その結果が出力されています。

# docker logs jmeter
[root@61933a2b99ce /]# uname -a
Linux 61933a2b99ce 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

docker inspect

コンテナの状態をjson形式で確認します。

# docker inspect jmeter
[
    {
        "Id": "61933a2b99cec4cdd2bba789aaacaf132620b4cc139b3d7fc334f8af1fc16ced",
        "Created": "2020-07-07T01:24:34.946933217Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3047,
以下省略

「--format」オプションで、特定のもののみ取得することも可能です。

IPアドレスを取得したい場合。

# docker inspect  --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  jmeter
172.17.0.2

docker rm

コンテナを削除します。

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
61933a2b99ce        ptune/jmeter:5.3    "/bin/bash"         12 minutes ago      Exited (137) 20 seconds ago                       jmeter

# docker rm jmeter
jmeter

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

コンテナの削除をする場合は、コンテナを停止させておく必要があります。

docker commit

コンテナからイメージを作成します。

使っていないのでヘルプを引用しておきます。感覚的には、コンテナからイメージ作成するよりも、Dockerfileを修正してイメージ作成したほうが良い気がしますがどうんなんでしょう?

# docker commit --help

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

まとめ

はじめてdockerを触ってみて、わからないなりに、全体イメージと主要なコマンドについてまとめてみました。

JMeterスレーブを「AWS Fagate」で運用できるように、少しづつ検証していこうと思います。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA