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足したみたいなやつ。

curl でdocker公式からPGP鍵を取ってきて保存。

 

下のリポジトリ追加のやつは、自分の環境を文字列にして、リポジトリリストに追加する

ちなみに、私の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-cliCLIでやりとりするためのプログラム

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

127.0.0.1 debian

この部分を変更。これは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

次にWindowsからputtyで接続する環境を整える

 

まずは、仮想環境の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に記述が必要
個人的にやってる変更は以下

# vim /etc/vim/vimrc.local

set number "行番号表示
colorscheme darkblue "色変更
set encoding=utf-8 "文字化け対策

全体の設定で変更しても、個々人のホームに.vimrcを作れば上書きして環境を構築できる
色は個人の好みがあるので、自分にあったやつを選ぶかオリジナル配色の設定をつくるか。
darkblueもちょっと見づらいけど、配色作るのも面倒くさいので放置

 

OpenSSH設定その1

今回はセキィリティ向上のため、SSHで接続するポート番号の変更とrootでの直接ログイン禁止を設定する

ポート番号を1024以上の好きな番号に設定する
それより小さい番号は、システムが割り当ててる可能性が高い

# vim /etc/ssh/sshd_config

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使え。

 

ファイアウォール設定

ポートの変更が終わったら、次は必要なポート以外は全部閉じることによって外部からのアクセスを可能な限りブロックすることにする

まずはファイアウォールufwをインストールする

# apt install ufw

次に全体を接続不可にしたあと、puttyで作業するポートだけ開放する

# ufw default deny
# ufw allow 自分の設定したSSHポート/tcp

最後に起動。

# ufw enable

ここで、画面を閉じずに新しくputtyのターミナルを起動して接続できることを確認する。
設定ポート間違えるとターミナルからログインできなくなる
(いまは間違ってもVirtualBox上からログインできるのでそこまで困らないが、VPSなど外部サービスを借りた場合ウェブ上からのコンソールがあるとは限らないので、確認する癖をつける)

# ufw status

とするといま設定している内容が表示される

 

To                         Action      From
--                         ------      ----
3844/tcp                   ALLOW       Anywhere
3844/tcp (v6) ALLOW Anywhere (v6)

(v6)はIPv6のこと

今回はIPv6を使用しないので、IPv6の設定をオフにする

# vim /etc/default/ufw

の中の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経由で貼り付けてもいける。

# vim .ssh/authorized_keys

puttyのバー上で右クリック→貼り付け

 

鍵によるログインが可能になったので、OpneSSHの設定を変更して、パスワードログインを禁止する(ここはroot権限必要)。

# vim /etc/ssh/sshd_config

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)から仮想環境にアクセスが必要なのでブリッジアダプターを選択する。

参照:VirtualBoxのネットワーク設定を絵で説明する

 

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

 

ここで日本語を選べば楽

 

ホスト名はデフォルトのまま、ネットワーク設定は空白。
基本そのままポチポチ押す

 

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


本名はpasswdのコメントフィールドに格納されている模様
ただ、CUIの操作上で使ったことはたぶんない。

 

ディスクのパーティショニングもそのまま次へ進めて、最後のディスクに変更を書き込むかで「はい」を選ぶ

 

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

 

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

 

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

 

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

 

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

 

設定編へ続く……

2020年気になるニュースメモ

6月8日まで

やっとはてなブログに移行したらしい

知らないうちにはてなダイアリーからはてなブログに移行していた。

 

数ヶ月間、書き込み機能を凍結されていてどうしようもなかったがやっと移行したらしい。

メール通知とかなにもこないね。

 

更新できるようになったからと、特に連日がんばって書くこともないけど、気が向いたら適当に書いていく。

 

前はCSSいじれたので、行間とかカスタマイズできてたんだけど、廃止されたっぽい?

ついさっき移行に気づいただけで細かいところはわからないので、おいおい調べることにする。

「18歳成人」改正民法が成立…22年4月施行

成人を18歳とする改正民法が成立。
ただし、お酒やたばこは20歳のまま。


法律に直接年齢が20歳とか書かれてるやつはそのまま、「未成年禁止」「成人」という表記なら今後は18歳OKになる
年齢制限というと、ほかにもパチンコ、競馬、競輪などのギャンブルかな。
競馬法28条で「未成年者は、勝馬投票券を購入し、又は譲り受けてはならない。」とあるので、今後は18歳からOKに。
競輪は自転車競技法第9条に「未成年者は、車券を購入し、又は譲り受けてはならない。」とあるので、やっぱり18歳からOKに。
パチンコはそもそも18歳以上か。


成人が18歳になるのに併せて少年法も18歳になるかどうかは未定。
権利あるところに責任ありとは思うが、勝手に権利付与しといて責任押しつけてるという発想もできなくもない。
まぁ普通に生活してたらそんな法律のお世話にはならないと思うが。