WSL2を使用してDocker環境を構築する方法

WSL2

開発の兼田です!今回の記事ではWSL2を使用してDocker環境を作成してみようと思います!
いまさら?と思う方もいらっしゃれば、
WSL2………❓
Docker………❓

頭の中に❓❓がたくさん出てくる方もいると思います。まず初めに、上記の2つの用語から説明していきます。本稿もどうぞよろしくお願います。

目次はこちら

  • 1. WSLって?
  • 2. Dockerって?
  • 3. 実際にやってみよう!!

1. WSLって?

linux
Windows 10から利用可能になった「Windows Subsystem for Linux」(そう!この頭文字でWSLなのです!)は、Windows 10からLinuxを利用するための仕組みのことです。

ようするに、windowsなんだけど、Linuxを使うことができるよ!
ということです。
Linuxについての説明は今回は省かせていただきます(とても長くなるので。。。)

ではさくさくみていきましょう!

2. Dockerって?

docker

Docker(ドッカー)は、コンテナと呼ばれるOSレベルの仮想化(英語版)環境を提供するオープンソースソフトウェアである。
VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。
引用元:ウィキペディア(Wikipedia)

ん~もっとかみ砕いた表現がほしい!!

つまりどういうことかというとDockerは軽量な仮想マシンを簡単に構築することができ、インフラを含めたアプリ全体をまるまる、コンテナという箱に閉じ込めることができる。また、コンテナの配布やバージョン管理も可能 
(中略)
【特徴】
・仮想環境はコンテナ型と呼ばれるもので、ホストOSを直接アクセスするためオーバーヘッドが少ない
・環境構築が容易でVirtual Boxも不要
・コンテナは移植性(ポータビリティ)が高く、Dockerさえインストールされていれば、全く同じ環境でアプリを動かせる
・ホストOSからはコンテナは1プロセスとして認識される

引用元:Docker入門 #1 【Dockerとは】 – Qiita

なんとなく理解できてきたのではないでしょうか。コンテナ型なので、移植性が高く、開発環境を同じにすることができます。
これは大きなメリットだと思います。
同じプロジェクトでも、開発環境が異なれば挙動がちがうこともあります。そのような心配もDockerを使えば心配がなくなりますね!

3. 実際にやってみよう!!

WSLとDockerについてイメージが膨らんだきたところで、実際にどのようにしたら使えるのかをみていきましょう!

STEP1. コントロールパネルの『Windowsの機能の有効化または無効化』をクリック

その後、『Windows Subsystem for Linux』のチェックボックスにチェックが入っていることを確認

STEP2. Microsoft Storeから目的のディストリビューションを検索してインストールします。
個人的にはdebianがお勧めなんですが、今のところ(2019-11-10現在)dockerが動くのがStoreからインストールしたUbuntuだけになりますので、今回はUbuntuで作成していきます。

ここからはコマンドが多いので、一気に見ていきます!
STEP3. 『WSL2』が有効になっているかを確認します。
・powershellを管理者モードで起動後

wsl -l -v

と実行
・エラーになったらWindowsUpdateして、最新のビルドにしましょう(Win10IP)
・『VERSION』カラムの数字が『2』ならOK『1』の時は、

wsl –set-version NAME 2

と実行(NAMEは『VERSION』が『1』の『NAME』カラムのもの)

STEP4. 起動後初期設定が完了したら、管理者権限で起動し直したwslのターミナルから各種設定
(実際に管理者権限が必要なのはdocker関連になりますが、今回は初めから管理者権限で起動します)
4-1. visudo のエディタを nano から vi(vim) に変更
nanoが好きな方はこの手順をスキップしてください

sudo update-alternatives –set editor /usr/bin/vim.tiny

4-2. パスワードなしで『sudo』できるように設定
ファイルシステムのマウント然り、パッケージの管理然り、全部『sudo』します。それはいいんだけど、ちょっと間が空いたらすぐに「パスワード入れろや!!」って言ってくるのも鬱陶しいんで、パスワードなしでできるように設定します

sudo visudo

して一番下の行に

設定したユーザー名 ALL=NOPASSWD: ALL

と追記して保存終了
4-3. インストール済みパッケージのアップグレードとパッケージ情報のアップデート

sudo apt update;sudo apt -y upgrade

4-3. SSHが使える様にopensshのクライアント(と、必要になるもの)をインストール

sudo apt install -y git openssh-client wget curl

STEP5. Dockerのインストール

sudo apt install -y docker.io docker-compose
sudo cgroupfs-mount
sudo usermod -aG docker $USER
sudo service docker start
# 通常ユーザーでdockerが使用できるように設定
sudo chown 設定したユーザー名: -R ~/.docker/*
sudo gpasswd -a $USER docker

STEP6. ここでいったんターミナルを終了して、もう一度、今度は通常モードでターミナル起動
STEP7. docker-compose.ymlファイルを作成

docker-compose.ymlの説明
– docker-compose.ymlを保存したディレクトリに`htdocs`ディレクトリをあらかじめ作っておく
– 各種confファイル・iniファイルは自分で用意してください
– `htdocs`ディレクトリにファイルを作成すると、webコンテナ内の`/var/www/html`ディレクトリに同じものができる(共有フォルダ)
– `docker-compose exec web -u ec2-user bash`でwebサーバ内の操作が可能

(AmazonLinux2でLAMP環境の例)

version: '3'
services:
  mysql:
    image: mysql:5.7
    command:
      - --sql-mode=NO_ENGINE_SUBSTITUTION
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: PASSWORD
  phpmyadmin:
    depends_on:
      - mysql
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: mysql
    restart: always
    ports:
      - "8080:80"
  web:
    image: shizuki/amazonlinux2-php-apache
    env_file: ./files/env_file.env
    volumes:
      - ./system.conf:/etc/systemd/system.conf
      - ./httpd.conf:/etc/httpd/conf/httpd.conf
      - ./php.ini:/etc/php.ini
      - ./10-opcache.ini /etc/php.d/10-opcache.ini
      - ./xdebug.ini /etc/php.d/xdebug.ini
      - ./50-zip.ini /etc/php.d/50-zip.ini
      - ./htdocs:/var/www/html
    restart: always
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - mysql
volumes:
    db_data: {}

STEP8. docker-compose.ymlを保存したディレクトリに移動して

docker-compose up -d

と実行します。
http://localhost/ で、`/var/www/html`ディレクトリ内に作成したコンテンツが、http://localhost:8080 でphpmyadminが見られる
STEP9. VSCodeにWSL連携開発拡張をインストールすれば、後のことは全部VSCodeのターミナル内で完了する!!(ハズ)

jaJapanese