全力で怠けたい

怠けるために全力を尽くしたいブログ。

Mac で tmux のプリフィックスを ctrl-b から caps lock に変えたら tmux 生活がすごく捗るようになったメモ。

はじめに

Mac で tmux のプリフィックスctrl-b から caps lock に変えたら tmux がすごく捗るようになったメモ。

自分は JIS 配列の Magic Keyboard を Mac に接続して使ってて最近は tmux を使い始めたのだけど tmux のプリフィックスctrl-b が打ちにくいというかなんか指が疲れるのを感じたので、tmux のプリフィックスctrl-b から caps lock に変えたらプリフィックスがすごく打ちやすくなって指が疲れやすいのも解消されて tmux 生活がすごく捗るようになったのでやり方をメモしておく。

このやり方は Home キーの機能を無効にしてしまうけど Mac のキーボードはもともと Home キーはないし個人的にはまったく不便は感じていない。普段は Vim キーバインドで作業してて 0 で行頭に移動するし Vim キーバインドじゃないとこでも大概は ctrl-a で行頭に移動できるし。

あとこのやり方は Karabiner-Elements を使うので Karabiner-Elements は事前にインストールしておく。

あと tmux とかのバージョンをメモしておく。

tmux のバージョン。

$ tmux -V
tmux 3.2

macOS のバージョン。

$ sw_vers | grep Product
ProductName:    macOS
ProductVersion: 11.3

Karabiner-Elements のバージョン: 13.4.0

tmux のプリフィックスを ctrl-b から caps lock に変更する

Macシステム環境設定 > キーボード > キーボードタブ > 修飾キー を表示して Caps Lock キー のアクションを アクションなし にして OK ボタンを押す。

f:id:ebc_2in2crc:20210508160501p:plain

Karabiner-Elements の Preferences > Simple modifications タブ を表示と Add item ボタンを押して、From keycaps_lock にして To keyhome にする。

f:id:ebc_2in2crc:20210508160516p:plain

以下を .tmux.conf に追記と tmux source-file </path/to/.tmux.conf> コマンドを実行すると caps lock が tmux のプリフィックスとして機能するようになる。すごく捗る。

set -g prefix Home
unbind C-b
bind-key Home send-prefix

参考サイト

プロセスが使う CPU を取得したり指定する taskset コマンドの使い方のメモ。

プロセスが使う CPU を取得したり指定する taskset コマンドの使い方のメモ。

taskset コマンドのバージョン。

$ taskset --version
taskset from util-linux 2.34

taskset コマンドの使い方

taskset コマンドはプロセスが使う CPU を取得したり指定するコマンド。

自分は普段そんなに使わなくてたまに使うくらいなんだけど、たまにしか使わなくてよく使い方を忘れて調べたりするのでメモしておく。

既存のプロセスが使える CPU を取得する

-p <PID> を指定するとプロセスが使える CPU を取得する。

現在のシェルのプロセスが使える CPU を取得するのはこんな感じ。 0-3 の表示はシェルのプロセスが #0, #1, #2#3 の CPU が使えるということ。

$ taskset -c -p $$
pid 7351's current affinity list: 0-3

プロセスが使える CPU を指定してプロセスを起動する

taskset コマンドはプロセスが使える CPU を指定してコマンドを起動できる。

-c <CPU> を指定するとプロセスが使える CPU を指定してコマンドを起動する。 bash#0 の CPU だけを使えるようにコマンドを起動するのはこんな感じ。

$ taskset -c 0 bash -c 'taskset -c -p $$'
pid 8617's current affinity list: 0

bash#0#1 の CPU を使えるようにコマンドを起動するのはこんな感じで CPU をカンマ (,) 区切りで指定する 。

$ taskset -c 0,1 bash -c 'taskset -c -p $$'
pid 8625's current affinity list: 0,1

CPU はハイフン (-) で任意の範囲の CPU を指定できる。 bash#0#1 の CPU を使えるようにコマンドを起動するのはこんな感じ。

$ taskset -c 0-1 bash -c 'taskset -c -p $$'
pid 8627's current affinity list: 0,1

