Docker Desktop for Windows のインストール
最近はWindowsやMacを使っていてLinux環境を利用したいときには、無料で使える Docker Desktop でLinuxコンテナを使うというのが定番になっているような気がしないでもない。というわけで、Windows 10 に "Docker Desktop for Windows" をインストールする方法をまとめてみた。
ところで、最近の Docker Desktop は Hyper-V を使わなくても大丈夫らしいので (使うこともできるらしいが)、使わない方法でインストールした。代わりに WSL 2 を使うらしい。これだと、Oracle Virtualbox との併存、両立というか同時に使用ができる (と思ったんですが、おそらくCPUによってできたりできなかったりするみたい)。また、Hyper-V は Proエディション以上にしかなく、Homeエディションでは今まで Docker Desktop は使えなかったのが、今では使えることになる。
システム要件
公式ドキュメントにあるように、
- Windows 10, version 1903 以上
- 「Windowsの機能」で「Linux用Windowsサブシステム」および「仮想マシンプラットフォーム」が有効になっていること
- SLAT対応の 64bit CPU
- メインメモリ4GB以上
- BIOS上で仮想化機能が有効になっていること
の模様。
今回インストールしたマシンは、
- Windows 10 Pro, version 20H2
- CPU: Intel Core i9 9820X
- RAM: 128GB
です。
事前準備
BIOS上で仮想化機能が有効になっているかの確認
Windows上から仮想化が使えるかどうか確認します。「Ctrl + Shift + Esc」キーでタスクマネージャーを開き、「パフォーマンス」タブの「CPU」の項目で、「仮想化」が「有効」になっていれば大丈夫です。なっていない場合は、BIOSの仮想化機能を有効に設定してください。設定方法はPCにより異なるため、ウェブサイトやマニュアルを参考にしてください。例えば、Intel製のCPUを搭載したPCなら「Intel® Virtualization Technology」などです。

Windowsの機能の有効化
「プログラムと機能」の「Windowsの機能の有効化または無効化」から行ってもいいのだけれど、ここではPowerShellを用いて、「Windowsの機能」の「Linux用Windowsサブシステム」および「仮想マシンプラットフォーム」を有効にします。
「Windows」キーを押したあと、「powershell」と入力し、「Ctrl + Shift」キーを押しながら「Enter」キーを押します。これで、管理者権限でPowerShellが起動します。
Linux用Windowsサブシステム (Windows Subsystem for Linux: WSL) を有効化します。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
仮想マシンプラットフォームを有効化します。
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
WSL 2 を既定のバージョンに設定する
wsl --set-default-version 2
WSL 2 Linux カーネルの更新
このページを参考に、更新プログラムをダウンロード&実行し、WSL 2 のLinuxカーネルを更新する。
PCを再起動します。
インストーラーのダウンロード
公式サイトから "Docker Desktop for Windows (Docker Desktop Installer.exe)" をダウンロードします。
インストールの実行
ダウンロードしたインストーラーを実行します。特に設定や変更する項目はないのでそのまま進めます。



"Close and restart" ボタンを押して、再起動します。
Dockerが正常に起動すると、

のようなチュートリアル画面が表示されます。
動作確認
ここではすごく簡単に、Nginxというウェブサーバのコンテナを起動して動作確認をしたいと思います。
まず、PowerShellを起動します。次に以下のコマンドを実行します。
docker container run -d --name test-nginx -p 80:80 nginx
実行時に、Windowsファイアウォールの警告が出るかもしれないので、アクセスを許可しください。このコマンドはつまり、
- コンテナを起動しろ
- バックグラウンド (デーモン) で
- コンテナの名前は test-nginx とする
- ホストの80番ポートをコンテナの80番ポートにマッピングしろ
- イメージは nginx (のlatest) を使え
という意味になります。PowerShellのプロンプトが返ってきたら、ブラウザでlocalhostにアクセスしてみます (httpのデフォルトが80番ポート)。

