it-swarm-ko.com

새로운 Windows 10 (Ubuntu) bash 사용자 공간에서 Docker를 기본적으로 실행할 수 있습니까?

다른 OS에서 도커를 실행할 때의 주요 제한 사항은 Linux 네트워크 컨테이너가 가능하다는 것입니다. (확실히 Mac의 경우).

최근 Microsoft 발표우분투 리눅스 사용자 모드 의 베타 베타는 Windows 10에서 기본적으로 실행됩니다. 이것은 Windows에서 ELF 형식으로 컴파일 된 바이너리를 실행할 수 있습니다. cygwin : 컴파일 필요)

내 질문은 : 새로운 Windows 10 (Ubuntu) bash 사용자 공간에서 Docker를 기본적으로 실행할 수 있습니까?

127
Hawkeye

Windows 용 Docker Desktop을 엔진으로, Linux 용 Docker를 Ubuntu/Debian (Windows)의 WSL에서 클라이언트로 사용할 수 있습니다. TCP를 통해 연결하십시오.

Windows 용 Docker Desktop을 설치하십시오. https://hub.docker.com/editions/community/docker-ce-desktop-windows Linux 컨테이너 대신 Windows 컨테이너를 사용하려면 두 유형 컨테이너가 모두 가능합니다. bash 사용자 공간에서 Linux docker 클라이언트가 관리합니다.

버전 17.03.1-ce-win12 (12058) 이후로 Linux Docker 클라이언트가 Windows Docker 데몬과 계속 통신 할 수 있도록 tcp ​​: // localhost : 2375의 Expose daemon at TLS를 확인해야합니다. TCP로

이 단계를 따르세요:

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

그리고 배쉬 완성. 제일 좋은 부분:

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를 사용하는 2.1.0.1 (37199) 버전의 Docker Desktop을 사용하여 테스트했습니다.

$ 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은 (는) /mnt/c/dir WSL 및 /c/dir/ 도커 엔진으로. 영구적으로 극복 할 수 있습니다.

Sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Wsl.conf를 변경 한 후 WSL이 시작시 변경 사항을 읽도록 WSL을 종료했다가 다시로드해야합니다.

업데이트

from : Windows 10 버전 1803의 명령 줄의 새로운 기능

Unix Sockets 유닉스 소켓은 Windows에서 지원되지 않았으며 이제는 지원됩니다! Windows와 WSL간에 Unix 소켓을 통해 통신 할 수도 있습니다. 이것에 대한 가장 큰 장점 중 하나는 WSL이 Linux Docker Client를 실행하여 Windows에서 실행되는 Docker Daemon과 상호 작용할 수 있다는 것입니다.

업데이트

이 스크립트와 유닉스 소켓 사용은 Pengwin 의 pengwin-setup에 포함되었습니다.

문안 인사

104

현재 (2016 년 4 월) 현재 답변은 다음과 같습니다.

아직 모르겠다 (아마도).

사실

  • Windows 10은 이제 다양한 Linux 프로그램 (Bash Shell 및 다양한 텍스트 유틸리티)을 실행할 수 있습니다. 포트가 아닙니다 (예 : Cygwin 에서와 같이 재 컴파일 된 버전). 일반적인 Linux 시스템에서 실행되는 것과 동일한 ELF 바이너리 입니다. 이 경우 우분투에서 가져 왔습니다.
  • 이를 가능하게하기 위해 Windows 10은 Linux 시스템 호출 (syscalls)을 허용하고 ELF 바이너리 ( comment by Scott Hanselman )를로드하고 실행할 수 있도록 수정되었습니다. 즉, 수정되지 않은 Linux 실행 파일을 실행할 수 있으며 필요에 따라 수정되지 않은 공유 라이브러리를로드하며 Windows는이를 Windows 프로세스로 실행합니다.
  • 이러한 Linux 프로그램이 커널과 상호 작용하려고 할 때마다 시스템 호출을 발행하거나 라이브러리가이를 수행하게합니다. 이것은 아마도 Linux에서 실행하는 것과의 유일한 차이점 일 것입니다. Linux에서 실행할 때 Linux 커널은 이러한 호출을 처리합니다. Windows 10에서는 Windows 10 커널이 대신 수행합니다.

투기

따라서 문제는 Docker가 필요로하는 syscalls (chroot 및 네임 스페이스 등)가 구현되었는지 여부입니다. 그 대답은 "아니오"일 것입니다. Docker는 프로세스 및 리소스 관리 및 프로세스 격리를 위해 상당히 정교하고 Linux 별 기능이 필요합니다. 이 모든 것을 Windows에서 복제하는 것이 가능할 수도 있지만 많은 작업이 필요할 것입니다.이 Windows 기능의 목표는 Linux 사용자 공간 프로그램을 실행하는 것으로 보이므로 모든 작업을 수행하지는 않았을 것입니다 (비밀을 유지). .

