前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

Docker Imageの履歴を確認する

docker inspect コマンドを使うことでImageの状態を知ることができるが、 docker historyコマンドを使うとImageに対してそれまでに加えてきた内容を知ることができる。

例としてOfficialのtomcatをダウンロードしてみる。 docker history コマンドはImageがローカルにダウンロード済みである必要がある。

$ docker pull tomcat:latest
$ docker history tomcat
IMAGE               CREATED             CREATED BY                                      SIZE
cef95d42a67e        6 days ago          /bin/sh -c #(nop) CMD [catalina.sh run]         0 B
2f84c3ab2483        6 days ago          /bin/sh -c #(nop) EXPOSE map[8080/tcp:{}]       0 B
be11664c34d5        6 days ago          /bin/sh -c set -x                               && curl -fSL "$TOMCAT_TGZ_   13.09 MB
df8dde32ea2f        2 weeks ago         /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=https://   0 B
2c367253b67d        2 weeks ago         /bin/sh -c #(nop) ENV TOMCAT_VERSION=8.0.21     0 B
5e5452f6e864        3 weeks ago         /bin/sh -c #(nop) ENV TOMCAT_MAJOR=8            0 B
e00f3a75a41b        3 weeks ago         /bin/sh -c gpg --keyserver pool.sks-keyserver   109.4 kB
8b95d6fd0d61        3 weeks ago         /bin/sh -c #(nop) WORKDIR /usr/local/tomcat     0 B
5d06ddb41dfc        3 weeks ago         /bin/sh -c mkdir -p "$CATALINA_HOME"            0 B
23d0b073332c        3 weeks ago         /bin/sh -c #(nop) ENV PATH=/usr/local/tomcat/   0 B
2a6c03336c25        3 weeks ago         /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/loca   0 B
7f628ae52eec        3 weeks ago         /bin/sh -c apt-get update && apt-get install    164.5 MB
7428e160408e        3 weeks ago         /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=7u7   0 B
22df52eafda5        3 weeks ago         /bin/sh -c #(nop) ENV JAVA_VERSION=7u75         0 B
4d0d7acdf9db        3 weeks ago         /bin/sh -c apt-get update && apt-get install    676.1 kB
b7820d1ee4ee        3 weeks ago         /bin/sh -c apt-get update && apt-get install    44.34 MB
65688f7c61c4        3 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]               0 B
d338bb63f151        3 weeks ago         /bin/sh -c #(nop) ADD file:f9472dcedb28e889f7   122.8 MB
511136ea3c5a        22 months ago                                                       0 B

コマンドが長い場合は省略されてしまうので、その場合は --no-trunc オプションをつけることでコマンドを省略なしで表示できる。

