Windows 10 サブシステム Ubuntu (WSL) に Docker をインストールするチュートリアル (画像とテキスト付き)

Windows 10 サブシステム Ubuntu (WSL) に Docker をインストールするチュートリアル (画像とテキスト付き)

環境説明

環境: Win10 Enterprise Edition + Ubuntu 18.04 LTS [WSL]

Windows 10 に Docker for Windows をインストールする

現在、Docker には Win10 Professional システム用の特別なインストール パッケージがあり、Hyper-V を有効にする必要があります。

Hyper-Vを有効にする

ここに画像の説明を挿入

プログラムと機能


ここに画像の説明を挿入

Windows の機能をオンまたはオフにする


ここに画像の説明を挿入

Hyper-Vを選択


ここに画像の説明を挿入

Windows用Dockerをインストールする

Windows 用 Docker の最新バージョン

ダウンロードアドレス: https://docs.docker.com/v17.09/docker-for-windows/install/

Get Docker for Windows [Stable] をクリックして、Windows バージョンをダウンロードします。

ここに画像の説明を挿入

インストールが完了すると、Docker が自動的に起動します。通知バーに小さなクジラのアイコンが表示されますここに画像の説明を挿入これは Docker が実行中であることを意味します。

以下に示すように、3 つのアイコンもテーブルに表示されます。

コマンドラインでdocker versionを実行してバージョン番号を表示し、 docker run hello-worldてテスト用のテストイメージをロードすることができます。

起動していない場合は、Windows で Docker を検索して起動できます。


ここに画像の説明を挿入

起動すると、通知バーに小さなクジラのアイコンも表示されます。


ここに画像の説明を挿入

サブシステムのインストール Dockerのインストール

問題ない

leenhem@DESKTOP-7SREO20:~$ sudo apt-get install docker.io
パッケージリストを読み込んでいます...完了
依存関係ツリーの構築
状態情報を読み込んでいます...完了
docker.ioはすでに最新バージョン(18.09.7-0ubuntu1〜18.04.4)です。
アップグレードされたものは 0 個、新規インストールされたものは 0 個、削除されたものは 0 個、アップグレードされていないものは 111 個。

使用に問題がある[正常に使用できない]

公式サイトの説明

leenhem@DESKTOP-7SREO20:~$ docker ps
unix:///var/run/docker.sock の Docker デーモンに接続できません。Docker デーモンは実行されていますか?
leenhem@DESKTOP-7SREO20:~$ sudo /etc/init.d/docker ステータス
 * Dockerが実行されていません
leenhem@DESKTOP-7SREO20:~$ sudo /etc/init.d/docker を開始します
 * Dockerを起動しています: docker [ OK ] 
リーンヘム@DESKTOP-7SREO20:~$ 
leenhem@DESKTOP-7SREO20:~$ sudo /etc/init.d/docker ステータス
 * Dockerが実行中
leenhem@DESKTOP-7SREO20:~$ sudo /etc/init.d/docker ステータス
 * Dockerが実行されていません

Docker をまったく起動できないことがわかります。どうすればよいでしょうか?最初に必ずログを確認してください (/var/log/docker.log)
leenhem@DESKTOP-7SREO20:~$ テール /var/log/docker.log -n 100