그러나 내가 알 수있는 한 확실한 정보는 없습니다.

기존 도커 포트

물론, Microsoft가 Windows 10에서 Docker를 지원하기로 결정한 경우이를 제공 할 수 있습니다. Docker를 다른 커널로 이식하기위한 선례가 있습니다.

  • FreeBSD 용 Docker 포트 가 있습니다. "실험적"이라고 표시되어 있지만 원칙적으로 작동하는 것 같습니다. Docker 저장소에서 수정되지 않은 Docker 컨테이너를 사용할 수 있습니다. 즉, 실제로 이미지에 Linux와 같은 호스트 환경을 제공합니다.
  • Docker를 Windows (특히 Windows Server 2016)로 이식하는 프로젝트가 진행 중입니다. 2015 년 8 월부터 Docker 블로그 항목 을 참조하십시오. 그러나 위의 FreBSD 포트와 달리 Docker를 허용하는 포트가됩니다. Windows에서 Linux 이미지가 아닌 Windows에서 Windows 이미지를 실행합니다. 이 사실을 알려준 Rоry McCune에게 감사드립니다.
51
sleske

첫 번째 내부자 미리보기가 어제 발표되었습니다. 도커를 설치하려고 시도했지만 다음과 같이 실패합니다. docker fail

따라서 첫 번째 미리보기에서는 현재 작동하지 않는 것처럼 보입니다. 그러나 많은 사람들이 추측했듯이 향후 릴리스에서 작동 할 수 있습니다.

13
CodedBeard

아니요, 불가능합니다.

Docker는 컨테이너를 실행하기 위해 여러 가지가 필요합니다.

  • chroot
  • 의 네임 스페이스
    • PID
    • 사용자
    • 회로망
    • 마운트
    • UTS
    • IPC

이것들은 모두 리눅스에서 구현 된 커널 기능입니다. 불행히도, 대부분은 Windows에서 대체 기능으로 사용할 유사한 기능을 가지고 있지 않습니다 (Microsoft가 Windows 커널에서 구현 한 Linux 하위 시스템에서도). 이 모든 것은 OS에서 제공해야합니다.

13
Florin Asăvoaie

Creator Update (2017 년 6 월 13 일에 공개적으로 출시됨)부터 WSL에서 직접 기본 Windows 실행 파일을 실행할 수 있습니다. 이것은 이미 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 디렉토리에서 실행할 경우 " 현재 작업 디렉토리를 번역 할 수 없습니다 "와 같은 오류 메시지가 표시됩니다. Windows 디렉토리 (예 : /mnt/c/Users/YourUsername)에 cd 만 있으면됩니다.

7
dimo414

Docker 1.12가 릴리스되고 Linux Docker 클라이언트가 분리되면 Windows 10 bash에서 docker client를 실행할 수 있습니다.

Docker Windows 클라이언트가있는 경우별로 들리지 않지만 클라이언트 측 기능을 위해 docker가 포함 된 Linux 도구 체인이있는 경우 유용합니다.

6
mixja

Windows 10 버전 1607 빌드 1493.10에서는 Ubuntu Bash에 성공적으로 설치할 수 있지만 작동하지 않습니다 : (

간단한 "도커 버전"은 다음을 알려줍니다.

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
4
Bruno Medina

2016 년 9 월 현재.

Windows에서 Docker의 모든 현재 구현은 가상화를 사용하고 Docker 1.12는 Windows에서 하이퍼 바이저를 사용하므로 가상화에 비해 컨테이너화의 이점을 제거합니다.

Docker는 Linux 시스템 호출을 사용하는 것 이상을 필요로합니다.

프로세스 제어 그룹 (cgroup), 스택 가능 파일 시스템 (aufs) 및 커널 외부의 다른 Linux 기반 시스템이 필요합니다.

Cgroup이나 auf는 기본적으로 Windows 10 커널에 없습니다.

여기에 Windows Server 2016의 구현이 있습니다 : https://msdn.Microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server . 그러나 이것은 일부 Windows 서비스 만 실행합니다. 우분투가 아닌 IIS

3
Graham

Docker는 현재 빌드 (14316)에서 작동하지 않습니다. 설치 할 수 있다고 가정합니다.

[email protected]:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict
2
lgj

보낸 사람 : 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!)
1
gavenkoa