Windows 11 Dockerが遅いので爆速に高速化

Windows Docker alpine linuxで爆速高速化 docker

今まではUsers/[アカウント]/Documents/dockerフォルダ作ってやっていたのですが、これが非常に遅い。
どうやらLinuxプロセスからNTFSへのファイルアクセスが原因とのこと。

軽量なlinux入れてその中にデータを置けば無駄なアクセスが起こらず高速になります。いや、なりました。これで普通にDocker使える環境になりました。本当に快適。いや、これまでがおかしかったというべきですね・・・

ついでに、今までCmder使っていましたがPowershell 7 にしました。

スポンサーリンク

まずは既存のDockerコンテナ、イメージを削除する

やらなくてもいいですが、容量の関係もあるので削除しておきます。

コンテナの確認、削除

docker ps -a でコンテナリスト確認し、 docker rm [コンテナID」を指定して削除していきます。

消えない場合は-fをつけて docker rm -f [コンテナID]の

イメージの削除

docker images でイメージの確認し、docker rmi [イメージID]で削除

Ubuntuを削除

今まではMicrosoft Storeで配布されているUbuntuをインストールし使っていましたが、これも削除。Windows/設定/アプリ にインストールされているUbuntuがあればアンインストール

環境構築する手順

  • WSL2にalpine linuxをインストール
  • Docker Desktopで先ほど入れたlinux alpine使う設定を行う
  • alpineに最低限のgit,docker,vim,opensshをapk add でインストール
  • alpineにdocker-composeをインストール

WSL2にalpine linuxをインストール

下記からalpine-minirootfs-**-x86_64.tar.gzをダウンロードします。

Index of /alpine/latest-stable/releases/x86_64/

で下記コマンドでimportする。ダウンロードした場所がC:\Users\[あなた]\Downloads\alpine-minirootfs-***-x86_64.tar.gz
インストール先はC:\linux\alpine というようにフォルダ作っておきます。

wsl --import alpine c:\linux\alpine c:\Users\[あなた]\Downloads\alpine-minirootfs-3.17.0-x86_64.tar.gz --version 2

すぐ終わるので、下記で確認。alpineが入っていると思います。

wsl -l -v

Alpineに入る

コマンドで

下記で入ります。exitで出れます。

wsl -d alpine

Windowsのエクスプローラーからalpineディレクトリに入る

\\wsl$\alpine\ で入れます。Windowsからファイルを移動=コピーになります。

Docker Desktopの設定でWSL Integrationでalpineをチェックし再起動

Docker Desktopの設定/Resources/WSL Integrationで下記のようにする。

終わったら再起動。

Alpineに必要なものをインストールする

git,docker,docker-compose,vim,sshfsを入れました。

wsl -d alpine
apk add git docker vim sshfs

docker-composeは古いらしいので別の方法でインストール

下記からdocker-compose-linux-x86_64を探しダウンロード

Releases · docker/compose
Define and run multi-container applications with Docker - docker/compose

\\wsl$\alpine\usr\bin\にダウンロードしたファイルをコピー

古いdocker-composeを削除し、ダウンロードしたdocker-compose-linux-x86_64をdocker-composeにリネーム、chmodで実行権限つけて完了。

wsl -d alpine
cd /usr/bin/
rm docker-compose
mv docker-compose-linux-x86_64 docker-compose
chmod 755 docker-compose

docker-compose 

実行できたのが確認できればOK。

Alpine linux上でdockerをいつものように使う

\\wsl\alpine\home をホームディレクトリとして使っています。これまでやってきたのと同じように使うだけです。

自分は下記のように使っています。

/home/html/
/home/html/index.php
/home/html/[project name]

/home/docker/ docker関連ファイルを入れています。DBコンテナを独立、PHPバージョンコンテナ2つ。
/home/docker/mysql
/home/docker/php74
/home/docker/php81

mysqlコンテナを立ち上げ、phpコンテナを次に立ち上げています。

cd /home/docker/
cd mysql
docker-compose up -d

cd ../php74
docker-compose up -d

docker network create mysql_network

dockerコマンドでmysqlコンテナとネットワーク介して接続しています。

mysqlコンテナ(phpmyadmin付)

/home/docker/mysql/docker-compose.yml

version: '3'
services:
  mysql:
    container_name: mysql
    build: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: pass
      TZ: "Asia/Tokyo"
    networks:
      - mysql_network
    volumes:
      - db:/var/lib/mysql
    ports:
      - 3306:3306

  phpmyadmin:
    container_name: phpmyadmin
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOSTS=mysql
      - PMA_USER=root
      - PMA_PASSWORD=root
    networks:
      - mysql_network
    ports:
      - 8080:80


networks:
  mysql_network:
    external: true

php74(81)コンテナ

version: '3'
services:
  php:
    container_name: php74
    build: ./php
    ports:
      - 80:80
    volumes:
      - ../../html:/var/www/html
    networks:
      - mysql_network

networks:
  mysql_network:
    external: true

php/Dockerfile

php8.1はFROM php:8.1-apacheにしているだけです。

FROM php:7.4-apache
COPY php.ini /usr/local/etc/php/

ARG TZ-Asia/Tokyo

STOPSIGNAL WINCH

RUN apt-get update \
  && apt-get install -y libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev libonig-dev \
  libmagickwand-dev imagemagick ghostscript\ 
  && docker-php-ext-configure zip \
  && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv zip \
	&& docker-php-ext-configure gd \
	&& docker-php-ext-install gd \
  && mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled


RUN /bin/sh -c a2enmod rewrite

#install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

/home/html/index.php

index.phpは下記。

<?php phpinfo(); ?>

chromeか何か立ち上げて localhost/ と打つとphp情報が出てきます。
PHP7.4コンテナをstopしてPHP8.1コンテナを立ち上げてlocalhost/でバージョンが8.1になっていることを確認できると思います。

phpmyadminはlocalhost:8080で

参考

非常に参考になりました。

Windows環境(WSL2)のDockerを爆速化する方法 - Qiita
目的 Windowsホスト環境下(WSL2)のDockerコンテナのファイルアクセスを高速化する 動機 これまでMacBookでそれなりにDocker環境によるシステム開発をそれなりに快適に進めてきたのですが、同僚たちのWindo...

コメント

タイトルとURLをコピーしました