- 보안 접근을 위한 TLS 인증서의 경로까지 명령을 입력할 때마다 매번 지정해야 하기 때문에 사용하기 번거롭다.
- 도커 컨텍스트를 사용하면 원격으로 접근할 도커 엔진을 편리하게 전환할 수 있다.
- 도커 컨텍스트는 도커 명령행 도구에서 원격 접근에 필요한 모든 상세 정보를 지정하면 생성할 수 있다.
- 컨텍스트는 여러 개를 만들 수도 있으며 원격 접근에 필요한 상세 정보는 모두 로컬 컴퓨터에 저장된다.
실습 TLS 보안이 설정된 Play with Docker의 원격 도커 엔진에 접근하기 위한 컨텍스트를 생성하라.
001) # Play with Docker 내 도커 엔진의 도메인과 인증서로 컨텍스트를 생성한다
002) ➜ docker context create pwd-tls --docker "host=tcp://$pwdDomain,ca=/tmp/pwd-certs/ca.pem,cert=/tmp/pwd-certs/client-cert.pem,key=/tmp/pwd-certs/client-key.pem"
003) pwd-tls
004) Successfully created context "pwd-tls"
005)
006) # SSH 보안을 적용한 경우
007) ➜ docker context create local-tls --docker "host=ssh://user@server"
008) local-tls
009) Successfully created context "local-tls"
010)
011) # 컨텍스트 목록을 확인한다.
012) ➜ docker context ls
013) NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
014) default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock
015) desktop-linux * moby unix:///Users/woogie/.docker/run/docker.sock
016) local-tls moby ssh://user@server
017) pwd-tls moby tcp://ip172-18-0-11-cj2vgeggftqg00c9qjo0-2376.direct.labs.play-with-docker.com
- 002: 도커 명령행 도구에서 원격 엔진에 접근할 때 입력했던 접속 상세 정보로 컨텍스트를 만들 수 있다. 여기서는 호스트명과 인증서 경로로 컨텍스트를 만들었다.
-
014: 도커 엔진은 물론이고 쿠버네티스 엔드포인트 접속 정보로도 컨텍스트를 만들 수 있다. 현재 기본 컨텍스트는 명명 파이프가 사용된 로컬 컴퓨터의 도커 엔진을 가리킨다.
-
컨텍스트에는 로컬 엔진이나 원격 엔진 간에 대상을 전환하기 위해 필요한 모든 정보가 들어간다.
- 앞의 실습에서는 TLS 보안이 적용된 엔진이 대상이었지만, SSH 보안이 적용된 엔진에서도 호스트명과 인증서 경로 대신 SSH 접속 문자열을 인자로 지정하면 똑같이 기능하는 컨텍스트를 만들 수 있다.
컨텍스트 전환 * 컨텍스트를 전환하는 방법은 두 가지다. * 한 가지는 해당 터미널 세션에만 적용되는 임시적인 전환이고 * 다른 한 가지는 이후 다른 컨텍스트로 다시 전환할 때까지 다른 터미널 세션에도 모두 적용되는 영구적인 전환이다.
실습 컨텍스트가 전환되면 그때부터 호스트명을 지정하지 않고 입력된 도커 명령은 현재 컨텍스트가 가리키는 도커 엔진으로 전달된다. 컨텍스트는 환경 변수를 사용해 임 시로 전환할 수도 있고, context use 명령을 사용해 영구적으로 전환할 수도 있다.
001) # 환경 변수를 사용해 이름이 있는 컨텍스트로 전환하는 방법
002) # 해당 터미널 세션에서만 적용되지만, 권장되는 컨텍스트 전환 방법이다
003)
004) # 리눅스 환경에서
005) ➜ export DOCKER_CONTEXT='pwd-tls'
006)
007) # 현재 선택된 컨텍스트를 확인한다.
008) ➜ docker context ls
009) NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
010) default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock
011) desktop-linux moby unix:///Users/woogie/.docker/run/docker.sock
012) local-tls moby ssh://user@server
013) pwd-tls * moby tcp://ip172-18-0-11-cj2vgeggftqg00c9qjo0-2376.direct.labs.play-with-docker.com
014)
015) # 현재 컨텍스트가 가리키는 도커 엔진의 컨테이너 목록을 확인한다.
016) ➜ docker container ls
017) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
018) b62004889054 diamol/apache "httpd-foreground" 3 hours ago Up 3 hours 0.0.0.0:32768->80/tcp romantic_wright
019)
020) # 기본 컨텍스트로 복귀한다. 이 방법으로 컨텍스트를 전환하면
021) # 다른 터미널 세션까지 영향을 미치기 때문에 바람직하지 않다
022) docker context use default
023)
024) # 현재 컨텍스트가 가리키는 도커 엔진의 컨테이너 목록을 확인한다.
025) ➜ docker container ls
026) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
027) b62004889054 diamol/apache "httpd-foreground" 3 hours ago Up 3 hours 0.0.0.0:32768->80/tcp romantic_wright
- 005: 컨텍스트 이름을 값으로 환경 변수를 정의하면 해당 터미널 세션에서만 유효하게 컨텍스트를 전환할 수 있다.
- 009~013: 컨텍스트 이름 앞에 붙은 애스터리스크는 해당 컨텍스트가 활성 컨텍스트임을 나타낸다. 지금 실행하는 모든 도커 명령은 이 컨텍스트가 가리키는 도커 엔진을 대상으로 한다.
- 022~027: 환경 변수를 이용한 컨텍스트 설정은 docker context use 명령으로 지정한 컨텍스트 설정보다 우선한다. 로컬 도커 엔진을 가리키는 컨텍스트로 전환했어도 Play with Docker 웹 사이트에서 생성했던 컨테이너 목록이 여전히 보이는 것은 이 때문이다.