3.9K Views
July 29, 20
スライド概要
Infra Study Meetup #4 のLTで発表した内容です
https://forkwell.connpass.com/event/179755/
経済ニュースアプリのSREの仕事をしています。
Infra Study Meetup #4 LT Docker Desktop WSL2 Backendで捗る Windows PCのコンテナ開発環境 あんどぅ(Yuki Ando) @integrated1453 2020年7月29日
自己紹介 ◼ あんどぅ(Yuki Ando) @integrated1453 ⚫ SIer10年目 インフラエンジニア ⚫ 最近の仕事 – AWSのアーキテクチャ設計やInfrastructure as Code – CI/CDパイプラインの整備やモニタリングの改善 ⚫ 登壇 – Cloud Operatar Days Tokyo 2020 (A-1-6) 1
目次 自己紹介 なぜDocker Desktopを使いたいのか なぜDocker Desktop + WSLで使いたいのか なぜDocker Desktop WSL 2 Backendを使いたいのか Docker Desktop WSL 2 Backendに乗り換えてみた まとめ 2
\Windowsでもdocker runしたい/ 仮想化ソフトウェアでLinuxVMを起動する VMにDocker Engineのセットアップするのを自動化する 3
\Windowsでもdocker runしたい/ 仮想化ソフトウェアでLinuxVMを起動する ローカルで動かすDockerホスト用VMの管理、 やりたくないなぁ・・・ VMにDocker Engineのセットアップするのを自動化する 4
Docker Desktopがよさそう Docker Desktop.exe WindowsのコマンドプロンプトやPowerShell からdockerコマンドが利用できる Kubernetesクラスタも簡単に ローカルにセットアップできる Docker EngineがHyper-V上のVMで動く https://www.docker.com/products/docker-desktop 5
Docker Desktopがよさそう Docker Desktop.exe WindowsのコマンドプロンプトやPowerShell からdockerコマンドが利用できる Kubernetesクラスタも簡単に ローカルにセットアップできる Docker EngineがHyper-V上のVMで動く https://www.docker.com/products/docker-desktop ◼ このVMの中身は管理不要 ◼ Docker Engineも自動アップデート可能 6
Hyper-VマネージャーをみるとVMが実行されている VMのスペックはDocker Desktopの設定で管理 7
目次 自己紹介 なぜDocker Desktopを使いたいのか なぜDocker Desktop + WSLで使いたいのか なぜDocker Desktop WSL 2 Backendを使いたいのか Docker Desktop WSL 2 Backendに乗り換えてみた まとめ 8
やっぱり使いづらい コマンドプロンプトやPowerShellから dockerコマンドとか、もぅマヂ無理。Macつかぉ。。。 だってこういうシェル芸やりたいし→ (dockerコマンドのオプションは覚えられないけど grep,sed,awkなら空で打てる) 9
しかし会社のルールが・・・ 社内の標準PCはWindowsです。 標準化されたセキュリティ対策がされていない Macは社内LANに接続しないでください。 ぐぬぬ・・・ リポジトリが社内LAN にしかないのに・・・ やはりVMか?🤔 ぼく 会社のルール 10
しかし会社のルールが・・・ 社内の標準PCはWindowsです。 標準化されたセキュリティ対策がされていない Macは社内LANに接続しないでください。 WindowsでDocker Desktopのメリットを ぐぬぬ・・・ リポジトリが社内LAN 残したままLinuxのCUIでDocker操作したい にしかないのに・・・ やはりVMか?🤔 ぼく 会社のルール 11
WSLのdocker clientからDocker DeskTopのDockerEngineを操作 docker client dockerコマンドを実行 docker engine container image Ubuntu DockerDesktopVM Windows Subsystem for Linux クライアント Hyper-V Windows 10 Proffesional 12
WSLのdocker clientからDocker DeskTopのDockerEngineを操作 WSLの環境変数DOCKER_HOSTにリモートを設定 docker client DockerDesktopの設定でlocalhost:2375を開放 dockerコマンドを実行 docker engine container image Ubuntu DockerDesktopVM Windows Subsystem for Linux クライアント Hyper-V Windows 10 Proffesional 13
これでLinuxのCUIからDockerコマンドつかえる! ヤッターー!もうこれでいいじゃん!! ぼく 14
W でi残 しn念 たd ! !o w s 普 通 に 使 え る と 思 っ た ? 15
目次 自己紹介 なぜDocker Desktopを使いたいのか なぜDocker Desktop + WSLで使いたいのか なぜDocker Desktop WSL 2 Backendを使いたいのか Docker Desktop WSL 2 Backendに乗り換えてみた まとめ 16
\docker-composeを使って環境構築を自動化したい/ 17
ローカルでの開発・テスト用にvolumesをマウントしたい時とか 18
ローカルでの開発・テスト用にvolumesをマウントしたい時とか ユースケース: ◼ Git管理のスクリプトをマウントさせてコンテナ内 で初期化処理を実行させたい ◼ .gitignoreした空ディレクトリをマウントさせて ローカル環境でのみデータを永続化したい 「git cloneしてdocker-compose up」すれば全ての開発者が同じ環境構築ができるように、 相対パスでGitリポジトリ内のディレクトリを指定してvolumeをマウントしたい 19
Docker Desktopはマウントさせたい場合、設定からドライブを追加して 20
C:¥から始まるフルパスを指定してマウントしろってさ https://docs.docker.com/docker-for-windows/#file-sharing 21
C:¥から始まるフルパスを指定してマウントしろってさ https://docs.docker.com/docker-for-windows/#file-sharing え?🤔 22
やってみたけど、相対パスでマウントは無理だった・・・orz ◼ docker-conpose.ymlのvolumes部分 OK これをやりたい→ NG NG ◼ docker inspectのMounts部分 OKなパターン 絶対パスを指定すると、 VMに共有されたディレク トリにマッピングされる ダメなパターン マウントされているが、 そんなディレクトリはVMに 共有されていないので空 23
やってみたけど、相対パス無理だった・・・orz つらい ◼ Windowsから見えるところにgit cloneしないと いけない(WSL内のディレクトリは不可) ◼ リポジトリをcloneする場所はユーザによって違う (CドライブかDドライブかとかも自由にしたい) 開発者ごとに手元でdocker-compose.yml内のvolumesのパスや DockerDesktopのドライブ共有を意識して設定しないといけなくなる。 24
Docker Desktop WSL 2 backend 25
Docker Desktop WSL 2 backendがリリース ◼ WSL 2 Utility VMの内側からネイティブなdockerコマンドが打てるはず Architecture of the Hyper-V backend How it translates to the new WSL 2 backend https://www.docker.com/blog/new-docker-desktop-wsl2-backend/ 26
目次 自己紹介 なぜDocker Desktopを使いたいのか なぜDocker Desktop + WSLで使いたいのか なぜDocker Desktop WSL 2 Backendを使いたいのか Docker Desktop WSL 2 Backendに乗り換えてみた まとめ 27
乗り換えの前提条件 ◼ ◼ ◼ ◼ Windows 10 バージョン2004 (OSビルド:19041以上) WSL導入済み Docker Desktop 2.2.2.0以上(Stableで既に2.3が配信中) WSL 2 Kernel Update →最近、オンラインのWindows Updateでも降ってきた 28
WSL→WSL 2に更新する https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#update-to-wsl-2 29
WSLで利用中のLinuxディストリビューションをWSL 2に変換する ◼ バージョン確認 ◼ WSL 2に更新 https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#update-to-wsl-2 30
Docker DesktopのBackendをHyper-V→WSL2に変更する 31
UbuntuにDocker DesktopのWSL Integrationを有効化する 32
TCP経由ではなくdocker.sock経由の操作が可能になった模様 TCPでは通信できなくなったので、環境変数DOCKER_HOSTをクリア (WSL→WSL2で仮想マシンになったのでlocalhost宛の通信は Windowsホストに到達しなくなった) Ubuntuにもdocker.sockが生えていた・・・!これは期待 33
期待を込めた渾身のdocker-compose up・・・! ◼ WSL 2 Backendに変更直後はレイヤーキャッシュが全て消えていた これをやりたい→ OK NG NG OK NG OK \相対パスでマウントできた!勝った!/ 34
目次 自己紹介 なぜDocker Desktopを使いたいのか なぜDocker Desktop + WSLで使いたいのか なぜDocker Desktop WSL 2 Backendを使いたいのか Docker Desktop WSL 2 Backendに乗り換えてみた まとめ 35
まとめ ◼ Doker Desktop(Hyper-V Backend)ではDocker Composeで相対パスによる ボリュームのマウントは開発者ごとに自分の環境を意識して設定する必要があった。 ◼ Docker Desktop WSL 2 Backendでは相対パスでマウントできるようになったため、 Windows/Macの環境差異を意識することなく、共通化されたdocker-compose.ymlの 運用とGitリポジトリ上でローカル環境設定の一元管理ができるようになった。 WindowsでもMacでも「git clone→docker-compose up」して待ってれば環境構築完了に 丸一日悪戦苦闘して環境構築 docker-compose up待ち 36
/ Docker Desktop WSL 2 Backendで Windows PCでもコンテナ開発を楽しみましょう! \ 37