タグ「linux」が付けられているもの

Red Hat Remote ExamsでRHCEを受験しましたので気になる受験環境等について少し説明しようと思います。
Remote Examsではテストセンターに行かなくても自宅等からリモートで受験することができます。
ちなみにテストセンターは国内だと東京都内にあるようですが数が少ないのか予約できる日を見つけられませんでした。
台湾のテストセンターは空いている日も見つけられましたが国内では見つけられませんでした。

対象の資格はRHCEのほかにも、RHCSA等多数あります。
具体的には以下のURLで確認できます。

https://www.redhat.com/ja/services/certification/remote-exams

準備

基本的に、上に挙げたURLにある情報で足りると思いますが、部屋の片付け具合やカメラ位置等が気になって仕方がなかったのでそのあたりについて書きます。

部屋

部屋の片付け具合は、上記URLの動画に登場する部屋を参考にしました。
部屋を片付けている様子(?)もありますが片付いているのは机の上だけで、周りの本棚等は変わっていないようです。
準備についてのほかの方のブログなどを見ると、念のため本もすべて片付けたというものがいくつかありましたが、動画では片付けていなかったのでこれを信じて本は片付けずに受験しました。
結果としては特に何も言われず問題ありませんでした。

部屋の写真はここに載せませんが、以下のような部屋で受験しました。

6畳くらいの部屋で、壁に向かって左右中央あたりにテーブルを置き、そこにノートPCを置きました。
手の届く範囲にはなにもない状態にしました。
テーブルに向って座った場合の背中側に棚があって、そこに本や少しの小物が置いてあります。
横の手の届かないところには小さなテーブルやデスクトップPCなどいろいろ置いてありました。

カメラ

ノートPC付属のカメラだけではだめなので、USB接続の安いカメラを買いました。

ロジクールのC270です。結局これを使いましたが、証明書を見せるときにこれだとピントが合わずだめでした。
結局、ノートPC付属のカメラで見せました。
この場合、外部ディスプレイを使って受験しようとしている場合はノートPCは閉じていないといけないのでこのカメラだけだと受験できない可能性があります。

カメラ画像のサンプルは以下にあります。
FAQは日本語ページがないのでFAQ自体がないのかと最初戸惑いますが英語ページはちゃんとあります。カメラ画像のサンプルもFAQから辿れます。

FAQからさらにリンクで示されているのが以下。

https://learn.redhat.com/t5/Certification-Resources/How-to-position-an-external-camera-for-a-Red-Hat-remote-exam/ba-p/17444

カメラは2台使ってもよく、顔と手(キーボード)が映るようにする必要があります。
私は、上述のようにUSBの外部カメラとノートPCのカメラの二つを使いました。
USBカメラは机の横に三脚を立ててそこに置きました。購入したロジクール C270は三脚に固定する仕組みがありませんでしたが、載せるだけの感じで設置できました。念のためセロテープで落ちないようにしました。

カメラの高さは顔の高さくらいで少し下向きにしました。
試験監督から指示があるかもしれないので調整できるようにしておくと良いと思います。

また、試験中にもroom scanといって部屋を見せる必要があるので、すぐに取り外せるようにしておく必要もあります。

ネットワーク(Wifi)

有線が推奨とのことですが、私のノートPCには差すところがないので無線で受験しました。
特に気になるところもなく、問題ありませんでした。

body of this entry

以前書いた記事、Let's Encryptの証明書を使っているサーバにcURLで接続するとSECERRORUNKNOWN_ISSUERで失敗するですが、Let's Encryptは悪くなかったです。自分のWebサーバの設定が悪かったです。

Nginxを使っていて、サーバ証明書にcert.pemを指定していましたが、fullchain.pemを指定するのが正しいようです。証明書と同じフォルダにあるREADMEを見ても、cert.pemは古いので使われないということが書いてありました。 完全に動かないということではないようで気づきませんでした。

