20200601のdockerに関する記事は13件です。

Windows10 HomeのWSL2にDockerを入れてみた

はじめに

Windows 10 Home EditionをWindows10 バージョン2004 ビルド19041にアップデートし、WSL2を入れてみた。
ここでは、Windows 10 Home EditionWindows Subsystem for Linux(WSL) 2Docker Desktop for Windowsをインストールしてみる。

Docker Toolboxをアンインストール

Docker Toolboxを使用していた場合、関連モジュールを含めてアンインストールしておく。

  1. Docker Toolboxをアンインストールする。
  2. VirtualBoxをアンインストールする。

Docker Desktop for Windowsをインストール

Docker Desktop WSL 2 backendに記載の手順に従い、インストールする。

事前準備

インストール

  1. Docker Desktop for Windowsにアクセスする。
  2. [Get Docker]ボタンをクリックする。
  3. Docker Desktop Installer.exeファイルをダブルクリックし、実行する。
  4. Docker Desktopのダウンロードが始まる。 image.png
  5. 特にチェックを変更せずに、そのまま[OK]ボタンをクリックする。 image.png
  6. インストール(解凍)が始まる。 image.png
  7. インストールが完了する。[Close and log out]ボタンをクリックする。 image.png
  8. Windowsの再起動には至らないが、Windowsをログオフし、再度ログオンすることになる。

