CUI環境におけるDocker導入メモ
今回はCUI環境(CLI)だけで、Dockerのインストールおよび構築についてのメモ
インストール手順は公式のドキュメントに沿って行っている
参考:Install Docker Engine on Debian
なお、イメージがなにかとかコンテナがなにかみたいな説明は省いてるので公式か他のサイトの説明をみてください。
まず、Debianでの導入要件としては、Debian11またはDebian12の64ビット版が必要。
核となるDocker EngineはDocker Desktop for Linuxに入ってるので、そっちをインストールしたら楽だよと書かれてるが、結局ターミナルで導入はCLI作業がいる。そのあとはGUIで管理できるかも。
今回はCLI環境しかない前提なのでスルー。
大まかな手順は
1.Dockerのリポジトリを追加する
2.Docker Engineをインストール
これだけである。
■Dockerリポジトリを追加する
リポジトリを追加する作業
# Docker公式GPG key追加:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Apt sourcesにリポジトリ追加:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt updateインストールガイドより一部書き換え
ca-certificates:信用された認証局の証明書
curl:ネットワークを通してデータのやりとりをする。HTTPS通信のときに信用できる通信先かどうかca-certificatesを通してサーバー証明書の検証をチェックする
たぶんDebian12だとデフォルトでca-certificatesは入ってるはず。
installはディレクトリを作ってパーミッションを変更してファイルを移動する。mkdirとchmod足したみたいなやつ。
下のリポジトリ追加のやつは、自分の環境を文字列にして、リポジトリリストに追加する
ちなみに、私のDebian12の環境ではechoは
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable
という結果になる。
なお、標準のリポジトリ情報は/etc/apt/sources.listにあり、追加のサードパーティーリポジトリは/etc/apt/sources.list.d/に入れるというのが一般的な運用らしい。
■Docker Engineインストール
さて、いよいよDocker本体のインストールである。
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
ここでざっくりとインストールするものを解説
docker-ce:docker engine本体。ceは非商用版。
docker-ce-cli:CLIでやりとりするためのプログラム
containerd.io:コンテナまわり
docker-buildx-plugin:buildx関係。正直わからん
docker-compose-plugin:composeまわり。
これで、Dockerのインストールは完了。
ちゃんと動くかどうか動作テストしてみよう。
まず
# docker
と打つだけで説明がずらっと出てくる
次に、動作テスト用にHello Worldイメージが用意されているのでそれを使ってみる。
# docker container run hello-world
するとこんな感じの結果が表示される
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c1ec31eb5944: Pull complete Digest: sha256:91fb4b041da273d5a3273b6d587d62d518300a6ad268b28628f74997b93171b2 Status: Downloaded newer image for hello-world:latest 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/
これでインストール編はおしまい。
次はよく使いそうなコマンド一覧編
Linux構築メモ その3
細々とした設定部分
■ホストネーム設定
通常、インストールしたときに変えてなければホストネームはdebianになってる。
hostnameとhostsの2つのファイル変更が必要。
# vim /etc/hostname
の中身を変更
これは手書きの代わりに以下のコマンドでも行える
# hostnamectl set-hostname 新しいホストネーム
もう1つのファイルを変更する
# vim /etc/hosts
の
この部分を変更。これはhostnamectlじゃ変更されないので手書き。
終わったらシステム再起動
■ネームサーバー設定
ネームサーバーをGoogle Public DNSに設定すると、良いことがあるかもしれない(おまじない)
# vim /etc/resolv.conf
中身を
nameserver 8.8.8.8
nameserver 8.8.4.4
に変更。
■タイムゾーン設定
タイムゾーンがVPSレンタルしたときに間違ってるとか、あとはdockerのコンテナとかも海外のUTC基準なので変更する
●今風のやり方
タイムゾーンリスト
# timedatectl list-timezones
タイムゾーン設定
# timedatectl set-timezone Asia/Tokyo
設定確認
# timedatectl
●昔のやり方
これは現在であっても、スリムなディストリビューションなどでtimedatectlが入ってない場合なども使える
現在のタイムゾーン確認
# ls -l /etc/localtime
タイムゾーン設定
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
あとはdateで確認すればいい
2024/09/16 タイムゾーン設定追記
Linux構築メモ その2
まずは、仮想環境のIPアドレスを調べる
VirtualBoxに表示されるログイン画面からログインをする
今回はIPを調べるだけなので一般アカウントで十分
ログイン後「ip address」(ip addr/ip aも同じ)と入力すると自分のIPを知ることができる
ここでは、192.168.11.12というアドレスが割り当てられていることがわかる。
これをputty側で設定する。
なお、これはDHCPでランダムに割り当てられた数字なので、ルーター設定で固定をしないとほぼ毎回違うアドレスになって、その都度IPアドレス調べたりputty設定し直したり大変になる。固定の仕方はルーターのマニュアルを読んで。