無事に表示されました。
また、Docker Desktop の Dashboard を開いてみると、"Containers/Apps" に今起動した、test-nginxがあるのが分かります。一方、"Images" には今回のコンテナの元になったnginxイメージがあるのが分かります。


test-nginxコンテナは動作確認できたので、削除しておきます。nginxイメージももう使わないなら削除してしまってもいいです。

今回はここまでです。
HD60 S と OBS Studio でゲーム映像をキャプチャする (動作確認編)
Elgato HD60 S
キャプチャデバイス Elgato HD60 S がたぶん一番売れているし定番だと思う。ゲーム配信に使うなら、ハードウェアエンコードタイプじゃなくて HD60 S のように、ソフトウェアエンコードタイプが遅延しなくてよいらしい。
![Elgato Game Capture HD60 S [ソフトウェアエンコード式キャプチャボード(日本国内正規品)] 1GC109901004 Elgato Game Capture HD60 S [ソフトウェアエンコード式キャプチャボード(日本国内正規品)] 1GC109901004](https://m.media-amazon.com/images/I/31f12KbITNL._SL160_.jpg)
Elgato Game Capture HD60 S [ソフトウェアエンコード式キャプチャボード(日本国内正規品)] 1GC109901004
- 発売日: 2017/01/01
- メディア: Personal Computers
なお上位製品の HD60 S+ もあるけれど、これは4Kキャプチャと4Kパススルーができるので必要な人はこちらを。あとで説明するかもしれないけれど、4Kパススルーは分配器で解決できるので、フルHDまでのキャプチャで良いという人なら HD60 S で十分じゃないかと思う。
OBS Studio
ダウンロードサイトからOSを選択して、ダウンロードし、インストールする。
Elgato Game Capture
Elgato のウェブサイトからキャプチャデバイス名とOSを選択して Game Capture をダウンロードする。
Windowsの場合
Game Capture をそのままインストール (Sound Capture はインストールしてもしなくてもよい)。
Macの場合
OSB Link というソフトウェアもダウンロードしてインストールする。途中、OBS NDI Plugin など、いろんなパッケージのインストールを促されれるがとりあえずすべてインストールする (OBS NDI Plugin は必須)。
Game Capture での動作確認
Windowsの場合
Game Capture を起動する (OBS Studio は起動していないこと)。

①「デバイス」で HD60 S が認識されていて、選択されていること。②画面にキャプチャ映像が映っていること。③「ゲームオーディオ」のレベルメーターにキャプチャ音が入力されていることが確認できること。
うまく認識しないときは、Game Capture を再起動してみる。
Macの場合
Game Capture を起動する (OBS Studio は起動していないこと)。

Windowsの時とまったく同様。①「デバイス」で HD60 S が認識されていて、選択されていること。②画面にキャプチャ映像が映っていること。③「ゲームオーディオ」のレベルメーターにキャプチャ音が入力されていることが確認できること。
うまく認識しないときは、Game Capture を再起動してみる。
OBS Studio での動作確認
Windowsの場合
OBS Studio を起動する (Game Capture は起動していないこと)。


「ソース」の左下の「+」をクリックして「映像キャプチャデバイス」を選択する。

「新規作成」を選択して、名前を適当に入力して (ここでは「HD60 S」)、「OK」をクリックする。

プロパティ画面では「デバイス」から、Elgato Game Capture HD60 S っぽいものを選択する。きちんと選択すれば、画面にキャプチャされた映像が映る。そのほかの項目はそのままで「OK」をクリックする。

①画面にキャプチャされた映像が映っていること。②「音声ミキサー」の「HD60 S (ソースを追加したときにつけた名前)」のレベルメータが振れていて、音声もキャプチャされていることが確認できること。
次に実際にキャプチャされている音声をモニターしてみる。「音声ミキサー」のレベルメーターのエリアを右クリックして「オーディオの詳細プロパティ」をクリックする。

①の「音声モニタリング」の項目でモニターの出力を制御する。初期設定ではすべて「モニターオフ」になっているので、映像キャプチャデバイスである「HD60 S」を「モニターと出力」に変えてみて、音声がパソコンから聞こえるか確認する。なお、「モニターオフ」は出力はされるがモニター音としては聞こえない。例えばマイク音などはモニター不要と思えば「モニターオフ」としておけばよい。
また、デスクトップ音声などの余計な音を入れたくなければ、ミュートしておけばよい。マイクの歯車アイコンをクリックし、「プロパティ」からマイクのデバイスを選択できる。そのほか、ソースからさまざまなものを追加していくことができる。
Macの場合
OBS Link の設定

メニューバーにある OBS Link で「Game Capture HD60 S」が選択されていることを確認する。選択されていなければ選択する。そもそも OBS Link がメニューバーになければ起動する。その後、「環境設定」をクリックする。

①「OBS NDI Plugin」が正常にインストールされ、認識されていること。②「キャプチャデバイス」が「Game Capture HD60 S」となっていること。その他「出力フォーマット」などは適宜変更してもよい。
OBS Studio の設定
OBS Studio を起動する (Game Capture は起動していないこと)。


「ソース」の左下の「+」をクリックして「NDI Source」を選択する。

「新規作成」を選択して、名前を適当に入力して (ここでは「HD60 S」)、「OK」をクリックする。

プロパティ画面では「デバイス」から、「OBS Link」と付いているものを選択する。そのほかの項目はそのままで「OK」をクリックする (この画面ではキャプチャ映像が映らない場合がある)。

①画面にキャプチャされた映像が映っていること。②「音声ミキサー」の「HD60 S (ソースを追加したときにつけた名前)」のレベルメータが振れていて、音声もキャプチャされていることが確認できること。
次に実際にキャプチャされている音声をモニターしてみる。「音声ミキサー」のどれかのデバイスの「歯車アイコン」をクリックして「オーディオの詳細プロパティ」をクリックする。

Windowsの時とまったく同様。①の「音声モニタリング」の項目でモニターの出力を制御する。初期設定ではすべて「モニターオフ」になっているので、映像キャプチャデバイスである「HD60 S」を「モニターと出力」に変えてみて、音声がパソコンから聞こえるか確認する。なお、「モニターオフ」は出力はされるがモニター音としては聞こえない。例えばマイク音などはモニター不要と思えば「モニターオフ」としておけばよい。
また、マイクの歯車アイコンをクリックし、「プロパティ」からマイクのデバイスを選択できる。そのほか、ソースからさまざまなものを追加していくことができる。
次は、OBS Studio の詳しい設定をしていく。
絢香×上原ひろみ - おかえり
生演奏でこのクオリティはさすが。2:33のカメラすごい。
さくらのVPSのSSH設定 (公開鍵認証)
環境
クライアント側
- Windows 10
- Tera Term
- WinSCP
- 適当なテキストエディタ
サーバ側
- さくらのVPS
- CentOS 7
やること
SSHの接続を公開鍵認証方式にして、接続ポート番号を22→50022に変更します。
- パケットフィルタで新規ポート追加
- ファイアウォールで新規ポート追加
- SELinuxで新規ポート追加
- sshd_configの設定変更
- SSH接続ポート番号変更
- 認証方式を公開鍵認証に変更
- その他セキュリティ向上
- 不要ポートの設定削除
まずは初期設定で接続
OSインストール時に設定したパスワードで、ポート22番にrootユーザで接続できるか確認します。サーバのIPアドレスは、さくらのVPSのコントロールパネルのサーバ→ネットワーク情報のアドレス欄からコピーできます。Tera Term でも WinSCP でも接続できることを確認します。
パケットフィルタの設定変更
カスタムOSインストールでCentOSをインストールしたので、「パケットフィルタを利用しない」になっていました。そして、ポート32767番までしか設定できないようなので、ここでは使わないことにします。利用する場合は32767以下の番号で追加すればいいでしょう。あと、一通りの設定が終わるまでは22番は削除しないように。設定が終わって、すべてOKになったら一番最後に22番を閉じます。
ファイアウォールの設定変更
現在の状態を確認
$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 eth2 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
services: dhcpv6-client ssh というところで、sshが開いています。
ssh-alt (50022番) の追加
上記のsshの設定をコピーして番号だけを50022にして適用することでssh-altというサービスとして50022番を開放します。
設定ファイルのコピー
$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-alt.xml
ssh-alt.xml を編集
$ sudo vi /etc/firewalld/services/ssh-alt.xml <port protocol="tcp" port="50022"/>
firewalldの設定に追加、反映
$ sudo firewall-cmd --add-service=ssh-alt --permanent success $ sudo firewall-cmd --reload success $ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 eth2 sources: services: dhcpv6-client ssh ssh-alt ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
これで、ssh-alt (ポート50022) がfirewalldで開放されました。
SELinuxの設定変更
現在の状態を確認
$ getenforce Enforcing
SELinuxが有効であることが分かります。
semanageコマンドのインストール
SELinuxの設定を変更するためのコマンドであるsemanageコマンドをインストールします。これは policycoreutils-python パッケージに含まれているので以下のようにインストールします。
$ sudo yum install -y policycoreutils-python
SELinuxが許可しているポート番号を確認
$ sudo semanage port --list
長いリストが出てきます。grepでsshだけフィルタリングすると、
$ sudo semanage port --list | grep ssh ssh_port_t tcp 22
22番だけ許可されていることが分かります。
SELinuxのポリシーにポートを追加
$ sudo semanage port --add --type ssh_port_t --proto tcp 50022 $ sudo semanage port --list | grep ssh ssh_port_t tcp 50022, 22
これで、50022番がsshのポートとして追加されました。
sshd_configの設定変更
設定ファイルである /etc/ssh/sshd_config を編集します。
SSH接続ポート番号変更
#Port 22
の部分のコメントを外し、49152~65535番くらいのプライベートな番号をつけておけばいいと思う。
Port 50022
ここまでの設定を反映して、sshdを再起動して、50022番で接続できるか確認してみる。 sshd_configの構文に誤りがないかチェックするコマンドを実行します。
$ sudo sshd -t
何もエラーが出なければOKです。sshdを再起動します。この時いま開いているターミナルを閉じないように。もし、再起動後ログインできなくなったら、コンソールから入らなくてはいけなくなります。
$ sudo systemctl restart sshd
再起動後、Tera Term と WinSCP で変更後のポート番号でアクセスできたらOKです。
認証方式を公開鍵認証に変更
鍵の生成
ここでは、Tera Term で鍵のペアを作成します。メニューの「設定」→「SSH鍵生成」を選びます。鍵の種類はRSA、ビット数は4096で「生成」をクリックします。鍵の生成が終わったら、公開鍵 (id_rsa.pub) と秘密鍵 (id_rsa) をそれぞれ保存します。ここではパスフレーズは空でいいです。

公開鍵の転送
SCPで公開鍵 (id_rsa.pub) をVPSに転送します。ログインユーザのホームディレクトリの直下 (~/) の .ssh に (なければ作成)、そこに転送します。その後、id_rsa.pub ファイルを authorized_keys ファイルにマージします。
$ mkdir ~/.ssh # .sshディレクトリがない場合 $ cd ~/.ssh $ cat id_rsa.pub >> authorized_keys $ rm -f id_rsa.pub
パーミッションの確認
.sshディレクトリは700、authorized_keysファイルは600である必要があります。
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
sshd_configの設定変更
#PubkeyAuthentication yes
のコメントを外して
PubkeyAuthentication yes
にする。
PasswordAuthentication yes
を
PasswordAuthentication no
にする。
sshdの再起動と接続確認
$ sudo sudo sshd -t $ sudo systemctl restart sshd
sshd再起動後、パスワード認証ではなく、公開鍵認証でログインできたらOKです。
その他セキュリティ向上
sshd_config を編集してきます。
LoginGraceTime
#LoginGraceTime 2m
を
LoginGraceTime 20
にして、ユーザが20秒以内にログインを成功させないと接続を切るようにする。
PermitRootLogin
#PermitRootLogin yes
を
PermitRootLogin no
にして、rootユーザでログインできないようにする。
MaxAuthTries
#MaxAuthTries 6
を
MaxAuthTries 3
にして、1度の接続で3回までのパスワードの間違いを許可することにします。
MaxSessions
#MaxSessions 10
を
MaxSessions 5
にして、最大同時接続数を5にします。
PermitEmptyPasswords
#PermitEmptyPasswords no
を
PermitEmptyPasswords no
にして、空のパスワードを許可しないことにします。
GSSAPIAuthentication
GSSAPIAuthentication yes
を
GSSAPIAuthentication no
にして、GSSAPI認証は使わない。
MaxStartups
#MaxStartups 10:30:100
を
MaxStartups 5:75:10
として、非認証の接続が5を超えると75%の確率で拒絶をはじめて10を超えると全て拒否します。
AcceptEnv
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS
を
#AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES #AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT #AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE #AcceptEnv XMODIFIERS
つぃて、サーバ側へ、環境変数を渡さないようにする。
AllowUsers
AllowUsers *@*.jp
を追加して、特定ユーザからのみ接続を受け入れる。ここでは .jp ドメインのみ受け入れ (自分が使っているプロバイダは全て .jp ドメインのため)。
暗号アルゴリズム
Ciphers aes256-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-gcm@openssh.com,aes128-ctr,chacha20-poly1305@openssh.com KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 MACs umac-128-etm@openssh.com,umac-64-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128@openssh.com,umac-64@openssh.com,hmac-sha2-512,hmac-sha2-256
を追加して、弱いアルゴリズム使わわないようにする。
sshdの再起動と接続確認
$ sudo sudo sshd -t $ sudo systemctl restart sshd
不要ポートの設定削除
新しいポートで接続できることが確認できたら、初期設定の22番ポートを無効にします。
SELinuxのポリシーから削除
SELinuxのポリシーから22番ポートをSSHの定義から外すことは上手くいかない模様。以下の削除コマンドでエラーが出てしまう。ただ、firewalldやパケットフィルタで22番を塞ぐのでセキュリティには問題はないです。
$ sudo semanage port --delete --type ssh_port_t --proto tcp 22 ValueError: Port tcp/22 is defined in policy, cannot be deleted
firewalld でssh (22番) を閉じる
sshのサービス (ssh.xml) を外す。
$ sudo firewall-cmd --remove-service=ssh --zone=public --permanent success $ sudo firewall-cmd --reload success
sshが外れているか確認する。
$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-alt ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
servicesからsshが消えました。
パケットフィルタで22番の設定を削除する
さくらのVPSのパケットフィルタ利用している場合は、SSH (22番) のフィルタを削除する。
以上で、SSH接続が22番のパスワード認証から50022番の公開鍵認証になりました。

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド
- 作者:有限会社ナレッジデザイン 大竹 龍史,市来 秀男,山本 道子,山崎 佳子
- 発売日: 2017/03/22
- メディア: 単行本
なんかVPSスケールアップしてみた
さくらのVPSを2GBで借りたけど物足りなかったので4GBにしたいと思ったら、スケールアップ機能があって、そのままスケールアップできた。差額を払えば良かった。素晴らしい。ストレージも400GBに増やした。面倒なので、またクリーンインストールした。
あとは、マルチドメインで運用するやり方とか忘れてしまった……。思い出さねば。

さくらのVPS借りた
数年ぶりさくらのVPSを借りた。メモリ2GB、SSD100GBのプラン。東京ゾーンで借りたので、月額1,780円、年額19,580円だった (それぞれ税抜)。サーバのコントロールパネルがずいぶん変わって使いやすくなっていた。さっそくOSをクリーンインストールし直して使うことにする。特に使い道は考えていないが。
Dockerとかで遊んでみたいので、OSはたぶんCentOS7にする。下の画像が標準でインストールできるOS。最新のCentOS8も使える。

自分が持っているISOイメージをアップロードしてOSインストールできるみたいだし、なかなかすごい。
SlackのクローンのRocketChatとかMattermostとか動かしてみようかな。あとは気になってるCMSのDrupal。それからメールサーバの環境をしっかり実験したい。

ゼロからはじめるLinuxサーバー構築・運用ガイド 動かしながら学ぶWebサーバーの作り方
- 作者:中島 能和
- 発売日: 2016/07/06
- メディア: 大型本

Linuxサーバーがゼロから作れる本 (日経BPパソコンベストムック)
- 発売日: 2019/03/28
- メディア: ムック
Python環境を構築できるAnaconda (2)
必要なパッケージのインストール
前回、
でMinicondaをインストールしたので、今回は Jupyter Notebook を使うために必要なパッケージをインストールしていきます。Jupyter Notebook とはブラウザ上で動く対話形式でPythonを実行していける実行環境です。Pythonだけではなく、他の言語にも対応しています。
インストール済みパッケージのアップデート
とりあえず、インストール済みのパッケージをアップデートしておきます。 Anaconda Prompt から、
> conda update -y --all ... ... done
doneとでればOKです。
Jupyter Notebook のインストール
ます、現在インストールされているモジュールをconda listで確認してみます。
> conda list # packages in environment at C:\Users\xxxxx\miniconda3: # # Name Version Build Channel ca-certificates 2020.1.1 0 certifi 2020.4.5.2 py38_0 openssl 1.1.1g he774522_0 pip 20.1.1 py38_1 python 3.8.3 he1778fa_0 setuptools 47.3.0 py38_0 sqlite 3.32.2 h2a8f88b_0 vc 14.1 h0510ff6_4 vs2015_runtime 14.16.27012 hf0eaf9b_2 wheel 0.34.2 py38_0 wincertstore 0.2 py38_0 zlib 1.2.11 h62dcd97_4
モジュールは ]jupyter、notebookとその依存パッケージをインストールします。
> conda install jupyter notebook ... ... done
これで結構な数のパッケージがインストールされたはず。
Jupyter Notebook の起動
> jupyter notebook
これで、デフォルトのウェブブラウザが起動して Jupyter Notebook が表示されるはず。初期ディレクトリはユーザーのホームディレクトリ (C:\Users\xxxxx) の模様。
試しに、ここにtestという名前でPythonのファイルを作ってみます。
右上の方にある「New」から「Python 3」を選択します。

このような、「セル (Cell)」と呼ばれるものが出てくると思います。

ここにコードを書いていきます。「 + 」で実行できます。直接計算もできます。

変数も使えます。また、最終行に変数名を置くと変数がprintされます。print関数で表示させる場合と多少挙動が違うらしいです。

Jupyter Notebook の終了
Jupyter Notebook はブラウザを閉じても終了していません。Anaconda Prompt で終了処理を行う必要があります。Jupyter Notebook 起動中は Anaconda Prompt はログが流れっぱなしになっていると思いますが、そこで、「 + 」を押します。
[I 13:13:25.553 NotebookApp] Interrupted... [I 13:13:25.554 NotebookApp] Shutting down 1 kernel [I 13:13:25.757 NotebookApp] Kernel shutdown: 47bbe0c3-3582-41e3-ad40-88604875235c (base) C:\Users\xxxxx>
みたいに、カーソルが帰ってくればOKです。