Docker Desktop for Windowsのダッシュボードを使用する

  1. Windowsにログオンすると、Dockerのダッシュボードが自動的に起動する。ここからの所要時間は2分!
    [Start]ボタンをクリックする。 image.png
  2. 右側にPowerShellが開く。[git clone https://github.com/docker/getting-started.git]ボタンをクリックすると、PowerShellで試せるようになっている。[Next Step]ボタンをクリックする。
    Gitコマンドが必要なので、インストールしておくこと。 image.png
  3. 中央の青いボタンをクリックし、docker101tutorialという名称のDockerイメージを作成する。[Next Step]ボタンをクリックする。 image.png
  4. 中央の青いボタンをクリックし、Dockerイメージ(docker101tutorial)からdocker-tutorialという名称のDockerコンテナが起動する。[Next Step]ボタンをクリックする。 image.png
  5. [Sign in here.]リンクをクリックします。 image.png
  6. ダイアログが開くので、Docker Hubにサインイン(ログイン)またはサインアップ(アカウント登録)します。 image.png
  7. 中央の青いボタンをクリックし、Dockerイメージ(docker101tutorial)をDocker Hubにpush(登録)します。[Done]ボタンをクリックする。
  8. [Go directlly to the Dashboard instead]リンクをクリックする。 image.png
  9. Docker Desktop for Windowsのダッシュボードが開いて、インストールが完了する。 image.png

Docker Desktop WSL 2 backendを使用

  1. 右上に表示されている[設定]ボタン(歯車アイコン)をクリックする。 image.png
  2. Use the WSL 2 based engine (Windows Home can only run the WSL 2 backend)という項目がグレーアウトし、チェックが付けられていることが分かる。
  3. [Docker Engine]という項目があり、筆者の環境ではv19.03.8がインストールされていることが分かる。 image.png
  4. [Resources]-[WSL INTEGRATION]という項目があり、WSL2と統合できるようになっている模様。
    現在、筆者の環境にはWSL2のUbuntuがインストールされている。 image.png
  5. 試しに、WSL2のUbuntuを開き、docker --versionコマンドを実行すると、[Docker Engine]と同じバージョンのDockerがインストールされていることが分かる。 image.png

Visual Studio Codeに統合

  1. 有無を言わせずアンインストールしたDocker Toolboxだが、Visual Studio Codeを起動したところ、これまでと同様に使用できる状態だった。しっかりと、Docker Desktop WSL 2 backendが統合されていることが分かる。 image.png

さいごに

Docker Toolboxに比べて、VirtualBoxが占有していたディスク領域やメモリが減った分だけ、軽量になっています。同じPCとは思えません。

EdgeChromeのダウンローダー、PowerShellWSLのインストーラーとして活躍の場を見出すことができました。次は、いよいよ、AWS CLI/AWS SAM CLIを動かすことにチャレンジしたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

とりあえずdockerを全部stopするalias

コマンド

alias ds="docker ps -q | xargs docker stop"

dockerのコマンド何も分からない

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerコンテナ内でyumコマンドが使用できない

Dockerコンテナ内でyumを用いてインストールしようとしたら下記のようなエラーメッセージが表示された。(yumは入っていて、バージョンも表示される

$ bash-4.2# yum update
読み込んだプラグイン:ovl, priorities
amzn2-core                                            | 2.4 kB     00:00
http://packages.groonga.org/centos/2/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
他のミラーを試します。


 One of the configured repositories failed (Groonga for CentOS 2 - x86_64),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

 1. Contact the upstream for the repository and get them to fix the problem.

 2. Reconfigure the baseurl/etc. for the repository, to point to a working
    upstream. This is most often useful if you are using a newer
    distribution release than is supported by the repository (and the
    packages for the previous distribution release still work).

 3. Run the command with the repository temporarily disabled
        yum --disablerepo=groonga ...

 4. Disable the repository permanently, so yum won't use it by default. Yum
    will then just ignore the repository until you permanently enable it
    again or use --enablerepo for temporary usage:

        yum-config-manager --disable groonga
    or
        subscription-manager repos --disable=groonga

 5. Configure the failing repository to be skipped, if it is unavailable.
    Note that yum will try to contact the repo. when it runs most commands,
    so will have to try and fail each time (and thus. yum will be be much
    slower). If it is a very temporary problem though, this is often a nice
    compromise:

        yum-config-manager --save --setopt=groonga.skip_if_unavailable=true

failure: repodata/repomd.xml from groonga: [Errno 256] No more mirrors to try.
http://packages.groonga.org/centos/2/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

ミラー内にページがないですよという旨のエラー。
キャッシュに古いurlが残って404を返されることもあるようなので、下記コマンドでキャッシュをクリアしたが改善しなかった。

$ yum clean metadata
$ yum clean all

ミラーとなるベースのページ設定を編集すれば解決した。

$ cd /etc/yum.reps.d
$ ls
amzn2-core.repo  groonga.repo

groonga.repoでエラーが出ていたのでこちらを編集する。(存在しているページを指定すればOK)

$ vi groonga.repo
[groonga]
~略~
baseurl=http://packages.groonga.org/centos/8/$basearch/
#baseurl=http://packages.groonga.org/centos/$releasever/$basearch/ コメントアウト
~略~

実行して成功するか確認する。

$ yum update
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker(19.03)でgpu使って学習したかった時の覚書ーTensorflow/Keras

はじめに

DockerインストールしなおしてみたらDocker環境下TFやKerasで学習しようとしたときにGPU認識してくれなくてしばらくハマったので覚書です。

こういう環境にしたい

Docker 19.03

--コンテナ内--
ubuntu 18.04
cuda 10.0
cudnn 7.4
tensorflow-gpu 1.14.0
keras : latest

過去記事のResNet学習環境を作ることとします。

気を付けることその0:Dockerのバージョン

まずここが違ってくるとお話になりません。
旧と現では結構コマンドも変わってきてる模様。
確認して合う環境を構築しましょう

docker環境確認方法はホスト側で以下コマンドです

docker version

今回はDockerバージョン19.03を対象とします

気を付けることその1:コンテナ立ち上げ時のコマンド

いつのまにか--runtime=nvidiaじゃなくなってたので注意
GPU使いたいときは--gpu all(もしくは番号指定)コマンドになったんだそうで
より直感的ですね。
こちらの記事を参考
https://qiita.com/ksasaki/items/b20a785e1a0f610efa08

気を付けることその2:cuda,cudnn,tensorflow-gpu,pythonのバージョン

毎回引っかかるんだけどここに齟齬あるとほんと動きません。
オフィシャルの動作確認表を参考に入れましょう
LinuxのGPU周りの整合表は以下の通りでした。macは別表へ
https://www.tensorflow.org/install/source#gpu

今回はtensorflow-gpu==1.14.0が使いたかったので、それに合わせてCUDA10.0,cudnn7.4,python3.6を入れることとします。

環境構築していく

今回はcuda,cudnnのバージョンを狙い打ちたいので下記のコマンドでコンテナ立ち上げました

docker run --gpus all -it (ここにいろいろコマンド)--name test_container nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04 /bin/bash

実際は(ここにいろいろコマンド)部分に細々としたディスプレイ設定とかディレクトリのマウント設定とか付け足してます
過去記事参照ください

あらかじめdockerfileとかに書けたらいいんだろうけどそれもそれで面倒なので必要なものを後からいれていきます。

apt update
apt install python-pip3 
pip3 install tensorflow-gpu==1.14.0 keras matplotlib scikit-learn pillow

これで学習まわるはず

GPU使えてるか?の確認

学習回し始めた時にワーニング文的なのが出るのでそこ確認しても良いし
一度Ctrl + P + Qでコンテナから抜けて
コマンド

nvidia-smi

でGPUの占有率見ることでも確認できます。

おわりに

Dockerまわりもう少しお勉強が必要そう
より良いコマンドを探していきたいです

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerのDBとしてPostgreSQLを使用した際に躓いたところ

エラー経緯、内容

アプリのDBとして、docker上でPostgreSQLを動かすようにdocker-compose.ymlを以下内容で作成。

docker-compose.yml
version: '3.1'

services:
  database:
    image: postgres
    restart: always
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root

その後migrationを実行すると

FATAL:  role "root" does not exist

というエラーが発生。

解決策

結論

rootのロールを作成し、必要な権限を与える

具体的にやったこと

psqlコマンドでDBの起動状況を確認します。

terminal
psql -l

Owner欄にrootがないため、そもそもロールにrootの登録がなし。

したがって、まずはrootのロールを作成します(docker-composeの設定に合わせてpasswordも設定)。

PostgreSQL
postgres=# CREATE ROLE root WITH LOGIN PASSWORD 'root';

その後、psqlコマンドで何でも良いのでDBに接続し、ロールの情報を表示させます。

PostgreSQL
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create DB                                       | {}
 root      |                                                            | {}
 tomokazu  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

これを見ると、Role nametomokazuである場合にのみ、Create roleの権限が付いているため、tomokazuのロールで作成されたDBにどれでもいいので接続し、rootのロールを作成します。

terminal
psql -U tomokazu -d postgres

接続後、ALTER ROLEコマンドで権限を付与します(CREATE ROLE時に権限も同時に付与できそうなので、それでも良いと思います)。

PostgreSQL
ALTER ROLE root SUPERUSER CREATEDB;

もう一度\duでロールの設定一覧を確認すると、

PostgreSQL
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create DB                                       | {}
 root      | Superuser, Create DB                                       | {}
 tomokazu  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

ということで、めでたくロールrootの作成と権限付与が完了。

もちろん、問題なくdocker上でPostgreSQLを使えるようになりました!

覚えておくべきこと + 疑問点

覚えておくべきこと

あまりPostgreSQLを使っていないせいか、まず何のコマンドで動作状況なり、DB接続等を行うのかわからなかったため、以下コマンドはざっくり覚えておこうと思います。

terminal
psql -h [ホスト名] -p [ポート番号] -U [ロール名] -d [DB名]

# つまり具体的にはこんな感じ
psql -h localhost -p 5432 -U postgres -d postgres

疑問点

ローカル側のpsqlコマンドにてrootのロールを作成し、必要な権限を設定したのですが、なぜdocker上のpsql操作ではなく、ローカル側で良かったのか?
docker設定の細かな内容が理解ができていないのか、
はたまたPostgreSQLの動きを理解できていないのか、引き続きその理由を調査する必要があるなあと感じました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacにDocker Desktopをインストールする

最終更新日

2020年6月1日

検証を行ったmacOSのバージョンは下記です。

  • macOS Catalina 10.15.5

インストールするもののバージョンは下記です。

  • Docker Desktop 2.3.0.3

この記事が古くなった場合、下記の手順は最新のインストール手順とは異なっている可能性があります。

Docker Desktopのインストール

(1) https://www.docker.com/products/docker-desktop にアクセスしてください。

(2) [Download for Mac (stable)]をクリックしてください。

スクリーンショット 2020-06-01 13.55.29.png

(3) [許可]をクリックしてください。

スクリーンショット 2020-06-01 13.56.08.png

(4) ダウンロードされた.dmgファイルを実行してください。

スクリーンショット 2020-06-01 13.57.04.png

(5) [Docker.app]のアイコンを、右側にある[Applications]フォルダにドラッグしてください。

スクリーンショット 2020-06-01 13.57.54.png

(6) ウィンドウ左上の赤い丸をクリックしてください。ウィンドウが閉じます。

(7) デスクトップにある[Docker]を右クリック→["Docker"を取り出す]を選択してください。

スクリーンショット 2020-06-01 13.59.01.png

Dockerの起動

(1) Launchpadを開いて、[Docker]を実行してください。

スクリーンショット 2020-06-01 13.59.30.png

(2) [開く]をクリックしてください。

スクリーンショット 2020-06-01 14.00.41.png

(3) [OK]をクリックしてください。

スクリーンショット 2020-06-01 14.01.00.png

(4) Macアカウントのパスワードを入力後、[ヘルパーをインストール]をクリックしてください。

スクリーンショット 2020-06-01 14.01.20.png

(5) Macの画面右上にDockerアイコンが現れます。動きが止まったらDockerの起動完了です。

スクリーンショット 2020-06-01 14.03.02.png

Dockerの動作確認

(1) ターミナルで下記コマンドを実行してください。

docker run -it --rm supertest2014/nyan

このコマンドをターミナルで実行すると、こんな感じになります。

スクリーンショット 2020-06-01 14.17.31.png

(2) ターミナル上でControl + Cを押すと、Dockerで動いていたNyan Catプログラムが終了します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerの基礎固め

Dockerとは

オープンソースのコンテナ管理ソフトウェアのこと。
仮想化とはなんぞやを知らなければ掴みにくいと思いますので次に説明します。

まず、仮想化とは?

1台のサーバー上に、複数のサーバーとして利用できる仕組みを構築する方法のこと。

仮想化とは以下の3種類があります。

・ホスト型仮想化

ホストOS上で動作する仮想化ソフトウェアを利用してVM(※①)を管理する方式。オーバーヘッド(※②)が大きい。

・ハイパーバイザ型仮想化

ハードウェア上のハイパーバイザ(※③)を利用してVM(※①)を管理する方式。ホストOS無しでハードウェアを直接制御する。
オーバーヘッド(※②)が大きい。

・コンテナ型仮想化(= Docker)

ホストOS上でコンテナと呼ばれるVM(※①)と似たような振る舞いをする仮想的な区画を用意して管理する方式。
通常、1コンテナ1プロセスで使用するためのWebサーバーコンテナとかDBサーバーコンテナとかログ管理コンテナとか複数のコンテナを立てる構成となる。

Dockerと特徴

1.処理が速い
・VM毎にCPUやメモリやストレージなどを割り当てるような処理が必要がなくオーバヘッドが少ない。
・ゲストOSが無いため消費するリソースが少ない。
・ゲストOSが無いためアプリケーションまでのパケット転送処理(コンテキストスイッチなど)が少ない。

2.起動が速い
・ゲストOSを立ち上げるわけではないため。

3.可搬性が高い
・Dockerエンジンさえあれば基本どこでも動く。
・Dockerfileやdocker-compose.ymlによるインフラのコード化。

4.イメージが軽い
・Dockerイメージはレイヤで管理しているため。

5.Dockerイメージを簡単に共有できる仕組みが整っている
・特に、公式Dockerイメージが用意されている場合(JenkinsやWordPressなど)はデプロイが楽。
・ECRなどプロジェクトに閉じているかつフルマネージドな環境が整っている。

Dockerの用途

1.開発を共有化する作業

2.複数のOSでの動作チェック

3.バージョン管理システム

4.本番環境での利用

インストール方法

1.パッケージの最新化

$ sudo yum check-update

2.Dockerの最新版のダウンロードとインストール

$ sudo curl -fsSL https://get.docker.com/ | sh

3.Docker起動

$ sudo systemctl start docker

4.Docker自動起動設定(サーバーの再起動時にも自動で立ち上がるようにする)

$ sudo systemctl enable docker

Dockerイメージの取得

・イメージの検索

Docker Hubにあるイメージを検索する場合には、コマンドdocker searchのあとに、探しているイメージのキーワードを入力します。例えばCentOSのイメージの場合は下記により、候補が表示されます。通常は複数出てきます。
公式のイメージの場合は、OFFICIAL欄にOKと表示されます。これはDocker Hubには誰でもイメージを登録することができるため、公式とそうでないものと区分けしています。

$ sudo docker search centos

・イメージのダウンロード

利用したいイメージが見つかったら、コマンドdocker pullのあとに、検索したイメージ名を入力してダウンロードします。

$ sudo docker pull centos

・イメージの実行

ダウンロードしたイメージを実行する場合には、docker runのあとに、実行したいイメージ名を入力します。

$ sudo docker run centos

・ダウンロードしたイメージの確認

下記のコマンドを入力することにより、これまでダウンロードしたイメージの一覧が表示されます。

$ sudo docker images

よく使う基本コマンド

実行(docker run)

指定したDockerイメージを実行します。

例: Hello Worldの実行

$ docker run hello-world

例: Ubuntuの実行

$ docker run -i -t ubuntu /bin/bash

例: Nginxの実行(8080番で実行)

$ docker run -p 8080:80 nginx

コンテナの一覧(docker ps)

実行中のコンテナ一覧を表示します。(-aで停止しているコンテナも表示します)

$ docker ps

終了(docker kill)

指定したDockerイメージを終了します。(削除はされません)

$ docker kill [コンテナID/名前]

削除(docker rm)

コンテナを削除します。

$ docker rm [コンテナID/名前]

用語集

①仮想マシンのこと。

②余計なコストのこと。

③コンピュータを仮想化するためのソフトウェアのこと。

参考記事

https://qiita.com/gold-kou/items/44860fbda1a34a001fc1#%E4%BB%8A%E5%9B%9E%E3%81%AE%E5%89%8D%E6%8F%90

https://www.kagoya.jp/howto/rentalserver/docker/

https://paiza.hatenablog.com/entry/docker_intro#commands_basic

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows10 2004でWSL2を設定してVSCodeからDockerに接続する

Windows10 2004でWSL2を設定してVSCodeからDockerに接続する

Windows10のバージョン2004から正式にWSL2が利用可能になりました。WSLとWSL2の大きな違いの一つとして、Dockerの利用可否があげられます。
WSLではLinuxシステムコールをWindowsカーネルのものに変換する、という仕組みだったのに対し、WSL2では軽量のLinux VMを動作させる仕組みに変わったので、WSLでは実現できなかったDockerの利用が可能になりました。
WSL2を利用する主目的が、開発環境構築のためのDockerの利用という人も多いんじゃないかなぁ、と思いますので、今回はWSL2の導入からWSL2上へのDockerの導入、更にWindows側のVSCodeからWSL2上で動かしているDockerコンテナへリモート接続するところまでを試してみます。

Windows 10のバージョンを2004に上げる

現在のバージョンは Windowsの設定 > システム > バージョン情報 > Windowsの仕様 > バージョン に記載されております。
1.png
ここが2004でない場合、WSL2の利用にはバージョンアップが必要です。
Windows10ダウンロードサイトの「今すぐアップデート」を押下して、アップデートファイルを入手して実行することでアップデートします。

CPUの仮想化支援機能の有効化

WSL2の動作には、CPUの仮想化支援機能(Intel VT-X/AMD-V)が有効になっていることが必要です。
そのため、
①CPUが仮想化支援機能に対応していること
②BIOSで仮想化支援機能が有効になっていること
が必要です。

①に関してはよほど古いCPUでない限り対応しています。
②も、デフォルトで有効になっているPCやマザーボードが多いですが、こちらは無効になっていることがあり得ますので、確認が必要です。

自分の環境で仮想化支援機能が有効かどうかは、タスクマネージャーから確認できます。
タスクマネージャー > パフォーマンス > CPU > 仮想化 が「有効」ならば、仮想化支援機能が有効になっています。
5.png
「無効」だった場合は、BIOSから設定を有効にする必要があります。設定はPCやマザーボードによって異なるため、ググったりメーカーに問い合わせたりしてご確認ください。

※ちなみに筆者の私用PCのマザーボード、X470 AORUS ULTRA GAMINGでは、UEFI BIOSの以下の項目でした。
M.I.T > Advanced Frequency Settings > Advanced CPU Core Settings > SVM Mode の "Disabled"を"Enabled"に変更

WSLの有効化

  1. コントロールパネルの「Windows の機能の有効化または無効化」を開きます。Windowsの設定の検索バーに「Windowsの機能」まで入力すれば出てきます。 2.png
  2. 「Linux用Windowsサブシステム」と「仮想マシンプラットフォーム」にチェックを入れ、OKを押下します。
    3.png
    再起動を促されるので再起動します。

※なお、WSL2の利用では「Hyper-V」や「Windowsハイパーバイザ―プラットフォーム」にはチェックを入れる必要はありません。
Hyper-Vで予約されているポートをWSLから利用したい場合などに面倒なようなので、Hyper-Vと併用の必要がなければチェックを外しておいたほうがよさそうです。
「Windowsハイパーバイザ―プラットフォーム」についてはこちらが詳しいです。

Linuxディストリビューションのインストール時に、WSL2が既定になるように設定する

PowerShellを管理者権限で実行し、以下のコマンドを実行します。

wsl --set-default-version 2

これにより、LinuxディストリビューションがWSL2としてインストールされるようになります。

カーネルコンポーネントの更新

WSL2向けにLinuxカーネルを更新します。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel
に従い、カーネル更新プログラムを適用します。

Linuxのインストール

Microsoft StoreからLinuxディストリビューションをインストールします。
https://www.microsoft.com/ja-jp/search/shop/apps?q=linux
からお好みのディストリビューションを選択して「入手」を押下します。特に拘りがない場合はUbuntuを選んでおけばいいでしょう。
Microsoft Store上でインストールが完了したら「起動」を押下します。

起動したら、コンソール画面が開き、ユーザー名とパスワードを設定するよう要求されます。
設定が完了したらそのまま、コンソール画面内にLinuxのCLIが起動します。
6.png

一旦exitと入力し、Linuxを終了します。

LinuxのWSLバージョンの確認/WSL1からWSL2への変換

powershellより以下のコマンドで、現在インストールされているディストリビューションの一覧を表示することができます。

wsl --list -v

9.png
VERSION部分がWSLのバージョンになります。また、デフォルト設定(コンソール上でただwslbashコマンドを実行した際に起動するディストリビューション)のディストリビューションには左にスターがついています。
wsl --set-default-version 2を行った後にLinuxをインストールした場合、最初からWSL2としてインストールされているはずです。
一方、既にWSL1で利用していた環境がある場合(VERSION部分が1のもの)、その環境をWSL2に変換することもできます。以下のコマンドを利用してください。

wsl --set-version ${ディストリビューション名} 2
: wsl --set-version Ubuntu-20.04 2

ここまででWSL2のLinux環境の設定は完了です。

Docker Desktopのインストール

ここからはDockerの設定に入ります。今回の記事ではDockerの設定にDocker Desktopを利用します。
WSL2のLinux内でDockerの設定を行ってもいいのですが、Docker Desktopを利用することで、以下のメリットが得られます。

  • Dockerのセットアップをインストーラで容易に完了できる
  • Windows側(PowerShell)とLinux側(WSL2)の両方からコンテナを操作できる

Docker Desktopのインストールは以下の手順で行います。

  1. https://www.docker.com/products/docker-desktop の、"Download for Windows(stable)"からインストーラをダウンロードし、インストーラを実行。
  2. "Configuration"で、"Enable WSL 2 Windows Features"にチェックが入った状態でOkを押下。7.png

  3. "Installation succeeded"で"Close and log out"を押下すると、インストーラのウィンドウが閉じ、サインアウトされる。そのままWindowsを再起動する。

  4. Windowsにログイン後、少し待つと、デスクトップ右下のインジケータ内にDocker Desktopのアイコンが立ち上がる。"Docker Desktop is running"になるまで待つ。
    8.png
    runningになったら、アイコンをクリックし、メニュー内の"Settings"をクリックする。

  5. Settings画面で以下の項目を実施する。

    • General > Use the WSL 2 based engine にチェックが入っていることを確認
    • Resource > WSL INTEGRATION を設定し、"Apply & Restart"
      • WSLでデフォルト設定されたディストリビューションでDockerコンテナを起動したい場合は"Enable integration with my default WSL distro"にチェック
      • デフォルト設定でないディストリビューションでDockerコンテナを起動したい場合は、"Enable integration with additional distros:"の該当のディストリビューションのトグルをONにする 10.png

Dockerコンテナの作成/起動

Docker Desktopの設定が完了すれば、dockerコマンドでコンテナの操作が可能になっているはずです。試しに公式のgolangコンテナを起動してみます。
docker runコマンドでコンテナの作成と起動を一度に行えます。powershellからやってみます。(先述したように、WSL内から実行することも可能です。)

docker run -it golang

11.png
コンテナが起動します。

VSCodeにRemote Development Extensionをインストール

起動中のコンテナにVSCodeから接続してみましょう。そのためにはRemote Development Extensionが必要です。
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
のInstallからVSCodeにExtensionをインストールします。
12.png

VSCodeからWSL2内で実行中のDockerコンテナに接続

ここまでくればあともう一息です。VSCode上でコマンドパレットを開き(キーバインドを変更していなければCtrl+Shift+P)、"remote"と入力します。
候補が出てくるので、その中の"Remote-Containers: Attach to Running Container..."を選択します。
13.png
すると、実行中のWSL2内で実行中のDockerコンテナが一覧でリストされるため、VSCodeで開きたいコンテナを選択します。
14.png
VSCodeが別ウィンドウで起動し、ワークスペースとしてDockerコンテナを開きます。左下に接続中のコンテナが表示されています。
15.png
コンテナ内のファイルをVSCode上で閲覧/編集するためには、エクスプローラの「フォルダーを開く」からコンテナ内のディレクトリを指定して"ok"を押下します。
16.png

これで、VSCode上から、WSL2上のDockerコンテナ内のファイルを操作しての開発が可能になりました。
17.png

参考

https://qiita.com/kikiki/items/df9874bae23f3c271ea2
https://qiita.com/matarillo/items/ca1eecf8f9a3cd76f9ce
https://qiita.com/iridon0920/items/005a9224343413b74f78
https://qiita.com/yito/items/1edd82414dfc2ab2a7bc
https://support.bluestacks.com/hc/ja/articles/115003174386-PCでバーチャライゼーション-VT-を作動させるには-
https://dev.to/birdsea/windows-subsystem-for-linux-2-docker-for-wsl2-3dpm
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vagrant+Docker+Rails+Nuxt.js+MySQL+SSL化

はじめに

ポートフォリオ作成まで、環境構築が辛すぎたのでその過程を書きました。
完全に全ての技術に対して初心者だったので、毎日絶望していました。

ポートフォリオのために快適な開発環境をまず作りたくて試行錯誤していました。
Docker for Macが重すぎ、しかもfrontendとbackendに分けて、
しかもNginxを使ってSSL化までする記事がなさすぎて絶望したので実験しながら作りました。

今後忘れないために備忘録として・・・。
とりあえずそれぞれHello World出来るまで。

こんな人へ

とりあえずサクサクっと開発環境をつくりたいぜ。
Dockerとかの知識はちょっとあるぜ。

これを読むとわかること/おおまかな流れ

  • Vagrant環境構築
  • Nuxt.js環境構築
  • Docker環境構築
  • nuxtとRails(APIモード)とMySQLの開発環境構築
  • Nginxの環境構築
  • SSL化(オレオレ証明書)

 環境

Mac OS
ruby:2.6.3
Rails 5.2.4.3

フォルダ構成

app
├─docker-compose.yml
├─mutagen.yml
├─Vagrantfile
├─back #Rails
| ├─Dockerfile
| ├─Gemfile
| └─Gemfile.lock
├─front #Nuxst.js
| └─Dockerfile
├─nginx #nginx
| └─nginx.conf
└─ssl #nginxに読み込ませる鍵
  ├─server.crt
  ├─server.csr
  └─server.key

Vagrant

おおまかな流れ

  • VirtualBoxをinstall
  • Vagrantをinstall
  • Vagrantfile作成
  • Mutagenをinstall
  • VagrantにSSH接続する

Vagrant/Virtualboxダウンロード

https://www.vagrantup.com/
https://www.virtualbox.org/

brew cask install virtualbox
brew cask install vagrant

VagrantBox

VagrantBox(OS)のダウンロード
今回はubuntuで構築します。

vagrant box add ubuntu/xenial64
vagrant box list #確認しておきましょう

Vagrant plugin

vagrant plugin install vagrant-disksize vagrant-hostsupdater vagrant-mutagen vagrant-docker-compose

Vagrantセットアップ

作業フォルダの作成(名前はなんでも)

mkdir app
cd app

Vagrantfileの作成

/app
vagrant init ubuntu/xenial64

Vagrantfileを以下の内容に書き換えてください。

/app/Vagrantfile
Vagrant.configure('2') do |config|
  config.vm.box = 'ubuntu/xenial64'

  config.vm.hostname = 'app' #任意のホストネーム

  config.vm.network :private_network, ip: '192.168.50.10' #ここがVagrant内にアクセスするIP

  config.vm.provider :virtualbox do |vb|
    vb.gui = false
    vb.cpus = 4 #割り当てるCPUコア数
    vb.memory = 4096 #割り当てるメモリ
    vb.customize ['modifyvm', :id, '--natdnsproxy1', 'off']
    vb.customize ['modifyvm', :id, '--natdnshostresolver1', 'off']
  end

  config.disksize.size = '30GB' #ディスクサイズ
  config.mutagen.orchestrate = true

  config.vm.synced_folder './', '/home/vagrant/app', type: "rsync",
    rsync_auto: true,
    rsync__exclude: ['.git/', 'node_modules/', 'log/', 'tmp/']

  config.vm.provision :docker, run: 'always'
  config.vm.provision :docker_compose
end

MutagenのInstall

ファイル同期ソフトであるmutagenのインストールをします。
https://mutagen.io/

brew install mutagen-io/mutagen/mutagen
/app
touch mutagen.yml
vim mutagen.yml
/app/mutagen.yml
sync:
  app:
    mode: "two-way-resolved"
    alpha: "./"
    beta: "app:/home/vagrant/app" #同期させるフォルダ/Vagrantfileで設定したホストネームと合わせてください。
    ignore:
      vcs: true
      paths:
        - "/node_modules"
        - "/log"
        - "/tmp"

Vagrant起動

/app
vagrant up

はじめてVirtualBoxを入れたタイミングで「セキュリティとプライバシー」で弾かれるそうなのでダウンロードしたアプリケーションの許可をして再度upしてください。

: No such file or directory @ rb_sysopen - /Users/hoge/.ssh/config (Errno::ENOENT)

また、こんな感じのエラーが出たら、

touch /Users/hoge/.ssh/config

.ssh/configを作成してあげましょう。

仮想環境にssh接続

vagrant ssh
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-179-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * MicroK8s passes 9 million downloads. Thank you to all our contributors!

     https://microk8s.io/

2 packages can be updated.
0 updates are security updates.

New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat May 30 12:32:45 2020 from 10.0.2.2

こんな感じのログが出るとSSH接続完了です。

ちなみに

vagrant halt

も覚えておくと良いです。
同期されてねー!とか思ったらやります。vagrant環境の破棄です。(Vagrantfileが有る限りupで再度作成できるので安心)

参考記事

Docker For Macが遅い:対策の実験
Vagrantを使う「Mac最速のDocker環境」を初心者向けに解説【遅いMac for Dockerを卒業】
vagrantとDockerで環境構築をした
Docker for MacからVagrant + CoreOSに切り替えた

Docker

Dockerfile

/front/Dockerfile
FROM node:12.5.0-alpine

ENV HOME="/app" \
    LANG=C.UTF-8 \
    TZ=Asia/Tokyo

WORKDIR ${HOME}

RUN apk update && \
    apk upgrade && \
    npm install -g n && \
    yarn install &&\
    rm -rf /var/cache/apk/* s

ENV HOST 0.0.0.0

おそらく最低限の構成(もっとシンプルにできたら教えてください。)
npmとyarnをinstallしてます。VagrantなのでIPをバインディング
以下参照
rails s -b 0.0.0.0 のオプション-bの意味/バインディングアドレスとは

/back/Dockerfile
FROM ruby:2.6.3-alpine3.10

#おまじない的
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev make gcc libc-dev nodejs tzdata mysql-dev mysql-client yarn" \
    DEV_PACKAGES="build-base curl-dev" \
    HOME="/app" \
    LANG=C.UTF-8 \
    TZ=Asia/Tokyo

WORKDIR ${HOME} #ワークスペースの確保

ADD Gemfile ${HOME}/Gemfile #GemfileをDocker内にコピー
ADD Gemfile.lock ${HOME}/Gemfile.lock #Gemfile.lockをDocker内にコピー

RUN apk update && \
    apk upgrade && \
    apk add --update --no-cache ${RUNTIME_PACKAGES} && \
    apk add --update --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \
    bundle install -j4 && \
    apk del build-dependencies && \
    rm -rf /usr/local/bundle/cache/* \
    /usr/local/share/.cache/* \
    /var/cache/* \
    /tmp/* \
    /usr/lib/mysqld* \
    /usr/bin/mysql*

ADD . ${HOME}

ところどころわからないところがありますが・・・。ご存知の方コメントくださると有り難いです。

/app/docker-compose.yml
version: "3"

services:
  db:
    image: mysql:5.7
    env_file:
      - ./back/environments/db.env
    restart: always
    volumes:
      - db-data:/var/lib/mysql:cached

  back:
    build: back/
    command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    env_file:
      - ./back/environments/db.env
    volumes:
      - ./back:/app:cached
    depends_on:
      - db
    ports:
      - 3000:3000

  front:
    build: front/
    command: yarn run dev
    volumes:
      - ./front:/app:cached
    ports:
      - 8080:3000
    depends_on:
      - back

  nginx:
    image: nginx
    ports:
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./ssl/server.crt:/etc/nginx/ssl/server.crt
      - ./ssl/server.key:/etc/nginx/ssl/server.key


volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

Gemfile

/app/back/Gemfile
source 'https://rubygems.org'
gem 'rails', '~>5'
/app/back
touch Gemfile.lock

docker-composeを使ってbuild

vagrant内/app
docker-compose build

Nuxt.js

/app
$ docker-compose run --rm front npx create-nuxt-app

? Project name                   --> sample   # アプリ名
? Project description            --> sample    # アプリの説明
? Author name                    --> me        # アプリの作成者
? Choose the package manager     --> Npm
? Choose UI framework            --> None
? Choose custom server framework --> None
? Choose Nuxt.js modules         --> Axios
? Choose linting tools           --> -
? Choose test framework          --> None
? Choose rendering mode          --> Universal (SSR)
Vagrant内/app
docker-compose up front

http://192.168.50.10:8080にアクセスしてHello World!

参考記事

Nuxt.js + Rails(API) on DockerのHello Worldするべ!

Rails

今回のRailsはAPIモードで作成するので、 --api引数をば

/app
docker-compose run --rm back rails new . -f -d mysql --api
back/config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch('MYSQL_USER') { 'root' } %>
  password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %>
  host: db

development:
  <<: *default
  database: webapp_development

test:
  <<: *default
  database: webapp_test

DBの環境変数のファイルを作ります。

/app/back
mkdir environments
/app/back/environments
vim db.env
/app/back/environments/db.env
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_USER=username
MYSQL_PASSWORD=userpassword

DB権限設定をするためのSQLを作ります。

/app/back/db
vim grant_user.sql
grant_user.sql
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
FLUSH PRIVILEGES;

DBへクエリを流し込む

Vagrant内/app
docker-compose build
docker-compose up
Vagrant内/app
docker-compose ps

ちゃんとDBが動いている状態を確認

Vagrant内/app
docker-compose exec db mysql -u root -p -e"$(cat back/db/grant_user.sql)"

先ほど設定したrootpasswordを入力

Vagrant内/app
docker-compose exec db mysql -u username -p -e"show grants;"

権限の確認
先ほど設定したuserpasswordを入力

+------------------------------------------------+
| Grants for user_name@%                         |
+------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' |
+------------------------------------------------+

こうなればOK

Vagrant内/app
docker-compose exec app rails db:create

http://192.168.50.10:3000にアクセスしてHello World!

参考記事

Docker + Rails + Puma + Nginx + MySQL

Nginx

app/nginx/nginx.conf
worker_processes auto;

events {
  worker_connections 1024;
}

http {
  server {
    listen 443  ssl;
    ssl_certificate     /etc/nginx/ssl/server.crt; #SSL証明書
    ssl_certificate_key /etc/nginx/ssl/server.key; #秘密鍵

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location /api/ {
      proxy_pass http://192.168.50.10:3000;
      proxy_buffering off;
    }

    location / {
      proxy_pass http://192.168.50.10:8091;
      proxy_buffering off;
    }
  }
}

オレオレ証明書の作成

app/
#秘密鍵の作成
sudo openssl genrsa -out app/ssl/server.key 2048
#CSR(証明書署名要求)の作成
sudo openssl req -new -key app/ssl/server.key -out app/ssl/server.csr
#CRT(SSLサーバ証明書)の作成
sudo openssl x509 -days 3650 -req -signkey app/ssl/server.key -in app/ssl/server.csr -out app/ssl/server.crt 
Vagrant内/app
docker-conpose up

https://192.168.50.10:8080にアクセスしてHello World!

Chromeで警告が出る場合

自分で発行したサーバー証明書(オレオレ証明書)をブラウザに登録する方法
こちらを参考に、ブラウザに証明書を登録してください。

参考記事

Nuxt.jsでlocalhostをSSL化する方法

最後に

かなり駆け足・長文になってしまい申し訳ありません。
読んでくださってありがとうございます。
とりあえずの備忘録として書きましたので、間違っていたらコメントで教えていただけると有り難いです。

Vagrant環境内で、Nuxt.jsとRails、しかもDockerで構築してNginxでリッスン、しかもSSL化とかいう記事は無くて
それぞれの記事をつなぎ合わせてようやく完成しました。

Docker、Vagrant、Nginx、Rails、Nuxt.jsに関しては完全に初心者です。
初めて作成するにはかなり無謀なチャレンジでした・・・。

優しいマサカリ投げていただけると嬉しいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Pythonの開発環境をPoetryとDockerで作成してmatplotlibのグラフを描く

随時更新していくつもりです。

目的

pythonの開発環境をPoetryとDockerで構築し、データの可視化をmatplotlibで行えることを目指します。
1. Dockerfileを作る
2. Docker image をビルドする
3. コンテナを起動する
4. 動作を確認する

1.Dockerfileを作る

Dockerfile
FROM python:3.8.3-buster

ENV DISPLAY=host.docker.internal:0.0
ENV PATH $PATH:/root/.poetry/bin

RUN mkdir -p /workspace

RUN apt-get update \
    && apt-get install -y git \
    curl \
    && curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

WORKDIR /workspace

CMD ["/bin/bash"]

2.Docker image をビルドする

Dockerfileがあるディレクトリで以下のコマンドを実行します。

sudo docker build -t python3.8 .

3.コンテナを起動

macosxとubuntuで挙動が違ったため、以下のように書きました。windowsは未確認です。

build.sh
#!/bin/bash

if [[ "$OSTYPE" == "darwin"* ]]; then
    xhost +localhost:
    docker run -it --rm \
        -v /tmp/.X11-unix:/tmp/.X11-unix \
        python3.8 \
        /bin/bash
    xhost -localhost:
else
    xhost +local:
    docker run -it --rm \
        -v /tmp/.X11-unix:/tmp/.X11-unix \
        -e DISPLAY=$DISPLAY \
        python3.8 \
        /bin/bash
    xhost -local:
fi

4.動作確認

poetry --version
Poetry version 1.0.5

プロジェクト作成

poetry new sample
Created package sample in sample
apt-get update && apt-get install tree
tree sample
sample
├── README.rst
├── pyproject.toml
├── sample
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_sample.py

ライブラリのインストール

cd sample
poetry add matplotlib
Using version ^3.2.1 for matplotlib

Updating dependencies
Resolving dependencies... (19.2s)

Writing lock file


Package operations: 14 installs, 0 updates, 0 removals

  - Installing pyparsing (2.4.7)
  - Installing six (1.15.0)
  - Installing attrs (19.3.0)
  - Installing cycler (0.10.0)
  - Installing kiwisolver (1.2.0)
  - Installing more-itertools (8.3.0)
  - Installing numpy (1.18.4)
  - Installing packaging (20.4)
  - Installing pluggy (0.13.1)
  - Installing py (1.8.1)
  - Installing python-dateutil (2.8.1)
  - Installing wcwidth (0.1.9)
  - Installing matplotlib (3.2.1)
  - Installing pytest (5.4.2)

サンプルを実行

sample/sample.py
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3.0, 3.0, 100)
y = x**2
plt.plot(x, y)
plt.show()

結果

result_01.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows10 HomeのWSLをWSL2にアップグレードしてみた

はじめに

WSL2にアップグレードする前に、Windows10 バージョン2004 ビルド19041に上げてみたをご覧ください。

WSL2へのアップグレード方法について、Windows 10 用 Windows Subsystem for Linux のインストール ガイドに書かれているようだが、WSLのインストール方法しか見つからない。「WSL 2 に更新する」とあるが、項目だけで、アップグレード方法らしき手順が見当たらない。

どうも、話しをまとめると、次の2点ができていれば良いだけらしい。

  • Windows Subsystem for Linux(Linux用Windowsサブシステム)のインストール
  • 仮想マシン プラットフォームをインストール

しかしながら、後で分かることだが、次の手順も必要。

  • インストール済みのLinuxディストリビューションをWSL2に設定
    • コンテナファイルをWSLからWSL2に変換するために、なんと、1ディストリビューション当たり1時間コース!!
  • WSL2 Linuxカーネル更新プログラムをインストール
  • 仮想ハードディスクファイルの圧縮と暗号化を解除

アップグレード手順?

次に混乱したのが、PowerShellのコマンドしか載っていないこと。
WindowsユーザはGUIだからWindowsを使い続けるのであって、コマンドラインベースの手順しか載せていないところから、この記事が広くWindowsユーザを対象としていないことが分かる。もちろん、Windows上でLinuxを動かそうとしているユーザはLinuxユーザに違いない訳だから、shellで書いてあるなら納得が行く。
PowerShellのような、どこから生まれた思想なのかも分からないコマンドを載せられても、誰も分からないし、戸惑うだけだと思います。

GUIの場合

という訳で、GUIからWSL2を有効化する方法は次の通りです。

  1. [スタートメニュー]をクリックする。
  2. [設定]をクリックする。
  3. [アプリ]をクリックする。
  4. [オプション機能]リンクをクリックする。 image.png
  5. [Windowsのその他の機能]リンクをクリックする。 image.png
  6. [Windowsの機能]ダイアログが表示されるので、[Linux用Windowsサブシステム]にチェックが付いていることを確認する。

image.png
1. [仮想マシンプラットフォーム]にチェックを付ける。
image.png
1. 再起動を伴うため、まとめて再起動しましょう。[OK]ボタンをクリックする。
1. [今すぐ再起動]ボタンをクリックする。
image.png

CUIの場合

みんな大好きPowerShell(CUI)では、次のコマンドを実行します。

  1. PowerShell管理者としてコマンドプロンプトを起動します。
  2. [Linux用Windowsサブシステム]を有効化する。

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
  3. [仮想マシンプラットフォーム]を有効化する。

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
  4. オプションの機能が有効化されていることを確認する方法は次の通りです。grepのやり方が分からないので、ガンバってみてください。

    dism.exe /online /get-features
    
    機能名 : Microsoft-Windows-Subsystem-Linux
    状態 : 有効
    
    機能名 : VirtualMachinePlatform
    状態 : 有効
    

インストール済みのLinuxディストリビューションをWSL2に設定

  1. インストール済みのLinuxディストリビューションの一覧を表示する。

    wsl --list --verbose
    
      NAME          STATE           VERSION
    * Ubuntu        Stopped         1
      kali-linux    Stopped         1
    
  2. ここでは、インストール済みのUbuntuをWSL2にアップグレードします。

    wsl --set-version Ubuntu 2
    

WSL2 Linuxカーネル更新プログラムをインストール

  1. おや?
    指示通り、https://aka.ms/wsl2kernel にアクセスします。
    WSL 2 Linux カーネルの更新にリダイレクトされます。

    変換中です。この処理には数分かかることがあります...
    WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
    
  2. CPUアーキテクチャに従い、次のいずれかをダウンロードする。

  3. wsl_update_x64.msiをダブルクリックして起動する。
    image.png

  4. インストールが終了すると、次の画面が開くので、[Finish]ボタンをクリックする。

  5. もう一度、次のコマンドを実行します。

    wsl --set-version Ubuntu 2
    

仮想ハードディスクファイルの圧縮と暗号化を解除

  1. おや?
    エラーメッセージが変わった!急いでいるんですけど...。

    変換中です。この処理には数分かかることがあります...
    WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
    仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解 除されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。
    
  2. このページに「この問題の最新情報が追跡されている WSL Github スレッド #4103 を参照してください。」とあるので、アクセスした。

  3. 要するに、%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.*というフォルダの圧縮と暗号化を解除する必要がある。

  4. Windows Explorer%USERPROFILE%\AppData\Local\Packagesフォルダを開く。

  5. CanonicalGroupLimited.で始まるファイルを探し、[右クリック]-[プロパティ]を開く。

  6. [詳細設定]ボタンをクリックする。
    image.png

  7. [内容を圧縮してディスク領域を節約する]のチェックを外し、[OK]ボタンをクリックする。
    image.png

  8. 元の[プロパティ]ダイアログに戻るので、[OK]ボタンをクリックする。

  9. [属性変更の確認]ダイアログが開くので、[変更をこのフォルダー、サブフォルダーおよびファイルに適用する]が選択されていることを確認し、[OK]ボタンをクリックする。
    image.png

  10. [属性の適用エラー]ダイアログが開くので、[無視]ボタンをクリックする。
    image.png

  11. 属性の適用中ダイアログが開いて、変換処理が開始する。残りおよそ2時間45分...。

  12. さらに、もう一度、次のコマンドを実行します。

    wsl --set-version Ubuntu 2
    
    変換中です。この処理には数分かかることがあります...
    WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
    変換が完了しました。
    
  13. ようやく終わりました。

    wsl --list --verbose
    
      NAME          STATE           VERSION
    * Ubuntu        Stopped         2
      kali-linux    Stopped         1
    

WSL2をデフォルトに設定

  1. WSL-WSL2の変換はもう懲り懲りなので、WSL2をデフォルトに設定します。

    wsl --set-default-version 2
    
  2. が、次のどのディストリビューションをダウンロードしても、WSL2ではエラーになってインストールできませんでした。
    WSLに変更すると、正常にインストールできるため、WSL-WSL2変換は避けては通れない?
    この辺りは宿題です。

  • Kali Linuxをアンインストールして、再度、インストールします。
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0xc03a001a
Error: 0xc03a001a ?????? ??????????????????????????????????? ???? ??????????????????????????????????? ???? ???????????????????????

Press any key to continue...
  • Ubuntu 20.04 LTSをインストールします。
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0xc03a001a
Error: 0xc03a001a ?????? ??????????????????????????????????? ???? ??????????????????????????????????? ???? ???????????????????????

Press any key to continue...
  • Debianをインストールします。
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0xc03a001a
Error: 0xc03a001a ?????? ??????????????????????????????????? ???? ??????????????????????????????????? ???? ???????????????????????

Press any key to continue...

さいごに

EdgeはChromeのダウンローダー、PowerShellはWSLのインストーラーとして活躍の場を見出すことができました。1つのディストリビューションコンテナがあれば、Dockerを試せるので、次は、WSL2上でDockerを動かすことにチャレンジしたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows10のWSLをWSL2にアップグレードしてみた

はじめに

WSL2へのアップグレード方法について、Windows 10 用 Windows Subsystem for Linux のインストール ガイドに書かれているようだが、WSLのインストール方法しか見つからない。「WSL 2 に更新する」とあるが、項目だけで、アップグレード方法らしき手順が見当たらない。

どうも、話しをまとめると、次の2点ができていれば良いだけらしい。

  • Windows Subsystem for Linux(Linux用Windowsサブシステム)のインストール
  • 仮想マシン プラットフォームをインストール

また、後述するが、次の手順も必要。

  • インストール済みのLinuxディストリビューションをWSL2に設定
  • WSL2 Linuxカーネル更新プログラムをインストール
  • 仮想ハードディスクファイルの圧縮と暗号化を解除
  • ダウンロードしたディストリビューションのコンテナファイルをWSLからWSL2に変換(1時間コース)

アップグレード手順?

次に混乱したのが、PowerShellのコマンドしか載っていないこと。
WindowsユーザはGUIだからWindowsを使い続けるのであって、コマンドラインベースの手順しか載せていないところから、この記事が広くWindowsユーザを対象としていないことが分かる。もちろん、Windows上でLinuxを動かそうとしているユーザはLinuxユーザに違いない訳だから、shellで書いてあるなら納得が行く。
PowerShellのような、どこから生まれた思想なのかも分からないコマンドを載せられても、誰も分からないし、戸惑うだけだと思います。

GUIの場合

という訳で、GUIからWSL2を有効化する方法は次の通りです。

  1. [スタートメニュー]をクリックする。
  2. [設定]をクリックする。
  3. [アプリ]をクリックする。
  4. [オプション機能]リンクをクリックする。 image.png
  5. [Windowsのその他の機能]リンクをクリックする。 image.png
  6. [Windowsの機能]ダイアログが表示されるので、[Linux用Windowsサブシステム]にチェックが付いていることを確認する。

image.png
1. [仮想マシンプラットフォーム]にチェックを付ける。
image.png
1. 再起動を伴うため、まとめて再起動しましょう。[OK]ボタンをクリックする。
1. [今すぐ再起動]ボタンをクリックする。
image.png

CUIの場合

みんな大好きPowerShell(CUI)では、次のコマンドを実行します。

  1. PowerShell管理者としてコマンドプロンプトを起動します。
  2. [Linux用Windowsサブシステム]を有効化する。

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
  3. [仮想マシンプラットフォーム]を有効化する。

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
  4. オプションの機能が有効化されていることを確認する方法は次の通りです。grepのやり方が分からないので、ガンバってみてください。

    dism.exe /online /get-features
    
    機能名 : Microsoft-Windows-Subsystem-Linux
    状態 : 有効
    
    機能名 : VirtualMachinePlatform
    状態 : 有効
    

インストール済みのLinuxディストリビューションをWSL2に設定

  1. インストール済みのLinuxディストリビューションの一覧を表示する。

    wsl --list --verbose
    
      NAME          STATE           VERSION
    * Ubuntu        Stopped         1
      kali-linux    Stopped         1
    
  2. ここでは、インストール済みのUbuntuをWSL2にアップグレードします。

    wsl --set-version Ubuntu 2
    

WSL2 Linuxカーネル更新プログラムをインストール

  1. おや?
    指示通り、https://aka.ms/wsl2kernel にアクセスします。
    WSL 2 Linux カーネルの更新にリダイレクトされます。

    変換中です。この処理には数分かかることがあります...
    WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
    
  2. CPUアーキテクチャに従い、次のいずれかをダウンロードする。

  3. wsl_update_x64.msiをダブルクリックして起動する。
    image.png

  4. インストールが終了すると、次の画面が開くので、[Finish]ボタンをクリックする。

  5. もう一度、次のコマンドを実行します。

    wsl --set-version Ubuntu 2
    

仮想ハードディスクファイルの圧縮と暗号化を解除

  1. おや?
    エラーメッセージが変わった!急いでいるんですけど...。

    変換中です。この処理には数分かかることがあります...
    WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
    仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解 除されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。
    
  2. このページに「この問題の最新情報が追跡されている WSL Github スレッド #4103 を参照してください。」とあるので、アクセスした。

  3. 要するに、%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.*というフォルダの圧縮と暗号化を解除する必要がある。

  4. Windows Explorer%USERPROFILE%\AppData\Local\Packagesフォルダを開く。

  5. CanonicalGroupLimited.で始まるファイルを探し、[右クリック]-[プロパティ]を開く。

  6. [詳細設定]ボタンをクリックする。
    image.png

  7. [内容を圧縮してディスク領域を節約する]のチェックを外し、[OK]ボタンをクリックする。
    image.png

  8. 元の[プロパティ]ダイアログに戻るので、[OK]ボタンをクリックする。

  9. [属性変更の確認]ダイアログが開くので、[変更をこのフォルダー、サブフォルダーおよびファイルに適用する]が選択されていることを確認し、[OK]ボタンをクリックする。
    image.png

  10. [属性の適用エラー]ダイアログが開くので、[無視]ボタンをクリックする。
    image.png

  11. 属性の適用中ダイアログが開いて、変換処理が開始する。残りおよそ2時間45分...。

  12. さらに、もう一度、次のコマンドを実行します。

    wsl --set-version Ubuntu 2
    
    変換中です。この処理には数分かかることがあります...
    WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
    変換が完了しました。
    
  13. ようやく終わりました。

    wsl --list --verbose
    
      NAME          STATE           VERSION
    * Ubuntu        Stopped         2
      kali-linux    Stopped         1
    

WSL2をデフォルトに設定

  1. WSL-WSL2の変換はもう懲り懲りなので、WSL2をデフォルトに設定します。

    wsl --set-default-version 2
    
  2. が、次のどのディストリビューションをダウンロードしても、WSL2ではエラーになってインストールできませんでした。
    WSLに変更すると、正常にインストールできるため、WSL-WSL2変換は避けては通れない?
    この辺りは宿題です。

  • Kali Linuxをアンインストールして、再度、インストールします。
  • Ubuntu 20.04 LTSをインストールします。
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0xc03a001a
Error: 0xc03a001a ?????? ??????????????????????????????????? ???? ??????????????????????????????????? ???? ???????????????????????

Press any key to continue...
  • Debianをインストールします。
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0xc03a001a
Error: 0xc03a001a ?????? ??????????????????????????????????? ???? ??????????????????????????????????? ???? ???????????????????????

Press any key to continue...

さいごに

EdgeはChromeのダウンローダー、PowerShellはWSLのインストーラーとして活躍の場を見出すことができました。1つのディストリビューションコンテナがあれば、Dockerを試せるので、次は、WSL2上でDockerを動かすことにチャレンジしたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Kitematic 初回アプリ起動で「開発元が検証できないため開ません」と出て開けない

目的

  • Kitematicをダウンロード直後の初回起動時にポップアップが出てアプリの起動ができなかったため解決策をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.3)
ハードウェア MacBook Pro (16-inch ,2019)
プロセッサ 2.6 GHz 6コアIntel Core i7
メモリ 16 GB 2667 MHz DDR4
グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
  • ソフトウェア環境
項目 情報 備考
Docker バージョン 19.03.8 こちらの方法で導入→Docker Desktop for Mac をインストールする

発生した問題

  • ダウンロード直後にzipを解凍し、アプリを起動しようとしたところ「“Kitematic”は、開発元を検証できないため開けません。」と言う警告ウインドウが開き、起動することができない。

    スクリーンショット 2020-05-29 11.05.16.png

解決策

  1. 解凍し、アプリをクリックして起動するタイミングでKitematicの上にカーソルを持ってゆき、Controlキーを押しながらアプリケーションアイコンをクリックする。
  2. 「開く」を選択してクリックする。

    スクリーンショット 2020-05-29 11.08.07.png

  3. 下記のウインドウが出たら「開く」をクリックする。

    スクリーンショット 2020-05-29 11.09.12.png

  4. 無事にアプリを起動することができた。

    スクリーンショット 2020-05-29 11.09.31.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む