受け入れるを選択


今後はWindows上のputtyのこの画面で設定を行っていく。
さて、Linux上での設定作業は、基本的にはrootは使わずに一般ユーザーがsudoを使って行うのがセオリーなんだけど、私はものぐさなのでrootで作業します。
ここではちゃんとsudoを使って作業したい人向けトピックス
デフォルトではsudoが入ってないので自分でインストールする必要がある。
まずは
# su -
でrootに切り替える。VirtualBoxの画面だと直接rootでログインできるが、puttyでの操作は直接rootでパスワード認証によるログインできない設定になっているのでsu -でrootに切り替える。
あとはsudoインストール
# apt install sudo
インストールできたら、sudoが使いたいユーザーをsudoグループに追加する
# usermod -aG sudo ユーザー名
あとは、いったんログアウトしてログインし直すとsudoが使えるようになってる。
以下はrootでの作業を前提に記述
一般ユーザーで作業する場合は、「sudo コマンド」に読み替える
では、puttyを使えるようになったので、まずは何を置いてもアップデートを行う
# apt update
# apt upgrade
apt updateはパッケージリストの更新。
apt upgradeは実際にマシンに入ってるインストール済みのソフトをリストを元に最新バージョンに更新する
つまりupdateでリスト更新せずupgradeだけ実行しても、いつまでも古いリストに基づくので新しいアプリのバージョンはこない。
■一般ユーザーを作る
インストール画面で一般ユーザーを作り損ねた人、追加で作りたい人向けメモ
root権限が必要
# adduser ユーザー名
あとは対話に従って本名とか住所とかパスワードとかいれて行けば完成。
一応、別のやり方を書くと
# useradd -s /bin/bash -m ユーザー名
# passwd ユーザー名
こっちは複雑だけど、オプションで細々とした設定ができるので好きな方で。
■終了と再起動
終了
# poweroff
# systemctl poweroffも同じ
# shutdown -h nowも同じ
再起動
# reboot
# shutdown -r nowも同じ
■Vimをいれる
CUI上で作業するので、テキストエディタが必要。
ここではVimを入れる
# apt install vim
Vimの設定は検索サイトで調べてほしいが、rootだけとかログインした一般ユーザーだけとかに適用するには、自分のホームフォルダに.vimrcを作って記述、環境全体(全ユーザー)に及ぼすには/etc/vim/vimrc.localに記述が必要
個人的にやってる変更は以下
set number "行番号表示
colorscheme darkblue "色変更
set encoding=utf-8 "文字化け対策
全体の設定で変更しても、個々人のホームに.vimrcを作れば上書きして環境を構築できる
色は個人の好みがあるので、自分にあったやつを選ぶかオリジナル配色の設定をつくるか。
darkblueもちょっと見づらいけど、配色作るのも面倒くさいので放置
■OpenSSH設定その1
今回はセキィリティ向上のため、SSHで接続するポート番号の変更とrootでの直接ログイン禁止を設定する
ポート番号を1024以上の好きな番号に設定する
それより小さい番号は、システムが割り当ててる可能性が高い
14行目あたりに
#Port 22
とあるのでコメント部分を削除して
Port 好きなポート番号
とする。
それと33行目あたりに
#PermitRootLogin prohibit-password
とあるので、コメントを取ってnoにする
PermitRootLogin no
この設定はputtyなど外部からアクセスするときにパスワードでのrootログイン禁止を設定していた(最初にputtyからはrootログインできないといってた話)
prohibit-passwodはパスワードだけではログインできないけど、公開鍵認証などでは直接rootログインできる仕様。
今回ここをnoに変更することで、一切のrootログイン禁止にしてセキュリティを高める
もちろん、一般ユーザーでログイン後su -でrootになれるので作業は困らない。
設定が終わったら保存して閉じて、設定を適用する
# systemctl reload ssh
ここで、いまの作業画面を閉じずに、新しく画面を開いてログインする。
なぜなら、ポート番号を間違って設定した場合、ログインできなくなるので確認が必要。(たとえばポート2700と思って設定したのに実際は入力ミスで2800だったり)
▲自分向けのマニアックな解説
rootログインを許す許さないという話は、サーバーサイドの話なのでSSHデーモンの設定ファイルsshd_configを書き換える。
じゃあなんでreload sshdじゃなくてreload sshになってるかというと、/etc/systemd/system/の中のsshd.serviceは/lib/systemed/system/ssh.serviceに読み替えなさいというエイリアス設定がしてあるため。
つまり実際はreload sshとして呼ばれている。
じゃあSSHデーモンのリロード処理はどうなってるかというと、上記の/lib/systemed/system/ssh.serviceの中の記述に
ExecReload=/usr/sbin/sshd -t
としてsshdをリロードしてるので問題ない。
次に、systemctl restartとreloadの違いはなにか?
reloadは変更した設定ファイルを読み込んで、新しいセッション(次に立ち上げたターミナル)から適用する。
万が一構文が間違っていた場合、設定ファイルを適用せずにエラー文を出す。つまりいま起動してるやつはそのまま。restartはいったんプロセスを終了させて、変更した設定ファイルを読み込む。ここで万が一構文が間違ってると起動しない。
じゃあなんでもreloadがいいのかと思うが、たぶんserviceファイルにExecReloadの項目がないと、reloadできないってエラーになるんじゃないかな。
今回のSSHの場合、仮にsystemctl restart sshにしても、設定失敗してsshが起動しないだけでセッションは維持されるので、設定ファイル修正してssh起動しなおせばいい。
結論:reload使えるならそっち使った方が良い。なかったらrestart使え。
■ファイアウォール設定
ポートの変更が終わったら、次は必要なポート以外は全部閉じることによって外部からのアクセスを可能な限りブロックすることにする
# apt install ufw
次に全体を接続不可にしたあと、puttyで作業するポートだけ開放する
最後に起動。
# ufw enable
ここで、画面を閉じずに新しくputtyのターミナルを起動して接続できることを確認する。
設定ポート間違えるとターミナルからログインできなくなる
(いまは間違ってもVirtualBox上からログインできるのでそこまで困らないが、VPSなど外部サービスを借りた場合ウェブ上からのコンソールがあるとは限らないので、確認する癖をつける)
# ufw status
とするといま設定している内容が表示される
To Action From
-- ------ ----
3844/tcp ALLOW Anywhere
3844/tcp (v6) ALLOW Anywhere (v6)
(v6)はIPv6のこと
の中のIPV6=yesをnoに変更して反映
# ufw reload
これでstatusをみるとv6の行が消えている。
実験したところ、IPv6をオフにするとIPv6向けの設定は消えるので、オンにしたあとに改めてallow設定などを行う必要がある
# ufw reset
で初期化はできる。
■OpenSSH設定その2
毎回ログイン時にパスワード入力が面倒くさ…じゃなくてセキュリティ向上のため、公開鍵認証に切り替える
これは一般ユーザーでのログインが前提なので、作業は一般ユーザーで行います。
まずは公開鍵と秘密鍵をputty上で生成。
鍵の種類は、ed25519。
ちょっと前まではrsa方式がスタンダードだったんだけど、いま推奨されてないらしい。
パスワードを設定するが、パスワード入力が面倒くさいという理由なので、今回は空白。
puttygenで作った公開鍵はOpenSSH用に変換する作業が入る(コマンド1行だけど)
公開鍵(debiankey.pub)と秘密鍵(debiankey.ppk)をそれぞれ保存する。
putty側でキーの設定を忘れずに。

