「つくりながら学ぶ! Python セキュリティプログラミング」― Docker Desktop for Windows での環境構築
2021/06/25

手順
1. Docker Desktop for Windows のインストール ※1
2. Dockerfile を使い、書籍で使う Linux コンテナをビルド (書籍 12p と同じ)
3. コンテナの起動※1 Docker Desktop for Windows のインストールについては公式 HP

https://docs.docker.jp/docker-for-windows/install-windows-home.htmlに手順が載っているため、Linux コンテナのビルドと起動手順の解説のみ必要とされる場
合は、手順 2. 以降を確認してください。

1. Docker Desktop for Windows のインストール
Docker Desktop は WSL2 をバックエンドとして使うため、WSL2 をインストールしてからDocker Desktop をインストールします。WSL2 のインストール手順は以下の URL に書いてあります。

https://docs.docker.jp/docker-for-windows/wsl.html
簡単にまとめると、
1. WSL2 の有効化(管理者権限で起動したコマンドプロンプトで 2 つコマンドを実行)
2. Linux カーネル更新プログラムパッケージをダウンロード & インストール

1.1 WSL2 の有効化
管理者権限でコマンドプロンプトを起動したら、以下の 2 つのコマンドを実行します。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux/all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all/norestart
参考までに、上記 2 つのコマンドを実行したときのスクリーンショットは以下のようになります。

1.2 Linux カーネル更新プログラムパッケージをダウンロード & インストール
以下の URL にあるリンクをクリックしてインストーラーをダウンロードします。

https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#step-4---download-thelinux-kernel-update-package

ダウンロードした exe ファイルを実行すればインストール完了です (参考までに、インストーラー起動時は以下のスクリーンショットに示すウィンドウが出ます)。

1.3 Docker Desktop のダウンロード & インストール
WSL2 がインストールできたら Docker Desktop をインストールします。インストール手順が記載されている以下の URL の公式 HP にアクセスすると次のような画面になります。

https://docs.docker.jp/docker-for-windows/install-windows-home.html

上のページ中にある「Docker Hub からダウンロード」をクリックすると、以下のダウンロードページに飛びます。

上の画面の「Get Docker」ボタンをクリックすればダウンロードが開始されます。ダウンロードした exe ファイルを起動すると以下のような画面になるので両方チェックがあることを確認して「OK」を押します。

インストールが終わると次のような画面になります。

これで Docker Desktop のインストールは完了ですが、念のためコマンドプロンプトで「docker」と打ってエラーが出ないことを確認すると良いです。インストールされていると下のような画面になります。(正しくインストールされていない点は未検証ですが、「コマンドが見つかりません」などと表示されると思います。)

2. Dockerfile を使い、書籍で使う Linux コンテナをビルド (書籍 12p と同じ)
Docker Desktop がインストールできたら、書籍で使う Linux コンテナをビルドする作業に移りますが、こちらの手順は書籍 12p に記載している手順と同じです。
まずサポートサイトや gitlab から Dockerfile および run_linux をダウンロードします。ダウンロードした Dockerfile を適当なフォルダ(ここでは Desktop)に配置し、コマンドプロンプトに以下のコマンドを入力します。

docker build . -t pysec101

ビルドが完了したときのコマンドプロンプトの画面は以下の通りです。

3. コンテナの起動
3.1 通常の起動方法
書籍中では run_linux を使ってコンテナを起動していますが、Docker Desktop をインストールした場合は少し異なります。コマンドプロンプトを起動して以下のコマンドを実行することでコンテナが起動します。

docker run -u pysec101 -it --rm --net=host --privileged --cap-add=SYS_PTRACE--security-opt="seccomp=unconfined" pysec101:latest /bin/bash

また、Windows ホストと Linux コンテナ間でファイルを共有したい場合は、 -v オプションを付与します。例えば以下のコマンドは、Windows ホストの C:\Users\myname\Desktop
フォルダを Linux コンテナ中の/home/pysec101 ディレクトリに共有する例です。
C:\Users\myname\Desktop の部分を変えることで、好きなフォルダのファイルを共有できます。

docker run -v C:\Users\myname\Desktop:/home/pysec101 -u pysec101 -it --rm--net=host --privileged --cap-add=SYS_PTRACE--security-opt="seccomp=unconfined" pysec101:latest /bin/bash

参考までに Linux コンテナの起動が完了した画面は以下のようになります。

3.2 別の起動方法
もう一つ別の起動方法として、Docker Desktop の GUI から立ち上げる方法もあります。インストールした Docker Desktop を起動すると以下のような画面になるので、左の「images」をクリックします。

クリックすると以下のような画面になる(ビルドした pysec101 コンテナが確認できる)ので、「RUN」を押す。

「RUN」を押すと、「Containers/Apps」タブに起動中のコンテナが現れるので、右の「CLI」ボタンを押せばコマンドプロンプトが立ち上がり、Linux コンテナが起動できる。

この方法は GUI でできるので簡単ですが、一部のコードが動かないため、3.1 の手順を推奨します (3.2 の手順で起動したコンテナ中で 8 章のサンプルコードが動作しません)。

以上