티스토리 뷰
프로젝트하는데, 원격으로 Docker container를 제어해야할 일이 생겼다. 이것저것 알아보는데 애를 먹어서, 내 블로그에 정리해본다.
순서
1. Ubuntu에 Docker 설치하기
2. 테스트용 Docker Image 만들기
3. Dockerd tcp로 설정하기
4. Docker Engine API 를 이용하여, 요청하기
4.1. container list 가져오기
4.2. container 생성하기
4.3. container 실행하기
4.4. container 중지하기
4.5. container 삭제하기
본 글에서는 순서 3., 4. 에 대해서 정리하고자 한다.
3. Dockerd tcp로 설정하기
https://docs.docker.com/get-started/overview/
Docker 에는 Docker client와 Docker deamon 이 있다. (Docker는 client-server 아키텍처로 구성되어 있다.)
Docker client(docker) : Docker deamon 에 서비스를 요청하며, REST API, UNIX socket, network interface를 이용하여, 통신한다.
Docker deamon(dockerd) : image, container, network, volume과 같은 Docker object들을 관리하고 Docker client로 부터 들어오는 요청을 수행하는 역할을 한다. 또한 다른 Docker deamon과 통신도 할 수 있다.
Docker Engine API 요청을 받기 위해 Docker deamon은 Socket 방식의 3가지 타입을 가진다. (unix, tcp, fd)
여기서 원격으로 dockerd 에 Docker Engine API 요청을 하고싶다면, tcp를 활성화 시켜야 한다.
[ tcp 활성화 방법 ]
https://docs.docker.com/engine/reference/commandline/dockerd/
- 각자 원하는 IP, PORT를 설정하면 된다.
※ docker에서는 기본적으로 2375, deamon와 암호화된 통신에서는 2376을 이용한다.
$sudo dockerd -H tcp://127.0.0.1:2375
Tip. 이렇게 -H 옵션을 이용하여, IP, PORT를 설정하면, REST API로 docker deamon에 요청하지 않고, 동일한 터미널에서 docker 를 이용해 command 를 요청할 경우, 매번 -H 127.0.0.1:2375 를 붙여야 한다. 매번 붙이기 귀찮을 경우 해당 옵션을 환경 변수에 지정할 수 있다.
아래는 .bashrc 파일 하단에 export DOCKER_HOST="tcp://127.0.0.1:2375 를 추가하는 내용이다.
추가했다면, source ~/.bashrc 를 통해 변경사항을 적용한다.
$vi ~/.bashrc
//bashrc 파일 하단에 export DOCKER_HOST = "tcp://127.0.0.1:2375" 추가
...
export DOCKER_HOST="tcp://127.0.0.1:2375"
4. Docker Engine API 를 이용하여, 요청하기
dockerd 를 tcp 통신으로 설정하여 실행시켰다면, 이제 Docker Engine API 문서를 확인하여, 필요한 요청을 수행하면 된다. Docker Engine API는 wget, curl, HTTP 통신 라이브러리 등 HTTP client에 의한 접근이 가능한 RESTful API 이다.
https://docs.docker.com/engine/api/
Docker Engine API 는 위 링크( Develop with Docker Engine API )에서 Docker 버전에 맞는 API 문서를 선택하여 확인하면 된다.
해당 문서에서 원하는 요청을 확인하려면, 왼쪽 사이드바에서 찾으면 된다.
다음은 Container 관련 API 요청 몇 가지를 예시로 작성한 것이다. 정확한 사용법과 각종 옵션 등은 API 문서를 확인하자.
[ container list 가져오기 ]
[ container 생성하기 ]
- container 를 생성하기 위해서는 Image가 있어야 하며, Request Body에 어떤 Image로 container를 생성할 것인지 작성하면된다. maintest:0.1 은 테스트 용으로 만든 image 파일이며, query parameter 의 name 은 생성할 container 의 명을 지정한다. option이며, 없으면 Docker에서 알아서 생성해준다.
※ Image 외에도 body에 추가하는 속성이 많다. Nullable 표시가 없으면 필수적으로 넣어야 하는 속성이 아닌가... 생각되는데, Nullable 표시가 없는 속성들이 body에 추가되지 않아도 생성 잘 된다....
혼란스럽지만... 어쨌든 container는 반드시 image가 있어야 하니 image만 잘 추가하면 된다.
[ container 실행하기 ]
[ container 중지하기 ]
query parameter의 t 는 container를 중지하기까지 대기하는 시간을 나타낸다. ( 초 단위 )
아래는 3초 이후에 중지하라는 것이다.
[ container 삭제하기 ]
'etc' 카테고리의 다른 글
[ wireshark ] 와이어샤크(wireshark) 사용법 (0) | 2022.06.10 |
---|---|
[ java ]날짜 String -> ZonedDateTime 변환 (0) | 2022.05.30 |
[ Ubuntu ] sudo apt update 에러 (1) | 2022.02.21 |
[ubuntu] python 파일 실행 시, PermissionError (0) | 2022.02.18 |
[python3] ubuntu20.04에 python3.9 설치 (0) | 2022.02.18 |