$ docker history --no-trunc tomcat:8.0
IMAGE                                                              CREATED             CREATED BY                                                                                                                     SIZE
cef95d42a67e5abbc7d9d6b3622e89b1ee74c119253dbb4af1f284de105c39f3   6 days ago          /bin/sh -c #(nop) CMD [catalina.sh run]                                                                                        0 B
2f84c3ab24836342a40c92a64ecf89dccea1c239bcba680d114b7d06ea7df8b5   6 days ago          /bin/sh -c #(nop) EXPOSE map[8080/tcp:{}]                                                                                      0 B
be11664c34d591a675d1385ea58021c9d15b5ac0eb27303ba52b5c21d003d2b7   6 days ago          /bin/sh -c set -x                                                                                                              && curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz    && curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc    && gpg --verify tomcat.tar.gz.asc    && tar -xvf tomcat.tar.gz --strip-components=1    && rm bin/*.bat     && rm tomcat.tar.gz*   13.09 MB
df8dde32ea2f80831fb10c5131e29248b7a1d7ffaa2d48b6d7674f4518f4ea3a   2 weeks ago         /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=https://www.apache.org/dist/tomcat/tomcat-8/v8.0.21/bin/apache-tomcat-8.0.21.tar.gz       0 B
2c367253b67d0ef468d6f73ef28afa67c6de6e639cf8b8450685334a0c9261ff   2 weeks ago         /bin/sh -c #(nop) ENV TOMCAT_VERSION=8.0.21                                                                                    0 B
5e5452f6e864a3e28ce424ba7fd7d62e35a5a5a9240e1c489f3e6c41df5abf5a   3 weeks ago         /bin/sh -c #(nop) ENV TOMCAT_MAJOR=8                                                                                           0 B
e00f3a75a41b17a6c5b0ad9d0b179442abb03bdaedf96f3e335d5265602b1188   3 weeks ago         /bin/sh -c gpg --keyserver pool.sks-keyservers.net --recv-keys                                                                 05AB33110949707C93A279E3D3EFE6B686867BA6    07E48665A34DCAFAE522E5E6266191C37C037D42    47309207D818FFD8DCD3F83F1931D684307A10A5    541FBE7D8F78B25E055DDEE13C370389288584E7    61B832AC2F1C5A90F0F9B00A1C506407564C17A3    79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED    9BA44C2621385CB966EBA586F72C284D731FABEE    A27677289986DB50844682F8ACB77FC2E86E29AC    A9C5DF4D22E99998D9875A5110C01C5A2F6059E7    DCFD35E0BF8CA7344752DE8B6FB21E8933C60243    F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE    F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23   109.4 kB
8b95d6fd0d61c61b9ad7cc87d8be1e43da58a83d4379ab5d818385e87c68d56b   3 weeks ago         /bin/sh -c #(nop) WORKDIR /usr/local/tomcat                                                                                    0 B
5d06ddb41dfc068e783871f409d28eaca741043953780c55fc03b199f9fb1504   3 weeks ago         /bin/sh -c mkdir -p "$CATALINA_HOME"                                                                                           0 B
23d0b073332ce84e6015cd5884d4ddf7c178c2902145edaad1d938dfa502d85e   3 weeks ago         /bin/sh -c #(nop) ENV PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin                  0 B
2a6c03336c25d7e548798577be2fcd322cd4599ff949bc78d1d42c8f7f1afc59   3 weeks ago         /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/local/tomcat                                                                          0 B
7f628ae52eec9df9891177702bbd3c44b8442a5f087c69d660b21b688f1bc5fb   3 weeks ago         /bin/sh -c apt-get update && apt-get install -y openjdk-7-jre-headless="$JAVA_DEBIAN_VERSION" && rm -rf /var/lib/apt/lists/*   164.5 MB
7428e160408efe1e37d0710fba2a1777f7beab5411014eabde3a31c9980d3288   3 weeks ago         /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=7u75-2.5.4-2                                                                         0 B
22df52eafda5575c11112c744cda32d60c2ac9b70f97def69ad9f1355cb5d40b   3 weeks ago         /bin/sh -c #(nop) ENV JAVA_VERSION=7u75                                                                                        0 B
4d0d7acdf9dbc175ba89f5a32b08c78a7659ba988c276a92f39dc83d69818e69   3 weeks ago         /bin/sh -c apt-get update && apt-get install -y unzip && rm -rf /var/lib/apt/lists/*                                           676.1 kB
b7820d1ee4ee3aaad7d45bde22f0e2c79e97097384cd4321284a39c04bb4a1f4   3 weeks ago         /bin/sh -c apt-get update && apt-get install -y --no-install-recommends                                                                            ca-certificates                         curl                                    wget                && rm -rf /var/lib/apt/lists/*   44.34 MB
65688f7c61c4e8f3cce67714991d5a6d36d6bb3890e439cfcb5450db5ae9d530   3 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]                                                                                              0 B
d338bb63f1516c639f195833750da8b5b9bbf53a1124a8275088406f3a03724e   3 weeks ago         /bin/sh -c #(nop) ADD file:f9472dcedb28e889f7253817dcd6a0412c51a3fe0dc0fbea98041e426fea6ce0 in /                               122.8 MB
511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158   22 months ago                                                                                                                                      0 B

公式サイトや他のImageでDockerfileが公開されていないケースでも、Historyを見ることで色々と参考にすることができるだろう。

VIコマンドリファレンス

自己参照用のコマンドリファレンス。 必要に応じて随時更新

コマンドモード

移動コマンド

コマンド 説明
h
j
k
l
0 行の先頭へ
^ 行の空白でない先頭へ
$ 行の末尾へ
e 単語の末尾へ
E 単語の末尾へ(句読点を無視)
w 次の単語へ
W 次の単語へ(句読点を無視)
b 前の単語へ
B 前の単語へ(句読点を無視)
[num]+G 指定した行へ
G 最下行へ
[num] + [移動コマンド] 入力数分移動
ctrl+f 次ページへ
ctrl+b 前ページへ
ctrl+d 1/2次へ
ctrl+u 1/2前へ
z + enter カレント行が画面の一番上にくるようにスクロール
z + “.” カレント行が画面の中央にくるようにスクロール
z + “-” カレント行が画面の一番下にくるようにスクロール
H 画面の先頭へ
M 画面の中央へ
L 画面の一番下へ
- 前の行の先頭へ
+ 次の行の先頭へ
t {char} charが次に現れる位置の前まで移動
T {char} charが前に現れる位置の前まで移動
f {char} charが次に現れる位置まで移動
F {char} charが前に現れる位置まで移動
; fコマンドで検索した{char}検索を繰り返す
, fコマンドで検索した{char}検索を逆に戻る

編集コマンド

コマンド 説明
u 最後の変更の取り消し(undo)
U 行を最初の状態に復元
d + [移動コマンド] ある単位でテキストを変更
dd 1行削除
D カーソル移行を削除
x 1文字削除
p カーソルの次の位置に挿入貼り付け
r 1文字置換
R n文字置換 escで終了
y コピー
Y 行をコピー
C カーソル位置から行末まで変更(c$と同じ効果)
ZZ 編集内容を保存して終了
num + [変更コマンド] 数値分だけまとめて処理
~ 大文字小文字を切り替え
J 行を連結
. 直前のコマンドを繰り返す
>G 現在の行以下をまとめてインデント

編集モードへの移行

コマンド 説明
i カーソル位置から
I 行の先頭から
a カーソル位置の次から
A 行の末尾から
s カーソル位置の文字を削除して
S 行を削除して
o カーソル位置の上の行から
O カーソル位置に下の行から
c + [移動コマンド] ある単位でテキストを削除して
cc 1行まるごと(行が消えて編集モードになる)を削除して

その他コマンド

コマンド 説明
ZZ 編集内容を保存して終了

exコマンド

exコマンド 説明
:e! 編集した内容を前回保存時の状態に戻す
:q 終了
:q! 未保存の編集箇所があっても保存せず終了
:w 上書き保存
:w! 上書き保存
:w [file name] ファイル名を指定して保存
:w! [file name] ファイル名を指定して上書き保存
:wq [file name] ファイル保存して終了
:! [command] shellコマンドの実行
:sh シェルに移行。ctrl+dかexitでviに戻る
:set nu 行番号を表示
:set wm=[num] wrap margin(自動改行の文字数)の変更

入力モード

コマンド 説明
esc 入力モードを抜ける

MongoDB サーバーをバックグラウンドで起動する

課題

コマンドラインからmongodを起動する際、バックグラウンドで起動したい。

対応

--forkオプションを使用する。 --forkオプションは必ずログの出力先と同時に指定する必要があり、--logpathで出力先を直接指定するか、--syslogオプションでsyslogに出力する。

$ mongod --fork --logpath /data/db/mongod.log

MongoDBのシェル実行結果をインデント表示する

課題

シェルスクリプトで操作しているが結果が見づらいのでインデント表示したい。

対応

pretty()を使う。

> db.values.find().sort({close:-1}).limit(1).pretty()
{
	"_id" : ObjectId("4d094f69c96767d7a01a110d"),
	"exchange" : "NASDAQ",
	"stock_symbol" : "BORD",
	"date" : "2000-09-25",
	"open" : 7500,
	"high" : 7500,
	"low" : 7500,
	"close" : 7500,
	"volume" : 0,
	"adj close" : 6679.94
}
/* Responsive: yes */