はじめに
省電力 PC を開発機として使用していましたが、ある日突然 OS が立ち上がらなくなってしまい、結局 OS を再インストールしたので今後のために Docker を動作させるまでの設定をメモしておきます。
※バックアップは取るようにしようね…
OS のバージョン及びマシンスペックなど
OS バージョン
$ lsb_release -a
LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
CPU
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2120T CPU @ 2.60GHz
stepping : 7
microcode : 0x2f
cpu MHz : 1625.593
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
# 以下略
メモリー
$ free -h
total used free shared buff/cache available
Mem: 7.7Gi 596Mi 5.7Gi 6.0Mi 1.4Gi 6.8Gi
Swap: 2.0Gi 0B 2.0Gi
マザーボード
$ sudo dmidecode -t baseboard
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
Handle 0x0002, DMI type 2, 8 bytes
Base Board Information
Manufacturer: Gigabyte Technology Co., Ltd.
Product Name: H61M-USB3-B3-JP
Version: x.x
Serial Number:
固定 IP の設定(GUI)
有線 LAN の DHCP の設定を固定 IP に変更します。OS をインストールして SSH の設定するまではモニターを繋いでいたので、コマンドではなく画面から設定しました。
設定方法は以下の記事を参考にしました。
注意点としては IP を設定後、有線 LAN のトグルボタンの ON・OFF をしないと設定が反映されないことです。
SSH サーバの設定
openssh-server
をインストールして SSH 接続が出来るようにしていきます。
# 既存のパッケージをアップデート
$ sudo apt -y update
# openssh-server をインストール
$ sudo apt -y install openssh-server
インストール後は、/etc/ssh/sshd_config
の設定を変更します。
$ sudo apt -y vim
$ sudo vim /etc/ssh/sshd_config
# 以下の内容を修正
Port 22 # 任意のポートに変更
PermitRootLogin no # rootユーザーでログインを禁止する
MaxAuthTries 3 # 一つのセッションで認証試行を最大3回までに制限する
PasswordAuthentication no # パスワードによるログインを無効にする
PermitEmptyPasswords no # 空のパスワードを持つユーザーがSSH接続出来ないようにする
# sshデーモンを再起動して設定を反映させる
$ sudo systemctl restart sshd
# ステータスの確認
$ sudo systemctl status sshd
# Active: active (running) となっていることを確認
既存の秘密鍵から公開鍵を作成
残念なことに、公開鍵のバックアップを取っていませんでした…😢
鍵を再作成するのも手間なので、既存の秘密鍵から公開鍵を生成します。(秘密鍵はバックアップしていました。)
秘 密鍵を持っている端末から USB やクラウドストレージを経由してサーバのデスクトップ画面など適当な場所へコピーします。
今回はdev-server
という名前の秘密鍵を使用していたものとします。
# ディレクトリがなければ作成する
$ mkdir ~/.ssh
$ mv [保存した秘密鍵のパス]/dev-server ~/.ssh
# アクセス権限を変更する
$ chmod 600 ~/.ssh/dev-server
# 秘密鍵から公開鍵を作成
$ ssh-keygen -y -f ~/.ssh/dev-server > ~/.ssh/dev-server.pub
# アクセス権限を変更する
$ chmod 600 ~/.ssh/dev-server.pub
# 公開鍵の名前を変更
$ mv ~/.ssh/dev-server.pub ~/.ssh/authorized_keys
これでクライアント秘密鍵は変更することなく接続できます。
authorized_keys とは?
authorized_keys
とは、サーバがクライアントを認証するために使用されます。
SSH 公開鍵認証をするためにクライアントは公開鍵と秘密鍵のペアを作成します。作成した公開鍵をサーバへ登録します。(鍵と言っても扱っている内容はデータになります)
このサーバへ登録した公開鍵を利用して、クライアントから 送信されてきた秘密鍵の内容(電子署名)をサーバ側で検証します。
電子署名と言う単語が出てきましたが、クライアントはサーバへ SSH 接続する際に、端末内の秘密鍵を利用して電子署名を生成します。そして、サーバに登録されている公開鍵の内容で電子署名の内容が正しいと接続が許可される流れになります。
したがって、authorized_keys
という名前に変更するのは、サーバがその公開鍵を認証に使用するためというわけです。なお、一つのauthorized_keys
ファイルには複数の公開鍵を追加できます。これにより、複数のクライアント(それぞれが異なる公開鍵/秘密鍵ペアを持つ)が同じユーザーアカウントに接続できるようになります。
その都度、公開鍵の内容を追記して登録します。
authorized_keys
を使用する注意点としては、適切なアクセス権(パーミッション)が設定されている必要があります。適切なユーザーのみがこのファイルを読み書きできるようにすることです。一般的には、このファイルはユーザーのみが読み書きでき、その他のユーザー(グループまたはその他)はこのファイルを読むことができないようにすることが推奨されます。
そのため、chmod 600 ~/.ssh/dev-server.pub
を実行してアクセス権を変更しておく必要があります。これは秘密鍵も同様です。
SSH 接続出来るか確認する
ここからクライアント側の操作になります。サーバへ SSH 接続できるか確認しましょう 。
クライアント側で~/.ssh/config
が作成されていなかった場合は以下の内容を記述します。
Host dev-server
HostName 192.168.xxx.xxx # サーバのIPアドレス
User sampleUser # 接続するユーザー名
Port xxxx # 任意のポート番号
IdentityFile ~/.ssh/dev-server # SSH接続する際に使用する秘密鍵
このファイルを作成しておくことで、SSH 接続する際にssh -i 鍵のファイルパス sampleUser@192.168.xxx -p xxx
などと指定せずに以下のように簡単に接続することが出来ます。
ぜひ設定しておきますよう。何ならこのconfig
ファイルの内容もバックアップしておきましょう。
$ ssh dev-server
Docker プロジェクトを保存する HDD をマウントする
OS をインストールするストレージには SSD を使用しましたが、開発のソースコードなどは容量の多い HDD を使用していました。
再インストールした際にその設定も消し飛んでしまったので、メモとして記述します。
なお、今回は内部 HDD を指定してますが、同じような手順で USB 接続した外部 HDD もマウントすることが出 来ます。
マウントポイントを作成する
開発環境なので分かりやすいようにユーザーのホームディラクトリ内にマウント用ディレクトリを作成します。
$ mkdir ~/docker_work
接続された HDD が認識されているか確認する
HDD が正しく認識されていれば以下のコマンドで HDD の情報が出力されます。
$ sudo fdisk -l
# 中略
ディスク /dev/sdb: 1.84 TiB, 2000398934016 バイト, 3907029168 セクタ
Disk model: WDC WD20EARX-00P
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
この/dev/sdb
という文字列をコピーするなどして控えておきます。
HDD をマウントする
以下のコマンドを実行して HDD を作成したマウントポイントへマウントします。
$ sudo mount /dev/sdb /home/user01/docker_work/
# マウントされたか確認
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
# 中略
# ↓正しくマウントされていることを確認
/dev/sdb 1.8T 1.1G 1.7T 1% /home/user01/docker_work
# アクセスできるか確認
$ ls -la /home/user01/docker_work
正しくマウントできました。しかし、Linux において外部デバイスのマウントは一時的なもので、再起動やシャットダウンしてしますと次回起動時にマウントの設定は消えていまします。
そのため、外部 HDD を毎回自動的にマウントしたい場合は、その設定を/etc/fstab
に登録しておく必要があります。
# 外部HDDのUUIDを確認する
$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
# 中略
sdb ext4 2ad7d0e4-cab5-4206-98e4-50cee3e266ca 1.7T 0% /home/user01/docker_work
# 設定ファイルのバックアップを作成
$ sudo cp /etc/fstab /etc/fstab.bak
$ sudo vim /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# 中略
# ファイルの末尾に以下を記述↓
# dockerプロジェクトが格納されたHDD
UUID=2ad7d0e4-cab5-4206-98e4-50cee3e266ca /home/user01/docker_work ext4 nofail 0 0
サーバを再起動して起動時に HDD がマウントされていることを確認してください。
マウントされていない場合は設定を見直してください。
Docker Engine のインストール
ここから Docker をインストールします。
以前、Ubuntu 上の Docker に SQL Server をインストールした記事の内容と同様です。
# パッケージリストの更新とインストール済のパッケージをアップグレード
sudo apt update && sudo apt upgrade -y
# 開発に必要なパッケージをインストール
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
# GPG鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 安定版のリポジトリを追加
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# aptのパッケージリストを更新
sudo apt-get update
# Docker Engine, containerd, Docker Compose をインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Dockerのサービスを起動
sudo service docker start
* Starting Docker: docker [ OK ]
# docker composeがインストールされているか確認
sudo docker compose version
Docker Compose version v2.15.1
# dockerグループが存在しているか確認
getent group docker
# ターミナルを実行中のユーザーをdockerグループに追加する
sudo usermod -aG docker $USER
# グループに追加されていることを確認
groups $USER
# 一度ログアウト
$ exit
# 接続
$ ssh dev-server
# sudo 無しで docker コマンドが実行できるか確認する
$ docker -v
Docker Engine が正しくインストールされていれば終了です。