CPU はカンマ (,) とハイフン (-) の両方で指定することができる。 bash#0,#1#3 の CPU を使えるようにコマンドを起動するのはこんな感じ。

$ taskset -c 0-1,3 bash -c 'taskset -c -p $$'
pid 8633's current affinity list: 0,1,3

<start>-<end>:<stride> みたいに指定すると <start> から <end> の範囲で <stride> ごとの CPU を使うように指定できる。

$ taskset -c 0-10:3 bash -c 'taskset -c -p $$'
pid 8634's current affinity list: 0,3,6,9

既存のプロセスが使える CPU を指定する

taskset コマンドは既存のプロセスが使える CPU を変更できる。

-p <CPU> <PID> を指定すると <PID> のプロセス ID のプロセスが使える CPU を <CPU> に変更する。

現在のシェルのプロセスが使える CPU を取得すると 0-3 が表示してシェルのプロセスが #0, #1, #2#3 の CPU が使えるのが分かるけど、taskset -c -p 0 $$ を実行したあとは #0 の CPU だけが使えるようになる。

$ taskset -c -p 0 $$
pid 7351's current affinity list: 0-3
pid 7351's new affinity list: 0

$ taskset -c -p $$
pid 7351's current affinity list: 0

CPU はビットマスクで指定したり表示もできる

taskset コマンドは CPU の指定はデフォルトではビットマスクで指定する。 #0 の CPU を使うならこんな感じで 0 を指定するし #0#1 の CPU を使うなら 3 を指定するけど、 -c オプションを指定するとビットマスクじゃなくて数値のリストで CPU を指定できる。

#0#1 の CPU を使うならこんな感じで数値のリストでも指定できるしビットマスクでも指定できる。

$ taskset -c 0,1 bash -c 'taskset -c -p $$'
pid 8736's current affinity list: 0,1

$ taskset 3 bash -c 'taskset -c -p $$'
pid 8738's current affinity list: 0,1

#0, #1#3 の CPU を使うならこんな感じで数値のリストでも指定できるしビットマスクでも指定できる。

$ taskset -c 0,1,3 bash -c 'taskset -c -p $$'
pid 8873's current affinity list: 0,1,3

$ taskset b bash -c 'taskset -c -p $$'
pid 8869's current affinity list: 0,1,3

既存のプロセスが使える CPU を取得するのは CPU を数値のリストじゃなくてビットマスクで表示することもできる。 -c オプションを指定しなかったら CPU が使える CPU を数値のリストじゃなくてビットマスクで表示する。

$ taskset -c 0,1,3 bash -c 'taskset -p $$'
pid 8880's current affinity mask: b

参考サイト

入力行をいろんなやり方で連結したり分割する 🍡dango コマンドを作りました。

入力行をいろんなやり方で連結したり分割する 🍡dango コマンドを作りました。

github.com

🍡dango コマンドとは?

dango コマンドは入力行の行数、文字数、バイト数あるいは単語数を数えて入力行を任意の数で連結したり分割するツールです。

dango コマンドは標準入力を読み取って、読み取った要素が指定した数になるごとにそれを1行にまとめて標準出力に出力します。 このへんは実際に使ってみるとイメージしやすいと思うのでこのあと使い方を書いてみます。

$ cat << EOF | dango
━
🟠
🟡
🟢
━
EOF
━🟠🟡🟢━

使い方

行数を数えて入力行を連結したり分割する

-l オプションを指定すると行数を数えて入力行を連結したり分割します。

連結したり分割する行数は -n オプションで指定します。 -n オプションはデフォルト 00 を指定すると入力行をすべて連結します。

$ seq 1 4 | dango -l -n 2
12
34

$ seq 1 4 | dango -l
1234

入力行はデリミターを指定して連結したり分割することもできます。

$ echo 'dango' | dango -c -d '-'
d-a-n-g-o

$ seq 1 4 | dango -l -d '-'
1-2-3-4

文字数を数えて入力行を連結したり分割する

