다른 OS에서 도커를 실행할 때의 주요 제한 사항은 Linux 네트워크 컨테이너가 가능하다는 것입니다. (확실히 Mac의 경우).
최근 Microsoft는 Windows 10에서 기본적으로 실행 되는 Ubuntu Linux 사용자 모드 의 베타 버전을 발표 했습니다 . 이는 컴파일이 필요한 cygwin과 달리 Windows에서 ELF 형식으로 컴파일 된 바이너리를 실행할 수 있습니다.
내 질문은 : 새로운 Windows 10 (Ubuntu) bash 사용자 공간에서 Docker를 기본적으로 실행할 수 있습니까?
답변
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 컨테이너를 사용하려는 경우 두 유형 컨테이너는 Linux Docker 클라이언트에서 관리 할 수 있습니다. bash 사용자 공간.
버전 17.03.1-ce-win12 (12058) 부터 Linux Docker 클라이언트가 TCP를 통해 Windows Docker 데몬과 계속 통신 할 수 있도록 TLS없이 tcp : // localhost : 2375에서 Expose 데몬을 확인해야합니다 .
이 단계를 따르세요:
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
또는 파이썬 핍 사용
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의 명령 줄의 새로운 기능
유닉스 소켓
유닉스 소켓은 Windows에서 지원되지 않았으며 이제는 지원됩니다! Windows와 WSL간에 Unix 소켓을 통해 통신 할 수도 있습니다. 이것에 대한 가장 큰 장점 중 하나는 WSL이 Linux Docker Client를 실행하여 Windows에서 실행되는 Docker Daemon과 상호 작용할 수 있다는 것입니다.
최신 정보
이 스크립트와 유닉스 소켓 사용은 Pengwin 의 pengwin-setup 에 포함되었습니다 .
문안 인사
답변
현재 (2016 년 4 월) 현재 답변은 다음과 같습니다.
우리는 아직 알지 못합니다 (아마도).
사실
- Windows 10은 이제 다양한 Linux 프로그램 (Bash 셸 및 다양한 텍스트 유틸리티)을 실행할 수 있습니다. 이들은 포트가 아니며 (예 : Cygwin 과 같이 재 컴파일 된 버전 ) 일반적인 Linux 시스템에서 실행 되는 것과 동일한 ELF 바이너리 입니다. 이 경우 우분투에서 가져 왔습니다.
- 이를 가능하게하기 위해 Windows 10은 Linux 시스템 호출 (syscall)을 허용하고 ELF 바이너리 ( 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 컨테이너를 사용할 수 있습니다. 즉, 실제로 이미지에 Linux와 같은 호스트 환경을 제공합니다.
- Docker를 Windows (특히 Windows Server 2016)로 이식하는 프로젝트가 진행 중입니다 . 2015 년 8 월부터이 Docker 블로그 항목 을 참조하십시오 . 그러나 위의 FreBSD 포트와 달리 Docker는 Windows에서 Windows 이미지를 실행할 수있는 포트가됩니다. Windows에서 Linux 이미지가 아닙니다. 이것을 지적 해준 Rоry McCune에게 감사합니다.
답변
첫 번째 내부자 미리보기가 어제 발표되었습니다. 도커를 설치하려고 시도했지만 다음과 같이 실패합니다.
따라서 첫 번째 미리보기에서는 현재 작동하지 않는 것처럼 보입니다. 그러나 많은 사람들이 추측했듯이 향후 릴리스에서 작동 할 수 있습니다.
답변
아니요, 불가능합니다.
Docker는 컨테이너를 실행하기 위해 여러 가지가 필요합니다.
- chroot
- 네임 스페이스 :
- PID
- 사용자
- 회로망
- 마운트
- UTS
- IPC
이것들은 모두 리눅스에서 구현 된 커널 기능입니다. 불행히도, 대부분은 Windows에서 대체 기능으로 사용할 유사한 기능을 가지고 있지 않습니다 (Microsoft가 Windows 커널에서 구현 한 Linux 하위 시스템에서도). 이 모든 것은 OS에서 제공해야합니다.
답변
의로서 창조주 업데이트 (2017년 6월 13일에 공개적으로 발표) 당신은 WSL에서 직접 실행 기본 Windows를 실행할 수 있습니다. 이것은 Windows 용 Docker를 이미 설치 한 경우 docker
아래에 설치된 바이너리 를 호출하기 만하면 됩니다 C:\Program Files
. .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 디렉토리에서 실행할 경우 ” 현재 작업 디렉토리를 번역 할 수 없습니다 “와 같은 오류 메시지가 표시 됩니다. cd
Windows 디렉토리 (예 :)에 들어가면 /mnt/c/Users/YourUsername
좋을 것입니다.
답변
Docker 1.12가 릴리스되고 Linux Docker 클라이언트가 분리되면 Windows 10 bash에서 docker 클라이언트 를 실행할 수 있습니다 .
Docker Windows 클라이언트가있는 경우별로 들리지 않지만 클라이언트 측 기능을 위해 docker가 포함 된 Linux 도구 체인이있는 경우 유용합니다.
답변
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