Contents
仮想マシン・コンテナの概念と利用
コンテナ型仮想化とは
サーバ仮想化技術のひとつです。
コンテナの特徴(仮想マシンとの違い)
- 高速な起動と停止が可能
- OSカーネルを共有する軽量な仮想化
- アプリケーションレベルの分離
コンテナ技術を管理するソフトウェア
- Docker(基本的なソフトウェア)…Docker社が開発したコンテナ仮想化を用いてアプリケーションの開発や実行する環境を構築できるプラットフォーム
- Kubernetesクバネティス…Googleが開発したコンテナ運用管理を支援するオープンソースのソフトウェア
dockerコマンド
Dockerコマンド実行の前提条件
- Dockerデーモン(
dockerd
)が動作していること。 - コマンドを実行するユーザーがDockerグループに属していること(または管理者権限)。
docker-compose
コマンドについても同様に、Dockerデーモンとユーザー権限が必要です。
docker run | 新しいコンテナを作成して起動する イメージから新しいコンテナを作成し、指定されたコマンドを実行して起動する | |
docker start | 既存の停止したコンテナを再起動する 停止しているコンテナを起動するだけ(新しいコンテナは作らない) | |
docker stop | コンテナを安全に停止 | |
docker kill | コンテナを強制的に停止 | |
docker ps | 実行中のコンテナの確認 | # 停止中のコンテナを含めて確認 docker ps -a |
docker rm <コンテナID> | 停止中のコンテナを削除 | |
docker attach | コンテナの標準入出力に接続 | |
docker exec [オプション] <コンテナ名またはID> <コマンド> | 実行中のコンテナ内でコマンドを実行 | |
docker pull | Docker Hubからダウンロード | |
docker push | Docker Hubにアップロード | |
docker images | イメージ一覧表示 |
Dockerfileとdocker-compose.ymlの違い
docker-compose コマンドでできること
- docker-compose.yml を読み込み
- 設定に従ってサービスを操作
- Dockerfile からビルドも実行
docker-compose.yml は「何をどう動かすか」を定義し、docker-compose コマンドはその定義に従って実際の操作を行います。
通常 docker-compose
コマンドを実行するディレクトリに docker-compose.yml
ファイルが必要です
→docker-compose.ymlが存在しない場合
no configuration file provided: not found
「docker-compose up」
コマンドは、docker-compose.yml
に記述された複数のサービス(コンテナ)を一括で構築・起動するためのコマンド
docker-compose up [オプション] [サービス名]
# デタッチモード(バックグラウンド)で実行
docker-compose up -d
# コンテナを起動する前にイメージを再構築
docker-compose up --build
docker-compose logs コンテナのログを確認するためのコマンド
docker-compose logs [オプション] [docker-compose.ymlで定義されたサービス名(コンテナ名ではない)]
# webサービスのタイムスタンプ付きでリアルタイム監視し、最新20行だけ表示
docker-compose logs -f -t --tail=20 web
docker-compose execでサービス何でコマンドを実行、対話形式に入る
docker-compose exec [オプション] <docker-compose.ymlで定義されたサービス名(コンテナ名ではない)> <コマンド>
ブートプロセスとsystemd
- 電源投入
- ファームウェア(BIOS、UEFI)動作…マザーボード上のNVRAM(不揮発性メモリ)
- ブートローダを呼び出す…現在GRUB2がよく使用される
- 優先順位に従って各デバイスの先頭セクタのMBRを読み込む
- ブートローダ
- kernel(Linuxの基本システム)とRAMディスク
- ブートローダは起動されると、記憶装置(HDD)内のカーネルをロードし、制御を移します。
- カーネルを起動
- メモリ初期化やハードウェア認識
- systemd、initでサービス(sshd、httpd、mysqld)起動
- init:SysVinit(Sustem Five Init)将来
- systemd:現在のLinuxで採用
- ログインプロンプト表示
UEFI
Unified Extensible Firmware Interface
IntelがBIOSにかわるインターフェイスとして考案したのが、UEFIです。
- GUIでの操作をサポート
- 3TBを超える大容量HDDからの起動をサポート
systemd
サービスを並列に起動することにより、起動が高速
Unit(処理単位)
- systemctlで制御
- 以下のタイプがあります
- service(各種サービス起動)httpd、sshd等
- device(デバイス)
- mount(ファイルシステム)/etc/fstab
- swap(スワップ領域の有効化。ディスクをメモリに)
- target(複数Unitをグループ化)
ターゲット
ターゲット (systemd) | ランレベル (init) | |
---|---|---|
default.target | – | システム起動時のデフォルトのターゲット |
sysinit.target | – | システム起動時の初期段階のセットアップを行う |
poweroff.target | 0 | システム終了 |
rescue.target | 1 | レスキュー(シングルユーザー)モード |
multi-user.target | 2,3,4 | CUIログイン |
graphical.target | 5 | グラフィカルログイン |
reboot.target | 6 | システム再起動 |
systemctl
systemdが稼働するシステムの各サービスの管理はsystemctlコマンドを使用します。
systemctl サブコマンド Unit名
enable | 自動起動を有効 |
get-default | 次回起動時のターゲットを表示 |
set-default | 次回起動時のターゲットを設定 |
halt | システムを停止しhalt状態にする(停止) |
poweroff | システムを停止し電源を切断 |
start | サービスを起動 |
stop | サービスを停止 |
restart | サービスを再起動 |
is-active | サービスが稼働しているかを表示 |
isolate | ほかのUnitを停止し、対象のUnitを起動 |
reboot | システムを再起動 |
シャットダウン、再起動
シャットダウンや再起動は、systemctrコマンド以外にshutdownコマンドを使う方法があります。
shutdown [オプション] 時間 [メッセージ]
-h | シャットダウンする |
-r | シャットダウン後再起動する |
-f | 次回起動時にfsckをスキップする -h、-rと併用する |
-F | 次回起動時にfsckを実行する -h、-rと併用する |
-k | シャットダウンせずに警告メッセージを通知 |
-c | シャットダウンをキャンセルする |
ssh
公開鍵認証 … 秘密鍵で暗号化→公開鍵で復号化(上記認証)
公開鍵暗号 … 公開鍵で暗号化→秘密鍵で復号化
プロセスの生成、監視、終了
プロセスという基本単位でOSは動作中のプログラムを管理します。
psコマンド
process status
psコマンドは現在実行中のプロセスを表示するときに使います。
a | ほかのユーザのプロセスも表示 |
f | 親子関係をツリー上で表示 |
u | ユーザ名を表示 |
x | デーモン等表示 |
-e | すべてのプロセスを表示 |
-f | 完全なフォーマットでプロセスを表示 |
-l | 詳細情報を表示 |
-p PID | 指定のPIDの情報を表示 |
-C プロセス名 | 指定の名前の情報を表示 |
-w | 長い行は折返し |
topコマンド
実行中のプロセスを継続的に監視するときに使用します。
killコマンド
killコマンドはプロセスにシグナルを送ります。プロセスはシグナルを受け取るとそれに応じた、動作を実行します。
シグナル名 | シグナルID | 動作 |
---|---|---|
HUP | 1 | ハングアップ(端末が制御不能) |
INT | 2 | キーボードからの割り込み(Ctrl + Cキー) |
KILL | 9 | 強制終了 |
TERM | 15 | 終了(デフォルト) |
CONT | 18 | 停止しているプロセスを再開 |
STOP | 19 | 一時停止 |
TSTP | 20 | 端末から一時停止(Ctrl + Zキー) |
killallコマンド
指定したコマンドを実行している全てのプロセスに対してシグナルを送します。
killall [-シグナル名、-シグナル番号] プロセス名(コマンド名)
pgrepコマンド
指定のプロセスのPIDを表示します。
-U、–uid ユーザ名 | 実行ユーザーを指定 |
-G、–group グループ名 | 実行グループを指定 |
-n、–newest | もっとも新しいプロセスを選択 |
-o、–oldest | もっとも古いプロセスを選択 |
-l、–list-name | プロセス名も表示 |
フォアグラウンドとバックグラウンド
bg
フォアグラウンドで実行中のジョブをバックグラウンドで実行する
fg
バックグラウンドで実行中のジョブをフォアグラウンドで実行する
端末の活用
tmux、screen
複数の画面で切り替えて作業を行えるソフトウェアです。
デスクトップ環境の利用
LinuxはGUIを実現する機能はそなわっていないです。
そこで、GUIをじつげんするためのシステムとしてX Window Systemが使われてきました。
X Window System
XサーバとXクライアントから構成されています。
ウィンドウマネージャ
X Window Systemの外観を制御しているのがウィンドウマネージャです。
twmは最小限の機能を備えたウィンドウマネージャです。
GUIの起動
startx
コマンドでX Window Systemが起動します。(CUI環境‥ランレベル3)
ディスプレイマネージャ
- ランレベル5で起動すると、ディスプレイマネージャはXサーバを起動し、GUIのログイン画面を表示させます。
- initやsystemdによりディスプレイマネージャーサービスが起動されます。
xauth
xauthコマンドはXサーバの接続で使われる資格情報を表示したり、クライアント認証ファイルを編集するときに使います。
- xauth listコマンドでXサーバごとの接続に使用される資格情報が表示されます。(Xサーバ側)
- xauthのaddコマンドで、ユーザの~/.Xauthorityファイル(クライアント認証ファイル)にXサーバと同じ資格情報を保存し、Xサーバと資格情報が一致したユーザのみがアクセスできるようになります。(Xクライアント側)