Let's Encryptの証明書を使っているサーバにcURLで接続するとSECERRORUNKNOWN_ISSUERで失敗する場合がありました。 ROOT CAは信頼済みになっていますが、中間証明書を信頼できずに失敗していました。 なお、Widows上のGoogle Chromeからは問題ありませんでした。

curl -vの結果は以下のようになっていました。

* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: cacert.pem
CApath: none
* Server certificate:
*       subject: CN=www.sei-yo.jp
*       start date: Jul 25 15:26:52 2020 GMT
*       expire date: Oct 23 15:26:52 2020 GMT
*       common name: www.sei-yo.jp
*       issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US
* NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
* Peer's Certificate issuer is not recognized.

中間証明書は以下にあります。

https://letsencrypt.org/ja/certificates/

https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt

この中間証明書を信頼済みとして用意することでエラーがなくなります。 その手順は以下です。

CentOSの場合

以下のコマンドを使って信頼する証明書を更新します。

update-ca-trust

信頼したい証明書の拡張子を.pemにして、以下のディレクトリに置いてから上記コマンドを実行すると更新されます。

/etc/pki/ca-trust/source/anchors/

Ubuntuの場合

以下のコマンドを使って信頼する証明書を更新します。

update-ca-certificates

信頼したい証明書の拡張子を.crtにして、以下のディレクトリに置いてから上記コマンドを実行すると更新されます。

/usr/local/share/ca-certificates

詳しくは、man 8 update-ca-certificatesを参照。

Linux Kernelが対応していないUSBデバイスを使用する方法

  • 投稿日:
  • by
  • カテゴリ:

ここで言うLinux Kernelが対応していないUSBデバイスというのは、デバイスのベンダーID(VID)とプロダクトID(PID)がカーネルのドライバが知らないために、ドライバはあるのにデバイスを認識しないということになってしまうデバイスのことを指します。 つまり、ドライバが知らないVID、PIDのUSBデバイスを使用する方法ということです。 以下の二つがあります。一つ目しか知らなかったのですが二つ目を知って便利になったのでここに書きます。

  • ドライバをコンパイル
  • ドライバに/sys のnew_idを使ってIDを伝える

ドライバをコンパイル

私の知る限り、USBデバイス用のドライバは通常、いくつかの(と言っても多数の)VIDとPIDの組み合わせを知っています。そしてその情報はソースコードに埋め込まれています。そのため新しいUSBデバイスに対応するためにはソースコードの修正を行って、コンパイルして利用する必要があります。 Linux Kernelに付属のドライバを使う場合には、以下の記事にあるような方法でコンパイルして利用する必要があります。しかし、Linux Kernelに付属のドライバはKernelバージョン毎にあるためKernelのアップデートをする度にドライバのコンパイルが必要になってしまいます。

WLI-UC-GNでhostapd 使ってAP化に成功

Kernel アップデートの度にコンパイルするのはかなりの手間なのでこれを防ぐには、Kernelのアップストリームに取り込んでもらう手があります。修正内容としてはVIDとPIDが列挙されている個所に1つ追加するだけなので軽微ですが、Linux Kernelの修正の流儀がわかっておらず依頼していません。

ドライバに/sys のnew_idを使ってIDを伝える

ドライバに動的にVID PIDを伝えることでデバイスを使えるようにする方法があります。 /sys/bus/usb/drivers/の下にドライバ名のディレクトリがあればその下のnew_idにVID PIDを書き込みます。 するとドライバがそのデバイスを利用可能にしてくれます。 ドライバ名のディレクトリがない場合は該当のドライバが読み込まれていないのでmodprobeコマンドで読み込む必要があります。

echo "0411 014F" > /sys/bus/usb/drivers/rt2800usb/new_id

modprobeコマンドで読み込むのを自動で行うには/etc/modulesファイルにドライバ名を書きます。 また、/etc/modprobe.d/の下に拡張子を.confにしたファイルを置いて以下のように書くとOS起動時に上記コマンドまで実施してくれて便利です。

