Docker를 운영하다 보면 하나의 Docker 환경만 관리하는 것이 아니라 여러 대의 서버, 개발 환경, 테스트 환경, 원격 Docker 서버를 함께 관리해야 하는 경우가 많습니다.
예를 들어 로컬 PC에서는 개발용 Docker를 사용하고, 별도의 서버에서는 운영용 Docker Engine을 실행하는 경우가 있습니다. 이때 매번 접속 주소를 변경하거나 환경 변수를 수정하는 것은 매우 불편합니다.
이러한 문제를 해결하기 위해 Docker에서는 Context 기능을 제공합니다.
Docker Context는 현재 Docker CLI가 어떤 Docker Engine과 통신할지 지정하는 설정입니다. 하나의 컴퓨터에서 여러 Docker 환경을 쉽게 전환할 수 있으며, 원격 서버 관리에도 매우 유용합니다.
이번 글에서는 Docker Context의 개념부터 기본 사용법, Context 생성, 전환, 삭제, 원격 Docker 관리 방법까지 자세히 알아보겠습니다.
Docker Context란 무엇인가?
Docker Context는 Docker CLI와 연결되는 Docker Engine 환경을 관리하는 기능입니다.
기본적으로 Docker 명령어는 현재 로컬 Docker Engine과 통신합니다.
하지만 Context를 사용하면 다음과 같은 여러 환경을 쉽게 관리할 수 있습니다.
- 로컬 개발 서버
- 테스트 서버
- 운영 서버
- 원격 Docker Host
- Docker Swarm 환경
Context만 변경하면 같은 Docker 명령어를 다른 서버에 실행할 수 있습니다.
Docker Context는 언제 사용하는가?
다음과 같은 상황에서 자주 사용합니다.
- 여러 Docker 서버 관리
- 원격 Docker Engine 접속
- 개발·운영 환경 분리
- 서버 전환 작업
- Docker Swarm 관리
- 클라우드 Docker 환경 관리
특히 DevOps 환경에서는 필수적으로 사용하는 기능입니다.
Docker Context 기본 확인 방법
현재 생성된 Context 목록을 확인합니다.
docker context ls
출력 예시는 다음과 같습니다.
NAME DESCRIPTION DOCKER ENDPOINT
default Current DOCKER_HOST unix:///var/run/docker.sock
기본적으로 default Context가 생성되어 있습니다.
현재 사용 중인 Context 확인하기
현재 활성화된 Context는 별표(*)로 표시됩니다.
NAME DESCRIPTION
default * Current DOCKER_HOST
별표가 표시된 Context가 현재 Docker 명령어가 사용하는 환경입니다.
새로운 Docker Context 생성하기
새로운 Context를 생성하려면 다음 명령을 사용합니다.
docker context create test-server
생성 후 Docker 서버 연결 정보를 지정할 수 있습니다.
원격 Docker 서버 Context 생성하기
원격 서버에 SSH로 연결하는 Context를 만들 수 있습니다.
docker context create remote-server \
--docker host=ssh://user@server-ip
이제 별도의 SSH 접속 없이 해당 서버의 Docker를 관리할 수 있습니다.
Context 변경하기
다른 Docker 환경으로 전환하려면 use 명령을 사용합니다.
docker context use remote-server
출력:
remote-server
Current context is now "remote-server"
이제 실행하는 모든 Docker 명령은 해당 Context의 Docker Engine에서 실행됩니다.
기본 Context로 돌아가기
다시 로컬 Docker 환경으로 변경하려면 다음 명령을 사용합니다.
docker context use default
로컬 Docker Engine으로 다시 전환됩니다.
Docker Context 정보 확인하기
특정 Context의 상세 정보를 확인합니다.
docker context inspect remote-server
출력 결과에서 Docker Endpoint와 연결 정보를 확인할 수 있습니다.
Docker Context 실무 활용 예제
Docker Context는 여러 Docker 서버를 하나의 Docker CLI 환경에서 관리할 때 매우 유용합니다. 개발 서버, 테스트 서버, 운영 서버를 각각 관리해야 하는 DevOps 환경에서는 필수적으로 활용되는 기능입니다.
원격 서버 Context 생성하기
SSH를 이용하여 원격 Docker 서버에 연결하는 Context를 생성합니다.
docker context create production \
--docker host=ssh://root@192.168.0.100
생성된 Context를 통해 원격 서버의 Docker를 관리할 수 있습니다.
Context 목록 확인하기
현재 생성된 모든 Context를 확인합니다.
docker context ls
출력 예시:
NAME DESCRIPTION DOCKER ENDPOINT
default * unix:///var/run/docker.sock
production ssh://root@192.168.0.100
development ssh://root@192.168.0.200
현재 사용 중인 Context는 * 표시로 확인할 수 있습니다.
운영 서버 Context로 전환하기
운영 Docker 서버로 변경합니다.
docker context use production
이제 실행하는 Docker 명령어는 운영 서버에서 실행됩니다.
예:
docker ps
운영 서버의 컨테이너 목록이 출력됩니다.
개발 서버로 다시 전환하기
개발 환경으로 변경합니다.
docker context use development
이제 Docker 명령은 개발 서버에서 실행됩니다.
Context 없이 특정 서버 명령 실행하기
일시적으로 특정 Context를 사용하고 싶다면 --context 옵션을 사용할 수 있습니다.
docker --context production ps
현재 Context를 변경하지 않고 운영 서버의 컨테이너 목록만 확인할 수 있습니다.
Context 상세 정보 확인하기
생성된 Context 정보를 확인합니다.
docker context inspect production
출력 결과에서 다음 정보를 확인할 수 있습니다.
- Docker Endpoint
- Host 주소
- TLS 설정
- Storage 정보
Context 삭제하기
사용하지 않는 Context는 삭제할 수 있습니다.
docker context rm production
삭제 전 확인 메시지가 출력됩니다.
강제로 삭제하려면:
docker context rm -f production
사용하지 않는 Context를 정리할 수 있습니다.
Linux 서버 문제 해결
운영팀에서 여러 대의 Docker 서버를 관리하던 중 서버별 Docker 명령 실행 위치가 혼동되는 문제가 발생했습니다.
관리자는 매번 SSH 접속 후 Docker 명령을 실행하고 있었고, 잘못된 서버에서 컨테이너를 재시작하는 문제가 발생했습니다.
이를 해결하기 위해 서버별 Context를 생성했습니다.
운영 서버 Context 생성:
docker context create production \
--docker host=ssh://root@production-server
테스트 서버 Context 생성:
docker context create staging \
--docker host=ssh://root@staging-server
이후 작업할 서버에 맞게 Context만 변경했습니다.
docker context use production
확인:
docker ps
이제 별도의 SSH 접속 없이 정확한 서버에서 Docker 작업을 수행할 수 있게 되었습니다.
Docker Context를 활용하면 여러 서버를 관리할 때 발생하는 실수를 줄이고 운영 효율성을 크게 높일 수 있습니다.
Docker Context 사용 시 주의사항
Docker Context를 사용할 때는 다음 사항을 알아두면 좋습니다.
첫 번째는 현재 활성화된 Context를 항상 확인해야 합니다.
잘못된 서버에서 명령을 실행하는 실수를 방지하기 위해 작업 전에 다음 명령을 확인하는 것이 좋습니다.
docker context ls
두 번째는 운영 서버 Context 사용 시 주의해야 합니다.
현재 Context가 운영 서버라면 모든 Docker 명령이 실제 서비스 환경에 영향을 줄 수 있습니다.
세 번째는 Context 이름을 명확하게 지정하는 것이 좋습니다.
예:
- production
- staging
- development
처럼 환경을 구분하면 관리가 쉬워집니다.
네 번째는 사용하지 않는 Context는 정리하는 것이 좋습니다.
Best Practice
Docker Context를 사용할 때는 다음과 같은 방법을 추천합니다.
- 서버별 Context 이름을 명확하게 관리합니다.
- 운영 서버 작업 전 현재 Context를 확인합니다.
- 개발·테스트·운영 환경을 분리합니다.
- SSH 기반 Context 사용을 권장합니다.
- 사용하지 않는 Context는 삭제합니다.
- 중요한 작업 전
docker context inspect로 확인합니다.
이러한 방법을 적용하면 여러 Docker 환경을 더욱 안전하고 효율적으로 관리할 수 있습니다.
자주 묻는 질문
Docker Context는 무엇을 변경하나요?
Docker CLI가 연결할 Docker Engine 환경을 변경합니다.
Context를 변경하면 컨테이너도 이동하나요?
아닙니다.
단순히 Docker 명령이 실행되는 대상 서버만 변경됩니다.
하나의 PC에서 여러 Docker 서버를 관리할 수 있나요?
가능합니다.
Context를 사용하면 여러 Docker 환경을 쉽게 전환할 수 있습니다.
Context 없이 원격 Docker 서버를 사용할 수 있나요?
가능하지만 매번 연결 정보를 입력해야 하므로 Context 사용이 훨씬 편리합니다.
마무리
Docker Context는 하나의 Docker CLI 환경에서 여러 Docker Engine을 관리할 수 있게 해주는 매우 강력한 기능입니다.
개발 서버, 테스트 서버, 운영 서버처럼 여러 환경을 관리하는 DevOps 환경에서는 필수적인 기능이며, SSH 기반 연결을 활용하면 별도의 서버 접속 없이 Docker 명령을 실행할 수 있습니다.
특히 운영 환경에서는 현재 활성화된 Context를 항상 확인하는 습관을 들이면 잘못된 서버에서 작업하는 실수를 예방하고 더욱 안전한 Docker 운영이 가능합니다.