次に、Linux上の一般ユーザーから公開鍵にするための環境を整える
ホームディレクトリに.sshフォルダ作成、公開鍵保存のためのauthorized_keys作成
# mkdir .ssh
# chmod 700 .ssh
# touch .ssh/authorized_keys
# chmod 600 .ssh/authorized_keys
準備ができたら、FileZillaなんかで公開鍵を.sshフォルダに転送。
転送ができたらOpenSSH用に変換して追加
# ssh-keygen -i -f .ssh/debiankey.pub >> .ssh/authorized_keys
なんだったら、FileZillaなんかで転送せずに上のOpneSSHのペーストキーをputty経由で貼り付けてもいける。
puttyのバー上で右クリック→貼り付け
鍵によるログインが可能になったので、OpneSSHの設定を変更して、パスワードログインを禁止する(ここはroot権限必要)。
PasswordAuthenticationをアンコメントしてnoに変更。
OpneSSH再起動
# systemctl reload ssh
ここまでやれば、最初の環境構築としては十分なのでは。
おしまい。
Linux構築メモ
年に数回しかLinux触らないので、毎回構築方法を忘れる自分のためのメモ。
なお、知識はLinux標準教科書を読んだ程度なので、完全に初心者。
間違ってたり足りなかった部分があった場合は、適時書き加えると思う。
最終目標は、CUI環境でのサーバー構築、アクセスはWindowsからputty。
実験いろいろやりながらだから、今回はVM VirtualBox上で構築。
最終的にはVPSになるはず。
今回は、Debian12で構築。
記事執筆時点でDebian JP Projectでは12.4、本家は12.6を配布中。
どっちでも日本語環境でインストールできるので、今回は本家から12.6をダウンロード
インストール前に沼にはまりそうな部分を。
インストール後でもいいが、VirtualBoxのネットワーク設定(変更)が必要
今回は、仮想環境上のLinuxからインターネットへ接続、ホストPC(Windows)から仮想環境にアクセスが必要なのでブリッジアダプターを選択する。

