私の理解では、他のOSでdockerを実行する際の主な制限は、それを可能にしたLinuxネットワークコンテナーでした。 (確かにMac向け)。
最近 Microsoftが発表 aのベータ版 bunt linux ユーザーモード Windows 10でネイティブに実行されます。これにより、WindowsでELF形式でコンパイルされたバイナリを実行できます(コンパイルが必要なcygwin)
私の質問は:Dockerを新しいWindows 10(Ubuntu)bashユーザー空間でネイティブに実行できますか?
UbuntuのWSL/WindowsのDebianで、Docker Desktop for Windowsをエンジンとして、Docker for Linuxをクライアントとして使用できます。 TCP経由で接続します。
Windows用のDockerデスクトップをインストールします。 https://hub.docker.com/editions/community/docker-ce-desktop-windows Linuxコンテナーの代わりにWindowsコンテナーを使用する場合は、両方のタイプのコンテナーをbashユーザー空間のLinux Dockerクライアントによって管理されます。
バージョン17.03.1-ce-win12(12058)以降、Linux DockerクライアントがTCPによるWindows Dockerデーモンとの通信を継続できるようにするには、Expose daemon on tcp:// localhost:2375 without TLSをチェックする必要があります
次の手順を実行します:
cd
wget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgz
tar -xzvf docker-*.tgz
cd docker
./docker -H tcp://0.0.0.0:2375 ps
または
env DOCKER_Host=tcp://0.0.0.0:2375 ./docker ps
永続化するには:
mkdir ~/bin
mv ~/docker/docker ~/bin
対応する変数を.bashrcに追加します
export DOCKER_Host=tcp://0.0.0.0:2375
export PATH=$PATH:~/bin
もちろん、あなたはdocker-composeをインストールすることができます
Sudo -i
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
またはpython pip
Sudo apt-get install python-pip bash-completion
Sudo pip install docker-compose
そしてBashの完成。一番良いところ:
Sudo -i
apt-get install bash-completion
curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/docker
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
Hyper-Vを使用してDockerデスクトップの2.1.0.1(37199)バージョンを使用してテストしました。
$ docker version
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89e8a
Built: Thu Jul 25 21:17:37 2019
OS/Arch: linux/AMD64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.1
API version: 1.40 (minimum version 1.12)
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:17:52 2019
OS/Arch: linux/AMD64
Experimental: false
containerd:
Version: v1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
Look both client and server say **OS/Arch: linux/AMD64**
ボリューム
ボリュームを追加するときは注意してください。パスC:\dir
は、WSLでは/mnt/c/dir
として、Dockerエンジンでは/c/dir/
として表示されます。あなたはそれを永久に克服することができます:
Sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"
Wsl.confに変更を加えた後、WSLを終了して再ロードし、WSLが起動時に変更を読み込むようにする必要があります。
[〜#〜]更新[〜#〜]
from: Windows 10バージョン1803のコマンドラインの新機能
nixソケット UnixソケットはWindowsではサポートされていませんでしたが、現在サポートされています! WindowsとWSLの間でUnixソケットを介して通信することもできます。これのすばらしい点の1つは、WSLがLinux Dockerクライアントを実行して、Windowsで実行されているDocker Daemonとやり取りできることです。
[〜#〜]更新[〜#〜]
このスクリプトとUnixソケットの使用は Pengwin のpengwin-setupに含まれていました。
よろしく
現在(2016年4月)の時点で、答えは次のとおりです。
まだわかりません(しかし、おそらくわかりません)。
したがって、問題は、Dockerが必要とするシステム呼び出し(特にchrootと名前空間など)が実装されているかどうかです。答えはおそらく「いいえ」です。 Dockerには、プロセスとリソースの管理、およびプロセスの分離のために、かなり高度な(そしてLinux固有の)機能が必要です。これをすべてWindowsで複製することはおそらく可能ですが、多くの作業が必要になります。また、このWindows機能の目標はLinuxユーザー空間プログラムを実行しているように見えるため、すべての作業を行った可能性は低いようです(そして秘密にしておく) 。
しかし、私が知る限り、どちらにしても明確な情報はありません。
もちろん、MicrosoftがWindows 10でのDockerサポートを希望していると判断した場合は、おそらくそれを提供できるでしょう。 Dockerを別のカーネルに移植する前例がいくつかあります。
初のインサイダープレビューが昨日リリースされました。 dockerをインストールしようとしましたが、次のエラーで失敗します:
そのため、最初のプレビューでは現在機能していないように見えます。ただし、多くの人が推測しているように、将来のリリースで機能する可能性があります。
いいえ、できません。
コンテナーを実行するには、Dockerに複数のものが必要です。
これらはすべて、Linuxに実装されているカーネル機能です。残念ながら、それらのほとんどは、Windowsで(MicrosoftがWindowsカーネルに実装したLinuxサブシステムでも)代替として使用できる同様の機能を備えていません。これらはすべてOSによって提供される必要があります。
Creator Update (2017年6月13日に公開)以降、ネイティブWindows実行可能ファイルをWSLで直接実行できます。つまり、すでにインストールされている場合 Docker for Windows は、C:\Program Files
の下にインストールされているdocker
バイナリを呼び出すだけです。末尾が.exe
であるため、最も簡単なオプションはエイリアスを作成することです。 .bashrc
では、次のようなものが機能するはずです。
DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'
for f in "$DOCKER_BIN"/*; do
alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'
done
これにより、DOCKER_BIN
ディレクトリ内のすべてのファイルのエイリアスが作成されます。
$ type docker
docker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'
$ docker --version
Docker version 17.03.1-ce, build c6d412e
注意点:Linuxディレクトリから実行すると、「Unable to translate current working directory」のようなエラーメッセージが表示されます。ちょうどcd
をWindowsディレクトリ(例:/mnt/c/Users/YourUsername
)に入れれば、大丈夫です。
Docker 1.12がリリースされ、Linux Dockerクライアントが分離されると、Windows 10 bashでdocker clientを実行できるようになります。
これは、Docker Windowsクライアントを使用している場合はそれほど聞こえないかもしれませんが、クライアント側の機能にdockerを含むLinuxツールチェーンがある場合に役立ちます。
Windows 10バージョン1607ビルド1493.10ではUbuntu Bashに正常にインストールできますが、機能しません:(
単純な「dockerバージョン」で次のようにわかります。
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/AMD64
FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?
次に「Sudo docker -d」を実行すると、次のエラーが発生します。
FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.
したがって、これは間違いなくbash側からのストッパーです。
それにもかかわらず、 Docker for Windows をインストールすると、魅力的に機能し、Linuxサーバーと必要なすべてのものをデプロイできることは明らかです。
> docker version
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: windows/AMD64
Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: linux/AMD64
2016年9月現在、いいえ。
Windows上のDockerの現在のすべての実装は仮想化を使用しており、Docker 1.12はWindowsでハイパーバイザーを使用しているため、仮想化に対するコンテナー化の利点がなくなります。
Dockerには、Linuxシステムコールを使用するだけでは不十分です。
プロセスコントロールグループ(cgroups)、スタック可能なファイルシステム(aufs)、およびカーネル外のその他のLinuxベースのシステムが必要です。
CgroupsもaufsもWindows 10カーネルにはネイティブではありません。
ここにWindows Server 2016の実装があります: https://msdn.Microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server 。 。しかし、これは一部のWindowsサービスのみを実行します。 UbuntuではなくIIS
Dockerは現在、現在のビルド(14316)では機能しません-インストールできると想定しています。
root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict
差出人: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/
Faster and more reliable – native development environment using
hypervisors built into each operating system. (No more VirtualBox!)