-c オプションを指定すると文字数を数えて入力行を連結したり分割します。

$ echo '━🟠🟡🟢━' | dango -c -n 1
━
🟠
🟡
🟢
━

$ echo '━🟠🟡🟢━' | dango -c -n 3
━🟠🟡
🟢━

バイト数を数えて入力行を連結したり分割する

-b オプションを指定するとバイト数を数えて入力行を連結したり分割します。

$ echo 'dango' | dango -b -n 1
d
a
n
g
o

$ echo 'dango' | dango -b -n 3
dan
go

単語数を数えて入力行を連結したり分割する

-w オプションを指定すると単語数を数えて入力行を連結したり分割します。

$ echo 'Dango is a program that concatenates and splits standard input.' | dango -w -n 2 -d ' '
Dango is
a program
that concatenates
and splits
standard input.

インストール方法

Homebrew

$ brew tap ebc-2in2crc/tap
$ brew install dango

Developer

Go 1.16 以降。

$ go install github.com/ebc-2in2crc/dango@latest

Go 1.15 以前。

$ go get -u github.com/ebc-2in2crc/dango/...

手動でのインストール

https://github.com/ebc-2in2crc/dango/releases からダウンロードした zip ファイルを展開した中にあるファイルをパスの通ったディレクトリに入れる。

🍡dango を作った動機

入力行を連結したり分割するコマンドはすでにいろいろあるけど用途ごとにコマンドを使い分けるのが少し面倒だなーと感じて 🍡dango コマンドを作りました。 車輪の再発明です。 あ、フィルターコマンドを作ってみたかったというのもあるかも。

🍡dango コマンドができるすべてのことは tr, xargs, foldsed で同じことができます。そのへんは README に。

まとめ

バグとかあると思いますし「こーしたら使いやすくなる」とかあったら issue とか PR 作ったり声かけてもらえると嬉しいです。

ということで 🍡dango コマンドの紹介でした。

iTerm2 のすべてのウィンドウを表示したり非表示にするホットキーのメモ。

iTerm2 のすべてのウィンドウを表示したり非表示にするホットキーが便利なのでメモ。

このメモは Build 3.4.6 で動作を確認しているけどたぶんずっと前から使えた気がする。

iTerm2 のすべてのウィンドウを表示したり非表示にするホットキー

iTerm2 のすべてのウィンドウを表示したり非表示にするホットキーだけど、このホットキーは使う前に有効にしておく。

Preferences > Keys > HotKeyShow/hide all windows with a system-wide hotkey にチェックを入れると iTerm2 のウィンドウを表示したり非表示にするホットキーが有効になる。

f:id:ebc_2in2crc:20210502134507p:plain

自分はホットキーはデフォルトの Cmd + Esc のままで使ってるけどホットキーは変えることができる。 HotKey のところをクリックして Recording の表示にしてからキーをタイプするとタイプしたキーがホットキーとして使えるようになる。

パイプを通るデータの進捗をモニタリングする pv コマンドでよくやる使い方とオプションのメモ。

パイプを通るデータの進捗をモニタリングする pv コマンドでよくやる使い方とオプションのメモ。

pv コマンドのバージョン。

$ pv --version
pv 1.6.6 - Copyright 2015 Andrew Wood <andrew.wood@ivarch.com>

Web site: http://www.ivarch.com/programs/pv.shtml

This program is free software, and is being distributed under the
terms of the Artistic License 2.0.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

pv コマンドでよくやる使い方とオプション

pv コマンドはパイプを通るデータの進捗、たとえばパイプを通ったデータサイズ・パイプを通る速度・進捗とかをモニタリングするコマンド。

だいたいのときはオプションとかは指定しないでただ pv を実行するだけで事足りるけどオプションを指定すると出力する内容とかをかなり細かく指定できる。 そのへんをざっくりとメモしておく。

インストール

Macbrew で pv コマンドをインストールできる。

$ brew install pv

Ubuntu なら apt で pv コマンドをインストールできる。

$ sudo apt install pv

使い方

基本的な使い方

