Docker,Remote, API,client, library, python,host, 원격, 리모트, 도커, git : today Key
Docker의 6번째 포스팅입니다. 이번 포스팅에서는 Docker를 Remote에서 제어할 수 있도록 제공되는 Remote API client libraries에 대해서 다뤄봅니다. 보안적인 측면보다는 최대한 우선 쉽게 접근하는 걸 목표로 잡고 있기 때문에 이 점은 감안해서 봐주시면 감사하겠습니다. ^^
이런 식으로 Docker를 Client에서도 다룰 수 있다는 것 정도로 보면 어떨까 싶습니다! ^^
물론 이러한 API를 활용하여 Docker Host를 관리하도록 한다면 Docker의 명령을 직접 입력하지 않고 Application을 클릭하는 것만으로도
docker를 관리할 수 있을 것입니다.
Docker Remote API Client libraries
• Docker에서는 Client가 Docker Host를 제어하기 위한 다양한 언어로 구성된 API Library에 대해 있음
• Docker를 작성한 Go를 비롯한 다양한 언어에 대한 Library가 Git을 통해서 제공되기 때문에 원하는 언어를 선택 가능.
• Client는 Host를 제어하는 역할이기 때문에 별도의 Docker Engine를 설치할 필요가 없으며,
Windows,Mac 등에서도 직접 사용 가능.
• 본 포스팅에서는 Windows기반의 PC에서 Python Library를 사용하여 Docker Host를 제어
• Docker API LINK : https://docs.docker.com/reference/api/remote_api_client_libraries/
Docker Remote API Client libraries - Python
• Python용 Library를 설치
- pip install docker-py [ Docker Python Library가 있는 Git 페이지에도 나와있음 ]
- https://github.com/docker/docker-py
• Python Shell에서 Docker Host에 접속 및 정보 확인
- docker.client 라이브러리를 Load
- Docker Host에 접속
※ Docker Host에서 기본 Unix Sock 접속이 아닌 TCP로 접속할 수 있도록 설정 필요.
- info() 메서드를 사용하면 현재 Docker Host에 대한 정보를 확인할 수 있음.
•Docker Image 정보 확인
- images() 메서드를 통해서 Docker Host에 있는 이미지 정보를 출력
- docker images 역할
•Docker Image 정보 확인 변형
- 위에 표기된 대로, 모든 정보가 다시 결과 값으로 리턴될 때의 사용자가 보기에는 조금 어렵게 리턴이 되게 되기 때문에 결과 값을
아래와 같이 가공이 필요로 함.
- originList() 메서드는 간략하게 결과 값을 가공하기 위해 만든 별도의 메서드
•Docker Image 정보 확인 변형2
- originList() 메서드는 처음이 결과 값보다는 보기가 편하지만 그래도 여전히 보기가 쉽지 않고 필요한 정보 뿐만 아니라,
필요 없을 수 있는 모든 정보들에 대한 결과를 보여주기 때문에 아래와 같이 필요한 정보에 대해서만 간략하게 보여줄 수 있도록
메서드를 작성하는 것이 좋음.
- ImageList() 메서드는 Image ID와 Repo, Tags, Virtual Size 에 대한 값만을 보여주도록 가공하도록 작성한 별도의 메서드.
•Docker Container 생성
- create_container() 메서드를 사용하여 Container를 생성
- start() 메서드에 매개변수로 생성된 Container 객체를 포함하여, Container를 Running 상태로 만듬.
- start() 메서드에 의해 생성된 Container가 정상적으로 동작하는지 확인하기 위해서, 해당 Container에서 동작 중인 웹서비스 호출
- containers() 메서드를 사용하면, 현재 동작 중인 Container의 정보를 볼 수 있음.
: docker ps 역할
- 아래의 실행 결과 값은 마찬가지로 originList() 메서드를 사용하여 전체 정보를 보기 쉽도록 가공.