install rt2800usb /sbin/modprobe -i rt2800usb; echo "0411 014F" > /sys/bus/usb/drivers/rt2800usb/new_id

cpanm XML::LibXML::SAXでEnv.pmが必要

  • 投稿日:
  • by
  • カテゴリ:

cpanm XML::LibXML::SAXでXML::LibXML::SAXをインストールしようとしたところ、以下のエラーとなりました。 cpanm EnvでEnv.pmをインストールしたところ、エラーがなくなりました。

cpanm (App::cpanminus) 1.7044 on perl 5.016003 built for x86_64-linux-thread-multi
Work directory is /root/.cpanm/work/1592575613.22094
You have make /bin/make
You have LWP 6.45
You have /bin/tar: tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
Searching XML::LibXML::SAX () on cpanmetadb ...
--> Working on XML::LibXML::SAX
Fetching http://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0205.tar.gz
-> OK
Unpacking XML-LibXML-2.0205.tar.gz
Entering XML-LibXML-2.0205
Checking configure dependencies from META.json
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (6.68)
Checking if you have Alien::Base::Wrapper 0 ... No
Checking if you have Alien::Libxml2 0.14 ... No
Checking if you have Config 0 ... Yes (undef)
==> Found dependencies: Alien::Base::Wrapper, Alien::Libxml2
Searching Alien::Base::Wrapper (0) on cpanmetadb ...
--> Working on Alien::Base::Wrapper
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/Alien-Build-2.26.tar.gz
-> OK
Unpacking Alien-Build-2.26.tar.gz
Entering Alien-Build-2.26
Checking configure dependencies from META.json
Checking if you have ExtUtils::ParseXS 3.30 ... Yes (3.35)
Checking if you have ExtUtils::MakeMaker 6.64 ... Yes (6.68)
Checking if you have File::Which 0 ... No
Checking if you have ExtUtils::CBuilder 0 ... Yes (0.280234)
==> Found dependencies: File::Which
Searching File::Which (0) on cpanmetadb ...
--> Working on File::Which
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/File-Which-1.23.tar.gz
-> OK
Unpacking File-Which-1.23.tar.gz
Entering File-Which-1.23
Checking configure dependencies from META.json
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (6.68)
Configuring File-Which-1.23
Running Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for File::Which
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have Test::More 0.47 ... Yes (1.302175)
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.68)
Building and testing File-Which-1.23
cp lib/File/Which.pm blib/lib/File/Which.pm
Manifying blib/man3/File::Which.3pm
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
#
#
#
# HARNESS_ACTIVE=1
# HARNESS_VERSION=3.42
# LANG=C
# LC_ALL=C
# LC_MESSAGES=C
# PERL5LIB=/root/.cpanm/work/1592575613.22094/File-Which-1.23/blib/lib:/root/.cpanm/work/1592575613.22094/File-Which-1.23/blib/arch
# PERL_DL_NONLAZY=1
# PERL_MM_USE_DEFAULT=1
# PERL_USE_UNSAFE_INC=1
# SHELL=/bin/bash
#
#
#
# PERL5LIB path
# /root/.cpanm/work/1592575613.22094/File-Which-1.23/blib/lib
# /root/.cpanm/work/1592575613.22094/File-Which-1.23/blib/arch
#
#
#
# perl                5.016003
# ExtUtils::MakeMaker 6.68
# Test::More          1.302175
#
#
#
t/00_diag.t ..... ok
t/01_use.t ...... ok
Can't locate Env.pm in @INC (@INC contains: /root/.cpanm/work/1592575613.22094/File-Which-1.23/blib/lib /root/.cpanm/work/1592575613.22094/File-Which-1.23/blib/arch /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at t/file_which.t line 3.
BEGIN failed--compilation aborted at t/file_which.t line 3.
t/file_which.t ..
Dubious, test returned 2 (wstat 512, 0x200)
No subtests run