任意のコマンドをパイプで pv コマンドに接続して任意のコマンドが出力しているデータサイズなどを表示する。

たとえば cat /dev/zero | pv > /dev/null みたいに実行すると cat コマンドで /dev/zero を標準出力に流すのをモニタリング表示する。

$ cat /dev/zero | pv > /dev/null
11.4GiB 0:00:04 [2.85GiB/s] [      <=>                               ]

pv コマンドを使うときはモニタリングするコマンドの表示は興味がないことが多いのでコマンドの出力は /dev/null にリダイレクトしちゃうことが多いけど、pv コマンドは標準入力から読み込んだデータをそのまま標準出力に書き出すので コマンドを pv コマンドのあとに接続することもできる。

$ cat /dev/zero | pv | tr '\0' 'a' | fold -w 40 | head -n 1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 128KiB 0:00:00 [15.6MiB/s] [ <=>                                    ]

pv コマンドは pv [OPTION] [FILE] ... みたいにファイルを指定して cat コマンドみたいに実行することもできる。

$  pv /dev/zero > /dev/null
 151GiB 0:00:06 [24.4GiB/s] [         <=>                            ]

pv コマンドの表示の見方

pv コマンドはデフォルトでは通過したデータサイズ、経過時間、データの通過速度、プログレスバーとコマンドの完了までの予想残り時間を表示する。

$ cat /dev/zero | pv > /dev/null
11.4GiB 0:00:04 [2.85GiB/s] [      <=>                               ]

この実行例は 11.4GiB が通過したデータサイズ、0:00:04 が経過時間、2.85GiB/s がデータの通過速度、[ <=> ]プログレスバー。 あとこの実行例は pv コマンドが総データサイズを確定できないのでコマンドの完了までの予想残り時間は表示していない。

こんな感じで pv コマンドをパイプの先頭に実行すると pv コマンドが総データサイズを確定できてコマンドの完了までの予想残り時間を表示する。

$ pv large.log | gzip > large.log.gz
1.00GiB 0:00:06 [ 157MiB/s] [==============================>         ] 48% ETA 0:00:02  

pv コマンドでパイプのなかの2箇所以上をモニタリングする

pv コマンドはパイプのなかの何箇所でもモニタリングできる。

pv コマンドでパイプの中の2箇所以上をモニタリングするときは -c オプションと -N オプションを指定すると表示が見やすくなる。 -C オプションを指定するとモニタリングしてるすべての箇所が常に表示して、 -N オプションで適当なプリフィックスを指定すると指定したプリフィックスがそれぞれのモニタリングのところに表示する。

$ cat /dev/zero | pv -c -N cat | tr '\0' 'a' | pv -c -N tr | fold -w 60 | pv -c -N fold > /dev/null
      cat: 1.05GiB 0:00:07 [ 137MiB/s] [           <=>               ]
       tr: 1.05GiB 0:00:07 [ 137MiB/s] [           <=>               ]
     fold: 1.07GiB 0:00:07 [ 139MiB/s] [           <=>               ]

pv コマンドのよく使うオプション

-h, --help オプション: ヘルプ

-h オプションか --help オプションを指定すると pv コマンドの使い方を表示する……んだけど man pv が使えないときにしか使わない。

-c, --cursor オプション: カーソル位置のエスケープシーケンスを使う

-c オプションか --cursor オプションを指定すると pv コマンドがモニタリングの表示にカーソル位置のエスケープシーケンスを使う。

pv コマンドで長いパイプラインの2箇所以上をモニタリングするときは必ず指定するくらいのオプション。

-N, --name オプション: プリフィックスを表示する

-N オプションか --name オプションでプリフィックスを指定するとモニタリングの表示の前に指定したプリフィックスを表示する。

pv コマンドで長いパイプラインの2箇所以上をモニタリングするときは必ず指定するくらいのオプション。 -N オプションも --name オプションも指定しないときはこんな感じでモニタリング表示するけど、

