今までは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をダウンロードします。
で下記コマンドで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を探しダウンロード

\\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で

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

コメント