태그 보관물: docker

docker

새로운 Windows 10 (Ubuntu) bash 사용자 공간에서 Docker를 기본적으로 실행할 수 있습니까? 다른 OS에서 도커를 실행할 때의 주요

다른 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/dirWSL과 /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 디렉토리에서 실행할 경우 ” 현재 작업 디렉토리를 번역 할 수 없습니다 “와 같은 오류 메시지가 표시 됩니다. cdWindows 디렉토리 (예 :)에 들어가면 /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