$ cat /dev/zero | pv -c | tr '\0' 'a' | pv -c | gzip | pv -c > /dev/null
 1.05GiB 0:00:07 [ 137MiB/s] [           <=>                         ]
 1.05GiB 0:00:07 [ 137MiB/s] [           <=>                         ]
 1.07GiB 0:00:07 [ 139MiB/s] [           <=>                         ]

-N オプションか --name オプションでプリフィックスを指定するとこんな感じでプリフィックスがモニタリングの前に表示するので、モニタリングの表示がパイプラインのどの箇所のものかが分かりやすくなる。

$ cat /dev/zero | pv -c -N cat | tr '\0' 'a' | pv -c -N tr | fold -w 60 | pv -c -N fold > /dev/null
      cat: 1.05GiB 0:00:07 [ 137MiB/s] [           <=>               ]
       tr: 1.05GiB 0:00:07 [ 137MiB/s] [           <=>               ]
     fold: 1.07GiB 0:00:07 [ 139MiB/s] [           <=>               ]

-i, --interval オプション: 表示を更新する間隔を指定する

pv コマンドはデフォルトは1秒ごとにモニタリング表示を更新するけど、-i オプションか --interval オプションでモニタリング表示を更新する間隔を指定できる。

-i オプションと --interval オプションは 0.1 みたいに 0 から 1 の範囲で10進数で指定する。