time="2019-10-22T11:58:25.436968100+08:00" level=info msg="ccResolverWrapper: 新しいアドレスを cc に送信しています: [{unix:///var/run/docker/containerd/containerd.sock 0 <nil>}]" module=grpc
time="2019-10-22T11:58:25.437359900+08:00" level=info msg="ClientConn がバランサーを \"pick_first\" に切り替えています" module=grpc
time="2019-10-22T11:58:25.437703900+08:00" レベル=情報 メッセージ="pickfirstBalancer: HandleSubConnStateChange: 0xc420769030、接続中" モジュール=grpc
time="2019-10-22T11:58:25.438698400+08:00" レベル=情報 メッセージ="pickfirstBalancer: HandleSubConnStateChange: 0xc420769030, READY" モジュール=grpc
time="2019-10-22T11:58:25.559058900+08:00" level=info msg="[graphdriver] 以前のストレージ ドライバーを使用しています: overlay2"
time="2019-10-22T11:58:25.719182400+08:00" level=info msg="グラフのコンテンツ アドレス可能性への移行に 0.00 秒かかりました"
time="2019-10-22T11:58:25.719593400+08:00" level=warning msg="カーネルは cgroup メモリ制限をサポートしていません"
time="2019-10-22T11:58:25.719660300+08:00" level=warning msg="マウント内に CPU cgroup が見つかりません"
time="2019-10-22T11:58:25.719697200+08:00" level=warning msg="マウント内に blkio cgroup が見つかりません"
time="2019-10-22T11:58:25.719732900+08:00" level=warning msg="マウント内に cpuset cgroup が見つかりません"
time="2019-10-22T11:58:25.719888000+08:00" level=warning msg="pid のマウントポイントが見つかりません"
time="2019-10-22T11:58:25.721991900+08:00" level=info msg="正常なシャットダウン後のヘルスチェックを停止しています" module=libcontainerd
time="2019-10-22T11:58:25.722045300+08:00" level=info msg="正常なシャットダウン後にイベント ストリームを停止しています" error="コンテキストがキャンセルされました" module=libcontainerd namespace=plugins.moby
time="2019-10-22T11:58:25.723869300+08:00" レベル=情報 メッセージ="pickfirstBalancer: HandleSubConnStateChange: 0xc420769030, TRANSIENT_FAILURE" モジュール=grpc
time="2019-10-22T11:58:25.724042800+08:00" レベル=情報 メッセージ="pickfirstBalancer: HandleSubConnStateChange: 0xc420769030、接続中" モジュール=grpc
デーモンの起動エラー: デバイス cgroup がマウントされていません

予備的な結論: WIN10カーネルはLinuxのcgroupとaufsコンポーネントを完全にシミュレートすることはできません

公式サイトの説明 [解決方法]

[クロスポスト] WSL と Docker の相互運用性

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

apt インストール スクリーンフェッチ
スクリーンフェッチ

スクリプト: https://files.cnblogs.com/files/rgqancy/WSL.js、ダウンロードしてtxtとして保存

リレーの確立

Go がインストールされたので、リレーをビルドできます。以下のコマンドでは、必ず Windows ユーザー名に置き換えてください。

github.com/jstarks/npiperelay にアクセスします。
GOOS=windows go build -o /mnt/c/Users/Administrator/go/bin/npiperelay.exe github.com/jstarks/npiperelay

現在、Windows 用にリレーが構築されていますが、WSL 内から呼び出せるようにしたいと考えています。これを行うには、シンボリック リンクを作成します。必ず Windows ユーザー名に置き換えてください:

sudo ln -s /mnt/c/Users/Administrator/go/bin/npiperelay.exe /usr/local/bin/npiperelay.exe

リレーを可能にするために socat を使用します。 2 つのポイント間で双方向にデータを流すツールである socat をインストールします (これについては後で詳しく説明します)。このパッケージを入手してください:

sudo apt をインストール socat

最終ステップ

socat がインストールされ、実行ファイルがビルドされたら、いくつかのものをつなげるだけです。機能を有効にするためにシェル スクリプトを作成します。これをユーザーのホームディレクトリに配置します。これを行うには:

#ファイルを作成する
~/docker-relay をタッチします
#実行権限を追加
chmod +x ~/docker-relay

作成したファイルを、お気に入りのテキスト エディター (vim など) で開きます。これを docker-relay ファイルに貼り付けます:

#!/bin/sh
exec socat UNIX-LISTEN:/var/run/docker.sock、fork、group=docker、umask=007 EXEC:"npiperelay.exe -ep -s //./pipe/docker_engine"、nofork

