やりたいこと #
- Docker Desktop for Windows の導入
環境情報 #
環境 | バージョン |
---|---|
OS | Windows 11 Pro 23H2 |
OS ビルド | 22631.3527 |
Git for Windows | 2.45.0.windows.1 |
WSL | 2.1.5.0 |
Ubuntu | 22.04.4 LTS |
Windows Terminal | 1.19.11213.0 |
Visual Studio Code | 1.88.1 |
docker desktop | v4.29.0 |
docker | 26.0.0 |
docker-compose | v2.26.1-desktop.1 |
2024-05-05 現在
前提条件 #
Windows11 WSL Ubuntu VSCode Git GitHub 環境構築 を実施済み
WSL 環境で Docker Desktop for Windows を使えるようにするためには、
先に WSL Ubuntu をセットアップしておくほうが良い
Docker Desktop for Windows インストール #
- Docker Desktop for Window のインストーラをダウンロード
Install Docker Desktop on Windows | Docker Docs
インストールウィザード:
- Use WSL 2 instead of Hyper-V (recommended)
Hyper-V の代わりに WSL2 を使う(推奨)をオン- Home版ではHyper-Vが使えないので、このオプションは表示されない
- Add shortcut to desktop
デスクトップにショートカットが欲しい場合はオン - OK でインストール開始
- Close で完了
Docker Desktop for Windows 初回起動 #
- Docker Subscription Service Agreement → Accept
有料サブスクリプションサービスについて→承認- この契約書は、主に企業やビジネス向けの契約書であり、個人利用にはあまり関係がない
- Continue without signing in
Docker ID アカウントにサインインせず続ける- サインインしてもいい
- Welcome Servey → Skip Servey
調査 → スキップする- 答えてもいい
サインインするメリット:
- Docker Desktop から Docker Hub リポジトリに直接アクセスできる
- 6時間あたり200回のダウンロードが可能
(サインインしない場合、6時間あたり100回のダウンロードが可能) - Hardened Desktopを活用することで、コンテナ開発における組織のセキュリティ体制を強化できる
(個人には関係ない)
情報源:Sign in to Docker Desktop | Docker Docs
Docker Desktop for Windows 設定 #
- General
- Send usage statistics -> オフ
エラー レポート、システムのバージョンと言語、および Docker Desktop のライフサイクル情報 (開始、停止、リセットなど) を送信
- Send usage statistics -> オフ
- Notifications
不要な通知をオフにする
個人的には、Docker Desktop の新しいリリースやアップデートに関する通知を受け取るために、調査だけオフ- Status updates on tasks and processes
- Recommendations from Docker
- Docker announcements
- Docker surveys → オフ
docker動作確認(Windows) #
hello-world を使ってDockerの動作確認を簡単に行う
1. PowerShell (Windows Terminal) を開く #
Windwos Terminal で PowerShell を開く
2. docker のバージョン確認 #
docker --version
実行結果(例):
Docker version 26.0.0, build 2ae903e
3. docker-compose のバージョン確認 #
docker compose version
実行結果(例):
Docker Compose version v2.26.1-desktop.1
4. docker buildx のバージョン確認 #
docker buildx version
実行結果(例):
github.com/docker/buildx v0.13.1-desktop.1 2368b2ee41873b948cb607251cec573ed00f00f9
5. Dockerイメージのリストを表示 #
docker image ls
エイリアス↓ 通常はこちらを使う
docker images
実行結果:
REPOSITORY TAG IMAGE ID CREATED SIZE
Dockerイメージは一つもない
6. Docker Desktop → Images を確認 #
Dockerイメージは一つもない
7. Dockerコンテナの一覧を表示 #
-a
はすべてのコンテナを表示するオプション(デフォルトは実行中のみを表示)
docker container ls -a
エイリアス↓ 通常はこちらを使う
docker ps -a
実行結果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Dockerコンテナは一つもない
8. Docker Desktop → Containers を確認 #
Dockerコンテナは一つもない
9. hello-world コンテナを実行 #
docker run hello-world
実行結果(原文):
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
実行結果(翻訳):
画像「hello-world:latest」がローカルに見つからない
最新の library/hello-world から引っ張ってくる
c1ec31eb5944: プル完了
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
ステータス hello-world:latestの新しいイメージをダウンロードしました。
Dockerからこんにちは!
このメッセージは、インストールが正常に動作していることを示しています。
このメッセージを生成するために、Dockerは以下のステップを踏みました:
1. DockerクライアントがDockerデーモンにコンタクトした。
2. DockerデーモンがDocker Hubから "hello-world "イメージを取り出した。
(amd64)
3. Dockerデーモンは、そのイメージから新しいコンテナを作成し、そのコンテナで以下を実行する。
実行ファイルを実行する。
4. Dockerデーモンはその出力をDockerクライアントにストリーミングし、Dockerクライアントはそれをあなたのターミナルに送信する。
に送る。
もっと野心的なことを試すには、以下のようにしてUbuntuコンテナを実行できる:
docker run -it ubuntu bash
無料のDocker IDを使って、イメージの共有やワークフローの自動化などを行おう:
https://hub.docker.com/
その他の例やアイデアについては、以下をご覧ください:
https://docs.docker.com/get-started/
10. Images, Containers を確認 #
Docker Desktop から Images, Containers を確認
Hello World の Docker イメージとコンテナが存在することを確認
docker動作確認(WSL Ubuntu) #
Windows 側で動作確認した hello-world を WSL Ubuntu 側から削除する
11. 再度、Dockerイメージのリストを表示 #
docker images
実行結果(例):
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 12 months ago 13.3kB
12. 再度、Dockerコンテナの一覧を表示 #
docker ps -a
実行結果(例):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ea0b80bd73e hello-world "/hello" About a minute ago Exited (0) About a minute ago keen_rhodes
13. Dockerイメージを削除 #
<IMAGE> には、docker images
で取得した IMAGE ID を指定する
docker image rm <IMAGE>
エイリアス↓ 通常はこちらを使用
docker rmi <IMAGE>
hello-world のイメージIDを指定して実行:
docker rmi d2c94e258dcb
実行結果:
Error response from daemon: conflict: unable to delete d2c94e258dcb (must be forced) - image is being used by stopped container 0a1955e4785b
エラーメッセージ:Dockerイメージを削除するためには、このDockerイメージで構築されたDockerコンテナを先に削除しなければならない
14. hello-world の削除を試みる #
Docker Desktop → Image から hello-world を削除
手順13.と同様の理由で削除できない
15. Dockerコンテナを削除 #
<CONTAINER> には、docker ps -a
で取得した CONTAINER ID または NAMES を指定する
docker container rm <CONTAINER>
エイリアス↓ 通常はこちらを使う
docker rm <CONTAINER>
hello-world のコンテナIDを指定して実行:
docker rm 2ea0b80bd73e
実行結果:
2ea0b80bd73e
16. hDockerコンテナが削除を確認 #
hello-world のDockerコンテナが削除されたのを確認
docker ps -a
実行結果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17. hello-world が削除されたのを確認 #
Docker Desktop → Containers で hello-world が削除されたのを確認
コンテナが一つもないことを確認
18. Dockerイメージを削除 #
再度 hello-world のDockerイメージを削除
docker rmi d2c94e258dcb
実行結果(例):
Untagged: hello-world:latest
Untagged: hello-world@sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a
Deleted: sha256:ac28800ec8bb38d5c35b49d45a6ac4777544941199075dff8c4eb63e093aa81e
19. Dockerイメージの削除確認 #
hello-world のDockerイメージが削除されたのを確認
docker images
実行結果:
REPOSITORY TAG IMAGE ID CREATED SIZE
20. hello-world が削除されたのを確認 #
Docker Desktop → Image からも hello-world が削除されたのを確認
イメージが一つもないことを確認
WSL の既定ディストリビューションの設定 #
WSL の確認:
wsl --list
WSLのディストリビューションとして以下の2つがインストールされる
- docker-desktop
- docker-desktop-data
Docker Desktop をインストールしたあとに Ubuntu をインストールした場合、 既定のディストリビューションが、docker-desktop に設定された状態になる
VSCode で開く既定のディストリビューションを普段使用するディストリビューションにしておく
WSL既定のディストリビューションを Ubuntu にするコマンド:
wsl --set-default Ubuntu
Docker Desktop for Windows のアンインストール #
Docker Desktop をアンインストールする方法
情報源:Uninstall Docker Desktop | Docker Docs
本体のアンインストール #
- 設定
- アプリ
- インストールされているアプリ
- Docker Desktop > アンインストール
手動でファイル削除(Windows) #
Docker Desktopをアンインストールした後、手動で削除できるファイルが残っている場合がある
C:\ProgramData\Docker
C:\ProgramData\DockerDesktop
C:\Program Files\Docker
C:\Users\<your user name>\AppData\Local\Docker
C:\Users\<your user name>\AppData\Roaming\Docker
C:\Users\<your user name>\AppData\Roaming\Docker Desktop
C:\Users\<your user name>\.docker
管理者権限で PowerShell を開き、コマンドを実行
Remove-Item -Recurse -Force -Path `
"C:\ProgramData\Docker", `
"C:\ProgramData\DockerDesktop", `
"C:\Program Files\Docker", `
"$env:USERPROFILE\AppData\Local\Docker", `
"$env:USERPROFILE\AppData\Roaming\Docker", `
"$env:USERPROFILE\AppData\Roaming\Docker Desktop", `
"$env:USERPROFILE\.docker"
手動でファイル削除(WSL) #
- Docker Desktop for Windows を使っていたけれどアンインストール
- WSL Ubuntu に Docker CE をインストール
という状況の場合、 Ubuntu の Docker CE ではなく Docker Desktop for Windows のコマンドを使おうとするため docker コマンドが使えないことがある
この場合は、WSL Ubuntu 内に残っている Docker Desktop for Windows コマンドへのリンクを消せばよい
- dockerコマンドのリンクを確認
ls -la /usr/local/lib/docker/cli-plugins/
実行結果(例):
total 44
drwxr-xr-x 2 root root 4096 May 1 20:11 .
drwxr-xr-x 3 root root 4096 May 1 20:11 ..
lrwxrwxrwx 1 root root 80 May 1 20:11 docker-buildx -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-buildx
lrwxrwxrwx 1 root root 81 May 1 20:11 docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-compose
lrwxrwxrwx 1 root root 79 May 1 20:11 docker-debug -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-debug
lrwxrwxrwx 1 root root 77 May 1 20:11 docker-dev -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-dev
lrwxrwxrwx 1 root root 83 May 1 20:11 docker-extension -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-extension
lrwxrwxrwx 1 root root 82 May 1 20:11 docker-feedback -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-feedback
lrwxrwxrwx 1 root root 78 May 1 20:11 docker-init -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-init
lrwxrwxrwx 1 root root 78 May 1 20:11 docker-sbom -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-sbom
lrwxrwxrwx 1 root root 79 May 1 20:11 docker-scout -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-scout
- docker ディレクトリごとリンクを削除
sudo rm -rf /usr/local/lib/docker