Test Summary Report
-------------------
t/file_which.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: No plan found in TAP output
Files=3, Tests=2,  0 wallclock secs ( 0.02 usr  0.00 sys +  0.12 cusr  0.01 csys =  0.15 CPU)
Result: FAIL
Failed 1/3 test programs. 0/2 subtests failed.
make: *** [test_dynamic] Error 2
-> FAIL Installing File::Which failed. See /root/.cpanm/work/1592575613.22094/build.log for details. Retry with --force to force install it.
-> FAIL Installing the dependencies failed: Module 'File::Which' is not installed
-> FAIL Bailing out the installation for Alien-Build-2.26.
Searching Alien::Libxml2 (0.14) on cpanmetadb ...
--> Working on Alien::Libxml2
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/Alien-Libxml2-0.16.tar.gz
-> OK
Unpacking Alien-Libxml2-0.16.tar.gz
Entering Alien-Libxml2-0.16
Checking configure dependencies from META.json
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (6.68)
Checking if you have Alien::Build::Plugin::Build::SearchDep 0.35 ... No
Checking if you have Alien::Build::Plugin::Probe::Vcpkg 0 ... No
Checking if you have Alien::Build 2.12 ... No
Checking if you have Alien::Build::MM 2.12 ... No
Checking if you have Alien::Build::Plugin::Prefer::BadVersion 1.05 ... No
Checking if you have ExtUtils::CBuilder 0 ... Yes (0.280234)
==> Found dependencies: Alien::Build::Plugin::Build::SearchDep, Alien::Build::Plugin::Probe::Vcpkg, Alien::Build, Alien::Build::MM, Alien::Build::Plugin::Prefer::BadVersion
Searching Alien::Build::Plugin::Build::SearchDep (0.35) on cpanmetadb ...
Already tried Alien-Build-2.26. Skipping.
Searching Alien::Build::Plugin::Probe::Vcpkg (0) on cpanmetadb ...
Already tried Alien-Build-2.26. Skipping.
Searching Alien::Build (2.12) on cpanmetadb ...
Already tried Alien-Build-2.26. Skipping.
Searching Alien::Build::MM (2.12) on cpanmetadb ...
Already tried Alien-Build-2.26. Skipping.
Searching Alien::Build::Plugin::Prefer::BadVersion (1.05) on cpanmetadb ...
Already tried Alien-Build-2.26. Skipping.
-> FAIL Installing the dependencies failed: Module 'Alien::Build::Plugin::Build::SearchDep' is not installed, Module 'Alien::Build::Plugin::Probe::Vcpkg' is not installed, Module 'Alien::Build' is not installed, Module 'Alien::Build::MM' is not installed, Module 'Alien::Build::Plugin::Prefer::BadVersion' is not installed
-> FAIL Bailing out the installation for Alien-Libxml2-0.16.
-> FAIL Installing the dependencies failed: Module 'Alien::Base::Wrapper' is not installed, Module 'Alien::Libxml2' is not installed
-> FAIL Bailing out the installation for XML-LibXML-2.0205.

cpanm XML::SAX::ExpatXSでFatal.pmのインストールが必要

  • 投稿日:
  • by
  • カテゴリ:

cpanm XML::SAX::ExpatXSでXML::SAX::ExpatXSをインストールしようとしたところ、以下のエラーメッセージが出ました。 cpanm FatalでFatal.pmをインストールしたらエラーが出なくなりました。

