WindowsでDockerを使用する

手順
1. WSL2のインストール
(1) 管理者モードでPowerShellを起動し、WSLコマンドをインストール
# WSLのインストール
$ wsl --install
(2) PCを再起動して通常モードでPowerShellを起動し、WSL のバージョンを確認
# WSL のバージョンの確認
wsl -l -v
※1: インストールされていないと言われた場合は、再度wsl --install
コマンドを実行したら以下のメッセージとともに起動された
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
→ この後、コンソールメッセージに従い、ユーザー名とパスワードを設定。その後、Ubuntuにログインされる
一度Ubuntuからexitして、バージョン確認
$ exit
$ wsl -l -v
※この状態で再度、wsl -l -v すると、ステータスがRunningになっているはず
PS C:\Users\xxx> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
(3) PowerShellの「v」マークをクリック > プルダウンの「Ubuntu」をクリック
→ (2) で作成したユーザーでUbuntu環境にログインされる
補足
※もともとWSL2を入れていたので、1から実施するため以下の手順で一度アンインストールした

2. Dockerのインストール
今回、大規模商用利用(会社での利用)を加味し、Docker Desktopを使わないやり方でやってみる
(1) Docker のapt repositoryをセットアップ
$ sudo apt-get update
# ユーザーのパスワードを求められるので入力
$ sudo apt-get install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
(2) Docker パッケージをインストール
# 最新版の場合
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
(3) hello worldイメージの実行により、Docker Engineのインストールが成功していることを確認
$ sudo docker run hello-world
(4) 通常モードでもdockerコマンドが使えるよう権限を変更
$ sudo chmod 666 /var/run/docker.sock
# 通常モードでdockerコマンドが使えることを確認
$ docker ps -a
※(4) 間で実行してpermission denied的なエラーが出る場合は、以下も実行しておく
# 対象ユーザーのグループへの追加
$ sudo usermod -aG docker $USER
# シェルの再起動
$ exec $SHELL -l
# グループへの追加状況の確認
$ groups $USER
# 上記でdocker が表示されない場合、Linuxマシンを再起動

3. Docker Hubからimageを取得
(1) docker imageの取得
# 最新版のインストール
$ docker image pull debian
# タグ(バージョン)を指定してのインストール
$ docker pull debian:11.9
$ docker pull debian:11.9
$ docker image ls
→ docker pull
は、docker image pull
のエイリアス
※実際に表示された結果
REPOSITORY TAG IMAGE ID CREATED SIZE
debian 11.9 db0c3f4ff71a 12 days ago 124MB # 11.9
debian bullseye db0c3f4ff71a 12 days ago 124MB # bullseye(11.9に同じ)
debian latest d2a2c1ada45a 12 days ago 117MB # 最新版
※Docker Hubのdebianはコチラ
(2) コンテナの起動
# debian(最新版)imageからコンテナを作成&起動
$ docker run debian
$ docker ps
→ 起動すると表示されるはずだが、Exitで終わってたので表示されず、、
(3) docker コンテナの削除
# 起動している場合は停止する
$ docker stop [コンテナID | コンテナ名]
$ docker rm [コンテナID | コンテナ名]
(4) docker imageの削除
# 最新版(latest)の削除: latest以外は残る
$ docker rmi debian
# REPOSITORYがdebian、TAGが11.9のimageを削除
$ docker rmi debian:11.9
# CONTAINER IDがdb0c3f4ff71aのものを削除
$ docker rmi db0c3f4ff71a
$ docker image ls

4. Dockerfileの作成
今回、LAMPサーバを作成してみる
(1) 専用のディレクトリの作成と移動
$ mkdir docker-practice && cd docker-practice
(2) Dockerfileの作成と編集
$ touch Dockerfile
$ touch src/index.php
$ code .
# VSCodeが未インストールの場合は、インストールされる
(3) VS Codeが起動したら、Dockerfile, index.phpに以下の内容を記述し、保存
# ベースイメージとしてUbuntuの最新版を使用
FROM ubuntu:latest
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
apache2 \
mysql-server \
php \
libapache2-mod-php \
&& rm -rf /var/lib/apt/lists/*
# srcディレクトリから/var/www/html/にファイルをコピー
COPY src/ /var/www/html/
# Apacheの設定:envvarsを設定してApacheがフォアグラウンドで実行されるようにする
RUN echo '. /etc/apache2/envvars' > /root/envvars \
&& echo 'mkdir -p /var/run/apache2' >> /root/envvars \
&& echo 'mkdir -p /var/lock/apache2' >> /root/envvars \
&& chmod +x /root/envvars
# ポート80を公開
EXPOSE 80
# Apacheをフォアグラウンドで実行
CMD /root/envvars && /usr/sbin/apache2ctl -D FOREGROUND
<!DOCTYPE html>
<html>
<head>
<title>Welcome to My LAMP Application!</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>This is a simple LAMP application.</p>
</body>
</html>

5. DockerイメージとDockerコンテナの作成
(1) Dockerイメージの作成
Dockerfileを作成したパスにて、以下を実行
# リポジトリ名を付けない場合 ※IMAGE IDが付与されるので、それで識別
$ docker build .
# リポジトリ名に、ubuntu-lampとつける場合
$ docker build -t ubuntu-lamp .
# 作成したイメージの確認
$ docker image ls
※リポジトリ名を付けなかった場合の表示結果
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 99b834b30aa9 55 seconds ago 732MB
→ REPOSITORY, TAGが<none>
※リポジトリ名を付けた場合の表示結果
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-lamp latest 99b834b30aa9 55 seconds ago 732MB
(2) Dockerコンテナの作成と起動
$ docker run -d -p 80:80 ubuntu-lamp
(3) 以下のURLを叩き、index.phpの内容が正しく表示されることを確認する
▼イメージとしてはこんな感じ

参考
rootで起動してしまう場合はadduserする
Dockerの権限変更
基本的なコマンド
Docker Hub