グラフィカルインストールでOK

ここで日本語を選べば楽

ホスト名はデフォルトのまま、ネットワーク設定は空白。
基本そのままポチポチ押す
rootのパスワード設定したあと、一般ユーザー作成はここでやっておく
あとで追加するのは面倒くさいので。
説明書きにもあるが、新しいユーザーの本名がメール送信者などの表示名に使われ、次のアカウント名はログインなどのときに使われる。
通常はどっちも同じ半角英数字の文字列。
本名をrealname01、アカウント名をaccountname01としたところ、/etc/passwdに記述を発見

本名はpasswdのコメントフィールドに格納されている模様
ただ、CUIの操作上で使ったことはたぶんない。
ディスクのパーティショニングもそのまま次へ進めて、最後のディスクに変更を書き込むかで「はい」を選ぶ

インストールメディアのスキャンは、今回はnetinst版でイメージ1つしかないので「いいえ」で。
この設定は、昔のCD2枚組とかのときのなごりなんで、いま使わないんじゃないかな

ソフトウェアの選択で、今回はCUI環境でWindowsから接続するので、デスクトップ環境を外してSSHサーバを選択する。
あとで自分でいれるより、こういうときに最初から入れとくと楽。

GRUBブートローダーのインストールで「はい」を選択
このあと、「デバイスを手動で入力」は上級者向け設定なので、素直に選択肢の「/dev/sda」を選ぶ(ここではata-VBOX_HARDDISK)
ちなみに、手動で入力する画面で空白のまま進めるとあとでLinux起動しなくなる

もし、VirtualBoxで環境構築してて、PXE-E06ていうエラーで止まったらいったんウインドウ閉じて起動し直すと治る
仮想マシン上のリセットだとエラー治らないので注意。

インストールが終わって起動してログイン画面が出たらインストール完了。
この状態でスナップショットを取ると、あとは壊し放題実験し放題で学べる。

設定編へ続く……
「18歳成人」改正民法が成立…22年4月施行
成人を18歳とする改正民法が成立。
ただし、お酒やたばこは20歳のまま。
法律に直接年齢が20歳とか書かれてるやつはそのまま、「未成年禁止」「成人」という表記なら今後は18歳OKになる
年齢制限というと、ほかにもパチンコ、競馬、競輪などのギャンブルかな。
競馬法28条で「未成年者は、勝馬投票券を購入し、又は譲り受けてはならない。」とあるので、今後は18歳からOKに。
競輪は自転車競技法第9条に「未成年者は、車券を購入し、又は譲り受けてはならない。」とあるので、やっぱり18歳からOKに。
パチンコはそもそも18歳以上か。
成人が18歳になるのに併せて少年法も18歳になるかどうかは未定。
権利あるところに責任ありとは思うが、勝手に権利付与しといて責任押しつけてるという発想もできなくもない。
まぁ普通に生活してたらそんな法律のお世話にはならないと思うが。