ファイルを保存して閉じます。 docker-relay スクリプトは、docker グループによるアクセスを許可するように Docker パイプラインを構成します。通常のユーザーとして実行するには (すべての docker コマンドに 'sudo' を追加する必要はありません)、WSL ユーザーを docker グループに追加します。 Ubuntuの場合:

sudo adduser <WSLユーザー> docker

テストしてみましょう!

新しい WSL シェルを開いて、グループ メンバーシップがリセットされていることを確認します。バックグラウンドでリレーを開始します。

sudo ~/docker-relay &

次に、docker コマンドを実行して状況をテストします。 Windows からコマンドを実行した場合と同じ出力が表示されます (コマンドの前に「sudo」を付ける必要がないことに注意してください)。

知らせ

事前にDocker for Windowsを起動するには


ここに画像の説明を挿入

概略図

WSL で実行されている Docker クライアントを Docker for Windows と通信させる場合、根本的な問題があります。WSL クライアントは Unix ソケット経由の IPC を理解しますが、Docker for Windows は名前付きパイプ経由の IPC を理解します。ここで socat と npiperelay.exe が役立ちます。これらは、IPC のこれら 2 つの分離した形式の間の仲介役です。 Socat は Unix ソケット経由で通信する方法を理解し、npiperelay は名前付きパイプ経由で通信する方法を理解します。 socat と npiperelay はどちらも stdio 経由で通信する方法を理解しているため、相互に通信できます。


ここに画像の説明を挿入

要約する

上記は、編集者が紹介した、Win10 サブシステム Ubuntu (WSL) に Docker をインストールする方法に関するチュートリアルです。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Docker 経由で wsl の tar ファイルを作成する方法
  • IDEA で Docker を WSL2 にデプロイする詳細なプロセス
  • Docker Desktop をインストールすると、エラー メッセージが表示されます: WSL 2 のインストールが完了していません (エラー メッセージを解決してください)
  • Windows 10にWSL2 Ubuntu20.04をインストールしてdocker環境を構築する方法
  • Docker での WSL の構成と変更の問題について

<<:  MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します

>>:  WeChatアプレットがチャットルーム機能を実現

推薦する

jsはクリックしてカードを切り替える機能を実現します

この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...

JSはリクエストディスパッチャーを実装する

目次抽象化と再利用シリアルセグメントシリアル、セグメントパラレル要約するはじめに: JS は当然並列...

Docker ベースの Etcd 分散デプロイメントの方法と手順

1. 環境整備1.1 基本環境NTP設定: 省略 #時間の一貫性を確保するためにNTPサービスを設定...

HTML タグ sup と sub の応用の紹介

HTML タグ: 上付き文字HTML では、<sup> タグは上付き文字のテキストを定義...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

Nginx インストールの詳細なチュートリアル

1. Nginxの簡単な紹介Nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリ...

Linux で大容量メモリ ページを持つ Oracle データベースを最適化する方法

序文PC サーバーは今日まで発展を続け、パフォーマンスにおいて大きな進歩を遂げてきました。 64ビッ...

セマフォによるTomcatの異常終了の解決方法

最近はビッグデータで遊んでいます。友人が私のところに来て、オンラインの Tomcat が不可解に終了...

Centos7 システムでの python2 と python3 の共存

最初のステップは、Python のバージョン番号とインストール パスを確認することです。 上記のビュ...

jsはブラウザを閉じるときにアカウントのログアウトを処理します

目次古典的なアプローチ質問その他の質問注意が必要な問題古典的なアプローチご存知のとおり、アカウントの...

CSS 動的読み込みバー効果のサンプルコード

CSS変数の知識を使って、追加したコードとコメントを直接投稿します <!DOCTYPE htm...

過去2年間のユーザーエクスペリエンス

<br />国内のウェブサイトが本格的に普及し、ユーザーエクスペリエンスに重点が置かれる...

さまざまな種類のMySQLインデックス

インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...

HTML の marquee 属性の詳細な説明

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...