cpanm (App::cpanminus) 1.7044 on perl 5.016003 built for x86_64-linux-thread-multi
Work directory is /root/.cpanm/work/1592574714.18422
You have make /bin/make
You have LWP 6.45
You have /bin/tar: tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.
Searching XML::SAX::ExpatXS () on cpanmetadb ...
--> Working on XML::SAX::ExpatXS
Fetching http://www.cpan.org/authors/id/P/PC/PCIMPRICH/XML-SAX-ExpatXS-1.33.tar.gz
-> OK
Unpacking XML-SAX-ExpatXS-1.33.tar.gz
Entering XML-SAX-ExpatXS-1.33
Checking configure dependencies from META.yml
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (6.68)
Configuring XML-SAX-ExpatXS-1.33
Running Makefile.PL
Warning: prerequisite XML::SAX 0.96 not found.
Writing XML::SAX::ExpatXS::Preload
Checking if your kit is complete...
Looks good
Do you want to alter ParserDetails.ini? [Y] Y
Writing Makefile for XML::SAX::ExpatXS
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have XML::SAX 0.96 ... No
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.68)
==> Found dependencies: XML::SAX
Searching XML::SAX (0.96) on cpanmetadb ...
--> Working on XML::SAX
Fetching http://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-1.02.tar.gz
-> OK
Unpacking XML-SAX-1.02.tar.gz
Entering XML-SAX-1.02
Checking configure dependencies from META.json
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (6.68)
Configuring XML-SAX-1.02
Running Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for XML::SAX
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have XML::NamespaceSupport 0.03 ... Yes (1.12)
Checking if you have XML::SAX::Base 1.05 ... Yes (1.09)
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.68)
Checking if you have File::Temp 0 ... Yes (0.2301)
Building and testing XML-SAX-1.02
cp lib/XML/SAX/PurePerl/EncodingDetect.pm blib/lib/XML/SAX/PurePerl/EncodingDetect.pm
cp lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm blib/lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm
cp lib/XML/SAX/PurePerl/Reader/Stream.pm blib/lib/XML/SAX/PurePerl/Reader/Stream.pm
cp lib/XML/SAX.pm blib/lib/XML/SAX.pm
cp lib/XML/SAX/PurePerl/DTDDecls.pm blib/lib/XML/SAX/PurePerl/DTDDecls.pm
cp lib/XML/SAX/PurePerl/Reader/NoUnicodeExt.pm blib/lib/XML/SAX/PurePerl/Reader/NoUnicodeExt.pm
cp lib/XML/SAX/DocumentLocator.pm blib/lib/XML/SAX/DocumentLocator.pm
cp lib/XML/SAX/PurePerl/Reader/String.pm blib/lib/XML/SAX/PurePerl/Reader/String.pm
cp lib/XML/SAX/PurePerl/UnicodeExt.pm blib/lib/XML/SAX/PurePerl/UnicodeExt.pm
cp lib/XML/SAX/PurePerl/Exception.pm blib/lib/XML/SAX/PurePerl/Exception.pm
cp lib/XML/SAX/PurePerl/DocType.pm blib/lib/XML/SAX/PurePerl/DocType.pm
cp lib/XML/SAX/PurePerl/DebugHandler.pm blib/lib/XML/SAX/PurePerl/DebugHandler.pm
cp lib/XML/SAX/Intro.pod blib/lib/XML/SAX/Intro.pod
cp lib/XML/SAX/ParserFactory.pm blib/lib/XML/SAX/ParserFactory.pm
cp lib/XML/SAX/PurePerl/Reader/URI.pm blib/lib/XML/SAX/PurePerl/Reader/URI.pm
cp lib/XML/SAX/PurePerl/XMLDecl.pm blib/lib/XML/SAX/PurePerl/XMLDecl.pm
cp lib/XML/SAX/PurePerl/Reader.pm blib/lib/XML/SAX/PurePerl/Reader.pm
cp lib/XML/SAX/PurePerl.pm blib/lib/XML/SAX/PurePerl.pm
cp lib/XML/SAX/PurePerl/NoUnicodeExt.pm blib/lib/XML/SAX/PurePerl/NoUnicodeExt.pm
cp lib/XML/SAX/PurePerl/Productions.pm blib/lib/XML/SAX/PurePerl/Productions.pm
Manifying blib/man3/XML::SAX::ParserFactory.3pm
Manifying blib/man3/XML::SAX.3pm
Manifying blib/man3/XML::SAX::Intro.3pm
Manifying blib/man3/XML::SAX::PurePerl::Reader.3pm
Manifying blib/man3/XML::SAX::PurePerl.3pm
Manifying blib/man3/XML::SAX::DocumentLocator.3pm
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ....... ok
t/01known.t ....... ok
t/10xmldecl1.t .... ok
t/11xmldecl2.t .... ok
t/12miscstart.t ... ok
t/13int_ent.t ..... ok
t/14encoding.t .... ok
t/15element.t ..... ok
parsed 80085 bytes in 0 seconds
t/16large.t ....... ok
t/19pi.t .......... ok
t/20factory.t ..... ok
Can't locate Fatal.pm in @INC (@INC contains: /root/.cpanm/work/1592574714.18422/XML-SAX-1.02/blib/lib /root/.cpanm/work/1592574714.18422/XML-SAX-1.02/blib/arch /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at t/21saxini.t line 6.
BEGIN failed--compilation aborted at t/21saxini.t line 6.
t/21saxini.t ......
Dubious, test returned 2 (wstat 512, 0x200)
No subtests run
t/30parse_file.t .. ok
t/40cdata.t ....... ok
t/42entities.t .... ok
t/99cleanup.t ..... ok

