もた日記

くだらないことを真面目にやる

Dockerメモ : awesome-dockerで紹介されているDocker関連の便利ツール

github.com

awesome-dockerで紹介されているDocker関連の便利ツール、Dockerfileサンプル、チートシートなどをいくつか見てみる。
ざっくりとしか確認していないので実際には使えないものもあるかも。


管理ツール

Repository スター数
jesseduffield/lazydocker 14,925
bcicen/ctop 9,823
lirantal/dockly 2,591
moncho/dry 2,086
skanehira/docui 1,731
TomasTomecek/sen 806
portainer/portainer 14,492
google/cadvisor 10,616

※スター数は2020/05/03 20:20時点

lazydocker

github.com

lazydockerはDocker/Docker Compose向けのGo製のターミナルベースの管理ツール。
コンテナ/イメージに対する操作、ログ表示、リソース使用状況確認などができる。

f:id:wonder-wall:20200503010020p:plain

ctop

github.com

ctopはコンテナ向けのtopコマンドのなもの。
キャプチャのように各コンテナに対しての操作もできる。

f:id:wonder-wall:20200502235520p:plain

その他、同様なターミナルベースの管理ツールとしては以下のようなものがある。

github.com

github.com

github.com

github.com

portainer

github.com

portainerはDockerのGUI管理ツール。
README.mdにdemo用のインスタンスが紹介されており下記からアクセスできる(username/passwordはREADME.md参照)。

http://demo.portainer.io/

f:id:wonder-wall:20200503150119p:plain

cadvisor

github.com

cadvisorはコンテナのリソース使用状況(CPU/Memory/Network/Filesystem)を監視するツール。
あくまでパフォーマンスを監視するツールでGUIからコンテナの停止などはできないようだ。

f:id:wonder-wall:20200503150137p:plain

ユーティリティ

Repository スター数
wagoodman/dive 19,835
docker-slim/docker-slim 8,478
docker/docker-bench-security 5,910
containrrr/watchtower 5,665
GoogleContainerTools/container-diff 2,391
alexei-led/pumba 1,614
GoogleContainerTools/container-structure-test 1,381

dive

github.com

diveはDockerイメージの各レイヤーの情報を調べるツール。
Dockerイメージサイズ縮小化、最適化に使えるとのこと。

f:id:wonder-wall:20200502235500p:plain

docker-slim

github.com

DockerSlimはイメージを最適化してサイズの縮小をしてくれるツール。
以下は公式ページにあった使用例。

$ head -n 1 Dockerfile
FROM ubuntu:14.04
 
$ docker images my/sample-node-app
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
my/sample-node-app        latest              31be09316a19        4 minutes ago      432MB
 
$ docker-slim build --http-probe my/sample-node-app
docker-slim[build]: state=started
docker-slim[build]: info=params target=my/sample-node-app continue.mode=enter
docker-slim[build]: state=inspecting.image
docker-slim[build]: state=inspecting.container
docker-slim[build]: info=container ... target.port.list=[32908] target.port.info=[8000/tcp => 0.0.0.0:32908]
docker-slim[build]: info=prompt message='press <enter> when you are done using the container'
docker-slim[build]: state=http.probe.starting
docker-slim[build]: info=http.probe.call status=200 method=GET target=http://127.0.0.1:32908/ attempt=1 error=none
docker-slim[build]: state=http.probe.done
docker-slim[build]: state=processing
docker-slim[build]: state=building message='building minified image'
docker-slim[build]: state=completed
docker-slim[build]: info=results status='MINIFIED BY 30.88X [432330078 (432 MB) => 14002579 (14 MB)]'
docker-slim[build]: info=results image.name=my/sample-node-app.slim image.size='14 MB' data=true
 
$ docker images my/sample-node-app.slim
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
my/sample-node-app.slim   latest              b72b685be7fe        1 minute ago        14 MB

docker-bench-security

github.com

docker-bench-securityはホスト設定、Dockerデーモン設定、Dockerイメージ、実行中コンテナなどのセキュリティをチェックするツール。

f:id:wonder-wall:20200503002014p:plain

watchtower

github.com

watchtowerはコンテナを監視して、Docker Hubや独自レジストリでイメージの更新があった際に自動的に最新イメージに更新してコンテナを再起動するツール。
以下のようにwatchtowerと監視対象のコンテナを起動しておくと、監視対象イメージ(centurylink/wetty-cli)に更新があると自動的に更新されるとのこと。

$ docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

$ docker ps
CONTAINER ID   IMAGE                   STATUS          PORTS                    NAMES
967848166a45   centurylink/wetty-cli   Up 10 minutes   0.0.0.0:8080->3000/tcp   wetty
6cc4d2a9d1a5   containrrr/watchtower   Up 15 minutes                            watchtower

container-diff

github.com

container-diffはDockerイメージの差分を確認できるツール。
--typeとしてはhistory, file, size, rpm, pip, apt, nodeが指定できる。

$ container-diff diff python:3.8.0-alpine python:3.7.0-alpine --type=size --type=pip

-----Pip-----

Packages found only in python:3.8.0-alpine: None

Packages found only in python:3.7.0-alpine: None

Version differences:
PACKAGE            IMAGE1 (python:3.8.0-alpine)        IMAGE2 (python:3.7.0-alpine)
-pip               19.3.1, 4.2M                        18.1, 4M
-setuptools        41.6.0, 1.6M                        40.4.3, 1.6M
-wheel             0.33.6, 49.3K                       0.32.1, 48.4K


-----Size-----

Image size difference between python:3.8.0-alpine and python:3.7.0-alpine:
SIZE1         SIZE2
106.4M        75.5M

pumba

github.com

pumbaはDocker向けのカオスエンジニアリングツール。
コンテナの停止、削除やネットワークエミュレーション(遅延、パケットロスなど)ができるとのこと。

$ pumba -h
NAME:
   Pumba - Pumba is a resilience testing tool, that helps applications tolerate random Docker container failures: process, network and performance.

USAGE:
   pumba [global options] command [command options] containers (name, list of names, or RE2 regex if prefixed with "re2:")

VERSION:
   0.7.2 - 92ecb8b () 2020-03-17_09:43_GMT

AUTHOR:
   Alexei Ledenev <alexei.led@gmail.com>

COMMANDS:
     kill     kill specified containers
     stop     stop containers
     pause    pause all processes
     rm       remove containers
     stress   stress test a specified containers
     netem    emulate the properties of wide area networks
     help, h  Shows a list of commands or help for one command

container-structure-test

github.com

container-structure-testはDockerイメージに対して、コマンド実行テスト、ファイルの存在テスト、ファイルの内容テスト、環境変数テストなどができるツール。

f:id:wonder-wall:20200502235438p:plain


Linter/Formatter

Repository スター数
hadolint/hadolint 3,562
jessfraz/dockfmt 346

hadolint

github.com

hadolintはHaskell製のDockerfileのLinter。
チェックする項目はREADME.mdのRulesに書いてある。

$ docker run --rm -i hadolint/hadolint < Dockerfile
/dev/stdin:31 SC2086 Double quote to prevent globbing and word splitting.
/dev/stdin:31 DL3005 Do not use apt-get upgrade or dist-upgrade
/dev/stdin:31 DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
/dev/stdin:31 DL3013 Pin versions in pip. Instead of `pip install <package>` use `pip install <package>==<version>`

dockfmt

github.com

dockfmtはgofmtのDockerfile版のようなもの。
以下はフォーマット前後の差分を表示する使用例。

$ dockfmt fmt -d htop/Dockerfile
diff htop/Dockerfile dockfmt/htop/Dockerfile
--- /tmp/dockfmt143910590   2016-09-19 15:59:22.612250710 -0700
+++ /tmp/dockfmt412224773   2016-09-19 15:59:22.612250710 -0700
@@ -4,10 +4,11 @@
 #  --pid host \
 #  jess/htop
 #
-FROM alpine:latest
-MAINTAINER Jessie Frazelle <jess@linux.com>
+
+FROM   alpine:latest
+MAINTAINER Jessie Frazelle <jess@linux.com>

-RUN apk --no-cache add \
+RUN    apk add --no-cache \
    htop

-CMD [ "htop" ]
+CMD    ["htop"]


Dockerfileサンプル

Repository スター数
jessfraz/dockerfiles 9,759
vimagick/dockerfiles 1,851
docker/awesome-compose 1,994

Dockerfileのサンプルは下記リポジトリが人気のようだ。

github.com

github.com

なお、Docker Composeのサンプルは下記リポジトリにある。

github.com


チートシート

Repository スター数
wsargent/docker-cheat-sheet 18,228
eon01/DockerCheatSheet:embed 2,970

コマンドなどのチートシートは下記リポジトリが人気のようだ。

github.com

github.com