メインコンテンツまでスキップ

Windows上でLinux(Ubuntu)を起動しdockerサービスを起動する(所要時間30分)

Windows10 or 11 でWSL2を利用してUbuntuを起動し、dockerサービスを起動するまでの 手順を解説します。

Windowsの機能の有効化

  • [コントロールパネル]-[プログラム]-[プログラムと機能]-[Windowsの機能の有効化または無効化]を起動します。

  • [Linux用Windowsサブシステム]と[仮想マシンプラットフォームにチェック]を入れ、[OK]ボタンを押します。
    image image

  • Windowsを再起動します。
    image

WSLの初期設定

  • WSL2をデフォルトへ設定
wsl --set-default-version 2
  • WSLの最新化
wsl --update

Ubuntu 22.04 LTSの導入

  • Microsoft Storeを起動し[Ubuntu 22.04.1 LTS]を検索してインストールします。 image

  • アプリの一覧に[Ubuntu 22.04.1 LTS]が表示されるので、起動します。
    image

  • インストールが開始されます。
    image image image image image image image

  • アップデート

sudo apt update
sudo apt upgrade

ssh サーバの起動

  • パスワードログイン設定
sudo vi /etc/ssh/sshd_config
PasswordAuthentication yes
  • ssh キー情報の生成
sudo ssh-keygen -A
-->
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
  • sshサービス起動
sudo /usr/libexec/wsl-systemd
sudo /usr/libexec/nslogin
sudo systemctl start ssh

ここまでの操作でsshサーバが起動します。

  • 接続確認
    image image

ネットワーク上のPCからのssh接続許可

  • UbuntuのIP確認
ip a show dev eth0
Ubuntu のIP: xxx.xxx.xxx.xxx とする
ローカルPCのIP: yyy.yyy.yyy.yyy とする
  • ポート転送設定
netsh.exe interface portproxy add v4tov4 listenaddress=yyy.yyy.yyy.yyy listenport=22 connectaddress=xxx.xxx.xxx.xxx connectport=22
  • 設定確認
netsh.exe interface portproxy show v4tov4
  • ポート転送設定(自動)

~/get_ipv4.bash

ip address show eth0 | awk '/inet / {print $2}' | awk -F / '{print $1}'
$WSL2_IPV4=bash ~/get_ipv4.bash
$HOST_IPV4="xxx.xxx.xxx"
$PORT=22
netsh interface portproxy add v4tov4 listenaddress=$HOST_IPV4 listenport=$PORT connectaddress=$WSL2_IPV4 connectport=$PORT
netsh interface portproxy show v4tov4

dockerのインストール

  • リポジトリセットアップ
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • Dockerインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 利用ユーザへのdocker権限付与
sudo usermod -g docker user001
  • Dockerサービス起動
sudo systemctl start docker
  • エラーが発生します。
user001@DESKTOP-A0AE54A:~$ sudo systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xeu docker.service" for details.
user001@DESKTOP-A0AE54A:~$ systemctl status docker.service
× docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
Active: failed (Result: exit-code) since Sun 2022-08-21 12:17:51 JST; 9s a>
TriggeredBy: × docker.socket
Docs: https://docs.docker.com
Process: 2253 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/contain>
Main PID: 2253 (code=exited, status=1/FAILURE)

Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: docker.service: Scheduled restart j>
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: Stopped Docker Application Containe>
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: docker.service: Start request repea>
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: docker.service: Failed with result >
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: Failed to start Docker Application >
...skipping...
× docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
Active: failed (Result: exit-code) since Sun 2022-08-21 12:17:51 JST; 9s a>
TriggeredBy: × docker.socket
Docs: https://docs.docker.com
Process: 2253 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/contain>
Main PID: 2253 (code=exited, status=1/FAILURE)

Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: docker.service: Scheduled restart j>
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: Stopped Docker Application Containe>
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: docker.service: Start request repea>
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: docker.service: Failed with result >
Aug 21 12:17:51 DESKTOP-A0AE54A systemd[1]: Failed to start Docker Application >

  • エラー回避
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).

Selection Path Priority Status
------------------------------------------------------------
0 /usr/sbin/iptables-nft 20 auto mode
* 1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode

Press to keep the current choice[*], or type selection number:1
  • Docker Service起動
sudo systemctl start docker
  • Docker service起動確認
sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
Active: active (running) since Sun 2022-08-21 12:22:53 JST; 2min 54s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 2313 (dockerd)
Tasks: 13
Memory: 42.5M
CGroup: /system.slice/docker.service
mq2313 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont>
  • Docker 起動確認
    ※ 一旦ターミナル(teraterm)を閉じてから再接続して実施する必要があります。
docker run hello-world

AWS CLIのインストール(AWSを使う場合の参考)

sudo apt-get install -y curl
sudo apt-get install -y unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo aws/install
aws configure
You can now run: /usr/local/bin/aws --version
user001@DESKTOP-A0AE54A:~$ aws configure
AWS Access Key ID [None]: ************************
AWS Secret Access Key [None]: ************************
Default region name [None]: ap-northeast-1
Default output format [None]: json

Docker AWS LOGの利用

以下の手順を実行することで、DockerログをAWS Cloudwatchへ転送できます。

  • AWS認証情報をSystemdへ設定
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo touch /etc/systemd/system/docker.service.d/aws-credentials.conf
sudo vi /etc/systemd/system/docker.service.d/aws-credentials.conf

aws-credentials.conf

[Service]
Environment="AWS_ACCESS_KEY_ID=<aws_access_key_id>"
Environment="AWS_SECRET_ACCESS_KEY=<aws_secret_access_key>"
  • Systemd 設定更新
sudo systemctl daemon-reload
  • Docker Service再起動
sudo systemctl restart docker
  • Docker service起動確認
sudo systemctl status docker
  • ログ出力確認
docker run --log-driver=awslogs --log-opt awslogs-region=ap-northeast-1 --log-opt awslogs-group=/docker/hello-world --log-opt awslogs-create-group=true hello-world
  • AWS CloudWatch Log に出力されます。 image

Ubuntuの起動/停止/各種コマンド

  • 状態確認
wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-22.04 Running 2
  • 停止
wsl --terminate Ubuntu-22.04
wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-22.04 Stopped 2
  • Ubuntuの起動

  • アプリケーションメニューのUbuntu-22.04のメニューを選択すれることでUbuntuが起動します。 image

wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-22.04 Running 2

Ubuntuの停止=>起動を実行すると、systemdサービスが停止状態に戻るので 下記コマンドで[systemd]及び[ssh][Docker]サービスを起動します。

sudo /usr/libexec/wsl-systemd

Ubuntuのアンインストール

最初からやり直す場合にだけ実施して下さい。

wsl --unregister Ubuntu-22.04
登録を解除しています...

👇参考URL

[keywords]
WSL2 Ubuntu

Windows上でLinux(Ubuntu)を起動しdockerサービスを起動する(所要時間30分)

ITとソフトウェアの人気オンラインコースHP Directplus -HP公式オンラインストア-