Test Summary Report
-------------------
t/21saxini.t    (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: No plan found in TAP output
Files=16, Tests=105,  1 wallclock secs ( 0.05 usr  0.01 sys +  0.66 cusr  0.12 csys =  0.84 CPU)
Result: FAIL
Failed 1/16 test programs. 0/105 subtests failed.
make: *** [test_dynamic] Error 255
-> FAIL Installing XML::SAX failed. See /root/.cpanm/work/1592574714.18422/build.log for details. Retry with --force to force install it.
-> FAIL Installing the dependencies failed: Module 'XML::SAX' is not installed
-> FAIL Bailing out the installation for XML-SAX-ExpatXS-1.33.

Docker Desktop for Windowsの導入

  • 投稿日:
  • by
  • カテゴリ:

Docker Desktop for Windowsを導入してみました。

dockerコンテナを作って動かしたいのが目的です。 Windowsを使うのは、普段使っているOSがWindowsだからで、コンテナはLinuxのものを使います。 そうしたときに、docker Engineをどこで動かすかの選択肢があります。

  • Windows (Docker Desktop for Windows)
  • Windows上のLinux VM(Hyper-VやVirtual Box上のLinux VMでLinux用のDocker Engineを動かす)

開発用にLinux VMを動かしているのでそちらでDockerを使っても良いのですが、わざわざVMを起動して使うのも面倒そうなのでWindows上で動かすことにしました。 ただ、Windows上で動かすと言っても、実際にはDocker用のLinux VMがHyper-Vを使って起動します。 そのため、自分でLinux VMを用意して動かすのと仕組みはそれほど変わりません。

Docker Desktop for Windowsの場合、Docker ClientはWindows上で動きますが、Docker EngineはLinux VM上で動きます。 自分でLinux VMを用意して使う場合はDocker ClientもDocker EngineもLinux VM上で動きます。 コンテナそのものはどちらもLinux VM上で動きます。

Docker Desktop for Windowsを使う場合、DockerfileやコンテナにコピーするファイルをLinux VMから利用できるようにする必要があります。 どのドライブをアクセス可能にするかは、settingsから設定できます。 なお、コンテナからマウントして使うようなデータ領域としてはWindows上の領域は不向きで、data volumeやdata containerを使う方が良いようです。これには二つの理由があって、一つはWindows上の領域はLinux上からみて、rwxrwxrwxのモードで見えます。もう一つは、SMBを使ってLinux VMに領域を見せる際、NOBRLオプションが付いているため、ロックができない場合がある点です。 これらはDocker Desktop for Windowsのドキュメントの最初の方(Shared drives)に書いてあります。

と、ここまでやってから大事なことに気づきました。 開発用にLinux VMを動かしていますが、そちらはVirtual Boxを使っています。 Docker Desktop for WindowsはHyper-Vを使います。 これらの共存はできないので、どちらを使うか選ぶ必要があります。。つづく。。