はじめに
※本記事は、非エンジニアである筆者がKubernetesを学習する中でのアウトプット(備忘録)です。
本番運用のベストプラクティスではなく、「理解の整理」を目的としています。
先日、Kubernetes入門として以下の記事を書きました。
【備忘】非エンジニアのためのKubernetes入門:製品トラブル時に理解しておくべき基礎知識
実際にKubernetesの理解を深めていく中で、より詳細に学習した内容をアウトプットとして残します。
本記事はシリーズ化を想定しており、第2回となる今回は、Kubernetesを触る前の前提知識である「Linux」と「Docker」についてです。
1. Linux
「Linuxとは何か」については、以下の記事が非常に参考になりました。
なぜKubernetes学習にLinux知識が必要なのか?
Kubernetes自体がLinux上で動作するシステムであり、トラブル調査などでPod(コンテナ)の中に入って操作する際、命令を出す「シェル」の操作が不可欠だからです。
ここでは、最低限覚えておきたい「シェル基本コマンド」を整理します。
シェル基本コマンド (Linux Basic Commands)
トラブルシューティング等でよく使うコマンド一覧です。
| コマンド名 | 使用用途 | 詳細・イメージ | 使用例 |
|---|---|---|---|
ls |
一覧を表示 | ファイルやフォルダを見たい時に使用。ls -l(詳細表示)、ls -a(隠しファイル表示) |
ls -la |
cd |
ディレクトリを移動 | フォルダの中に入ったり出たりする。cd ..(一つ上へ)、cd ~(ホームへ) |
cd test_dir |
pwd |
現在位置を表示 | 「今どこのフォルダにいるんだっけ?」と迷ったら実行 | pwd |
touch |
空ファイルの作成 | 中身のないファイルを作る。既存ファイルなら更新時間を上書き | touch text.txt |
cat |
内容を表示 | ファイルの中身をサッと確認したい時に使う | cat text.txt |
rm |
削除 | ⚠️ ゴミ箱に入らず即完全削除されるので注意。rm -rf は強制全削除なので特に注意 |
rm text.txt |
ps |
プロセス表示 | Windowsのタスクマネージャーのようなもの。ps auxで全プロセスを確認可能 |
ps aux |
man |
マニュアル表示 | コマンドの使い方がわからない時に見る説明書 | man ps |
grep |
文字列を検索 | ファイルの中に特定の文字が含まれているか探す。 ログ調査で「error」を探す時などに必須 |
grep "error" app.log |
tail |
末尾を表示 | ファイルの最後だけを表示する。tail -f でログをリアルタイム監視できる |
tail -f app.log |
より細かいコマンドや仕組みについては、以下のブログにまとめています。
【初心者向け】これだけは覚えておきたいLinux基本コマンド&仕組みまとめ
2. ネットワークの必須知識:通信のルール
Kubernetesを理解する上で、ネットワークの知識も避けては通れません。
なぜネットワーク知識が必要なのか?
Kubernetesの最大の役割は「バラバラの箱(Pod)をネットワークで繋いで、一つのサービスとして外に見せること」だからです。
ここではネットワーク用語を、役割ごとにイメージしやすい言葉で整理しました。
① 住所と識別(IPアドレス・MACアドレス)
-
IPアドレス: データの届け先となる「ネット上の住所」
- kubernetesではPod(最小単位の箱)ひとつひとつにこの住所が割り振られます
-
MACアドレス: 機器そのものに刻まれた「シリアル番号」
- 住所(IP)は引っ越せば変わりますが、シリアル番号(MAC)は変わりません
② データの運び方(TCP/IP・ポート番号)
- TCP/IP: 荷物を確実に届けるための「配送手順(ルール)」
-
ポート番号: 住所(マンション)の中にある「部屋番号」
- IPアドレスでマンションまでは特定できますが、どの部屋(機能)に用事があるかを指定するのがポート番号
- 例:Webサイトなら80番、データベースなら3306番など
③ 名前解決とセキュリティ(DNS・HTTPS)
-
DNS: 「ドメイン名(google.comなど)」を「IPアドレス」に変換する「電話帳」
- kubernetes内部の通信では、Podの再起動等でIPアドレスが変わっても大丈夫なように、DNSによる名前解決が頻繁に行われます。
- HTTPS: 通信を暗号化して守るルール
3. Docker
「Dockerとは何か」の基礎概念については、以下の記事を参照ください。
【備忘】(非エンジニア向け)Dockerとは?5分でわかる基礎知識と使うべき理由
ここでは、実際に手を動かすための基本コマンドをアウトプットします。
Docker基本コマンド
1. イメージの操作 (Image Operations)
「イメージ」は、コンテナを作るための**「金型(設計図)」**です。
-
Dockerイメージを取得 (Pull)
インターネット上のレジストリからイメージを手元にダウンロードします。
docker pull nginx
-
Dockerイメージを表示 (List)
手元にある金型一覧を表示します。
docker images
- Dockerイメージの履歴を表示 (History)
docker history nginx
-
Dockerイメージを削除 (Delete)
不要になった金型を捨てます。
docker rmi nginx
# 削除されたか確認
docker images
2. コンテナの操作 (Container Operations)
「コンテナ」は、イメージ(金型)から作られた**「実体(たい焼き)」**です。
-
nginxサーバーのコンテナを起動 (Run)
nginxイメージからコンテナを作成して起動します。
docker run -p 80:80 --name nginx nginx
-
作動中のコンテナ一覧を表示 (List)
現在動いている実体を確認します。
docker ps
# 停止中のコンテナも含めて全て表示する場合
docker ps --all
-
コンテナのログを表示 (Log)
正常に動いているか、エラーが出ていないかを確認します。
docker logs nginx
-
コンテナの詳細情報を見る (Inspect)
IPアドレスや設定などのメタデータを確認します。
docker inspect nginx
-
コンテナを停止・削除 (Stop & Remove)
stopは電源オフ、rmは廃棄です。
# 停止
docker stop nginx
# 削除(停止してからでないと削除できません)
docker rm nginx
3. 少し応用的な起動オプション
-
バックグラウンドで起動 (
--detach/-d)
コンテナを裏側でひっそりと動かし続けます(通常はこちらを使います)。
docker run -d -p 80:80 --name nginx nginx
-
作動中のコンテナの中に入る (
exec -it)
動いているコンテナの中にログインして、Linuxコマンドを実行します。トラブルシューティングで非常によく使います。
# コンテナの中のシェル(sh)を起動
docker exec -it nginx sh
# コンテナから出る
exit
-
環境変数を設定して起動 (
--env/-e)
設定値を外から渡して起動します。
docker run -e TEST_ENV=hello_world -d --name nginx nginx
# 確認(中に入ってenvコマンドを打つのと同じ)
docker exec -it nginx env
-
ポート番号を変えて起動 (
-p)
[ホスト側のポート]:[コンテナ側のポート] で指定します。
以下の場合、自分のPCのポート8080にアクセスすると、コンテナのポート80に繋がります。
docker run -p 8080:80 -d --name nginx nginx
# ブラウザやcurlでアクセス確認
curl localhost:8080
4. イメージの作成 (Build)
自分で書いた設計図(Dockerfile)からイメージを作成します。
※カレントディレクトリに Dockerfile が必要です。
# ドット(.)は現在のディレクトリを指します
docker build --tag dockerfile_hello .
# 自作イメージからコンテナを起動
docker run -d -p 9090:80 --name hello_v2 dockerfile_hello
お掃除コマンド(クリーンアップ)
いろいろ試していると不要なコンテナやイメージが溜まるので、一括削除するコマンドです。
※強力な削除コマンドなので注意して使用してください。
- 停止中のコンテナ等を削除
docker system prune
-
【要注意】全コンテナを強制削除
起動中のコンテナも含めて無理やり削除します。
docker rm -vf $(docker ps -a -q)
- 【要注意】全イメージを強制削除
docker rmi -f $(docker images -a -q)
今回はここまでです。
次回から、kubernetesの機能(Pod)について触れていきます。