`-i 0.3P みたいに指定すると 0.3 秒間隔でモニタリング表示を更新する。

$ cat /dev/zero | pv -i 0.3 > /dev/null
13.4GiB 0:00:02 [2.97GiB/s] [              <=>                       ]

-L, --rate-limit オプション: データの通過バイトを制限する

-L, オプションか --rate-limit オプションで1秒間あたりでのデータの通過バイト数を制限する。

自分の環境は pv コマンドを -L オプションを指定しないときは cat /dev/zero すると1秒間あたり 2.70GiB くらいのデータが pv コマンドを通過するけど、

$ cat /dev/zero | pv > /dev/null
11.0GiB 0:00:04 [2.70GiB/s] [      <=>                               ]

-L 100 みたいにすると1秒間あたりのデータの通過バイトを100バイトに制限する。

$  cat /dev/zero | pv -L 100 > /dev/null
 300 B 0:00:03 [98.7 B/s] [     <=>                                  ]

-L, オプションか --rate-limit オプションは 1K みたいにバイト数の単位を指定することができる。

たとえば -L 1024 みたいに指定するのは -L 1K みたいに同じ意味を短く指定できる。

$  cat /dev/zero | pv -L 1K > /dev/null
10.0KiB 0:00:10 [1.07KiB/s] [                <=>                     ]

-L, オプションか --rate-limit オプションで指定できるバイト数の単位をメモしておく。

単位 意味
K キビバイト (KiB)
M メビバイト (MiB)
G ギビバイト (GiB)
T テビバイト (TiB)

-q, --quiet オプション: 出力を抑制する

-q オプションか --quiet オプションを指定すると pv コマンドがモニタリング結果を表示しなくなる。

-L, オプションか --rate-limit オプションでデータの通過速度を制限するときに組み合わせて使うことが多い気がする。

表示のカスタマイズ

pv コマンドはモニタリング結果の表示をオプションでいろいろカスタマイズできる。よく使うやつをメモしておく。

pv コマンドはデフォルトでは通過したデータサイズ、経過時間、データの通過速度、プログレスバーとコマンドの完了までの予想残り時間を表示する。 ちなみにこれは pv -pterb みたいに実行するときと同じ。

$ cat /dev/zero | pv -pterb > /dev/null
11.4GiB 0:00:04 [2.85GiB/s] [      <=>                               ]

pv -t みたいにするとパイプラインを起動してからの経過時間を表示する。

実行時間が長そうなパイプラインに仕込んでおくと経過時間をリアルタイムで表示するのが便利。

$ sleep 10m | pv -t
0:00:04

shebang はシェル以外の実行可能ファイルも指定できるメモ。

shebang はシェル以外の実行可能ファイルを指定できるのを知ったので書いておく。

shebang はシェル以外の実行可能ファイルも指定できる

自分はなんとなく shebangシェルスクリプトにしか書いてこなかったけど、shebangスクリプトを読み込むインタプリタを指定するものなので普通にシェル以外の実行可能ファイルを指定することができる。

ちなみに shebangシェルスクリプトの先頭行に書くやつ。こういうの。

#!/bin/bash

sed スクリプトファイルの shebang

当たり前だけど sedスクリプトファイルは shebang を書くことができる。

例として入力の先頭行と最終行を削除する sedスクリプトを作って実行してみる。 入力の先頭行と最終行を削除する sedスクリプトdelete-first-and-last-lines.sed という名前で保存と実行権限を付けておくと、普通に実行可能ファイルみたいにして実行できる。

$ cat ./delete-first-and-last-lines.sed
#!/usr/bin/env sed -f

1d
$d

$ seq 1 5 | ./delete-first-and-last-lines.sed
2
3
4

shebang を書いている sedスクリプトファイルは普通に -f オプションで指定することもできる。

$ seq 1 5 | sed -f ./delete-first-and-last-lines.sed
2
3
4

awk スクリプトファイルの shebang

当たり前だけど awkスクリプトファイルも shebang を書くことができる。

例として入力の自乗を表示するスクリプトを作って実行してみる。 入力の自乗を表示する awkスクリプトpow.awk という名前で保存と実行権限を付けておくと、普通に実行可能ファイルみたいにして実行できる。

$ cat ./pow.awk
#!/usr/bin/env awk -f
{printf("%d\n", $0*$0)}

$ seq 1 5 | ./pow.awk
1
4
9
16
25

shebang を書いている awkスクリプトファイルは普通に -f オプションで指定することもできる。

$ seq 1 5 | awk -f ./pow.awk
1
4
9
16
25

shebang に書くパス

shebang#!/usr/bin/env sed -f にしてるけど #!/usr/bin/sed -f みたいに自分の環境での sed のパスをベタで書いてもちゃんと動く。 こういう書き方は可搬性は下がっちゃうけど、自分は sed とか awkスクリプトファイルを普段自分が作業している環境以外に持っていって動かすことはほとんどないので、こういう書き方でもいいかなーって思ってる。

参考サイト

Docker を Ubuntu にインストールする手順のメモ。

Docker を Ubuntu にインストールする手順のメモ。

Docker は mac OS 上の VirtualBox で動かしてる Ubuntu にインストールしたのでそのへんのバージョンを書いておく。

macOS のバージョン。

$ sw_vers | grep Product
ProductName:    macOS
ProductVersion: 11.2.3

VirtualBox のバージョン。

バージョン 6.1.18 r142142 (Qt5.6.3)

Ubuntu のバージョン。

$ cat /etc/os-release | grep -w VERSION
VERSION="20.04.2 LTS (Focal Fossa)"

インストールした Docker のバージョン。

$ docker version
Client: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:18:20 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:16:15 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker を Ubuntu にインストールする手順

自分は普段は Mac を使ってて自分で Docker を Ubuntu にインストールすることはほとんどなくて毎回「あれ、どうやるんだっけ」みたいになる。 たまたま少し前に Docker を Ubuntu にインストールする機会があったので、Docker を Ubuntu にインストールする手順をメモしておく。

この手順は apt で安定版の Docker をインストールしていく。

Docker リポジトリを設定する

まず Docker リポジトリを設定していく。

apt のパッケージ一覧を更新して apt-transport-https, ca-certificates, curl, gnupg と lsb-release をインストールしていく。

$ sudo apt update

$ sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Docker の公式 GPG 鍵を追加していく。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Docker の安定版のリポジトリを設定していく。 arch=amd64 のところは Ubuntu が動いているマシンが搭載している CPU のアーキテクチャに応じて arch=armhf とか arch=arm64 に変える。

$ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker をインストールする

Docker をインストールしていく。

$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Docker のインストールが終わったら docker container run hello-world コマンドを実行して hello-world コンテナがちゃんと動くのを確認していく。

$ docker container run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

以上。

参考サイト