Study/linux

[Remote API] 외부 컴퓨터에서도 도커를 이용하기

MeditT 2019. 10. 6. 21:26

도커가 깔려 있지 않은 컴퓨터에서도 도커를 이용할 수 있다.

어떻게? 외부에서 접속해서!

 

RemoteAPI를 이용하면 원격으로 도커 데몬에 명령을 내릴 수 있다.

pull이나 attach같은 몇몇 복잡한 명령어들은 안되지만, 대부분은 가능하다.

 

외부에서 apach server를 열어 테스트해보자.

 

 

 

<서버 TCP 소켓 열기>

도커 데몬 TCP 소켓 열기

같은 컴퓨터 내에서 프로세스끼리 통신할땐 UNIX소켓, 다른 컴퓨터끼리 네트워크로 통신할 땐 TCP소켓을 이용한다.

나는 다른 컴퓨터에서 원격으로 이용할 것이니 TCP소켓을 열어준다.

 

1. TCP소켓 Listen하기

# listen using the default unix socket, and on 2 specific IP addresses on this host.
$ service docker stop
$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2
 

포트 2375는 암호화되지 않은 포트(plain text로 통신), 2376은 암호화된 포트(TLS이용)다. 기본포트: 2375

 

도커의 localhost (DOCKER_HOST)는 0.0.0.0이다.

$ dockerd -H tcp://0.0.0.0:2375

혹은 이렇게 열어줘도 된다.

$ export DOCKER_HOST="tcp://0.0.0.0:2375"
 
$ docker ps

 

 

2. TLS 설정도 해 주자. (선택)

$ docker --tlsverify ps
# or
$ export DOCKER_TLS_VERIFY=1
$ docker ps

* 도커는 클라이언트와 데몬으로 나뉘어있다. 도커 클라이언트는 평소에 쓰던 `docker run ~~`이런식으로 명령내리는거. 내가 내 컴퓨터에서 직접 명령 내리던곳이 도커 클라이언트. 도커 데몬은 명령을 수행하는 주체다. 도커 클라이언트에 명령을 주면, 클라이언트가 데몬을 통해 명령을 수행하는 구조다. 원격으로 명령을 내릴땐 도커 데몬만 이용한다.

 

* SSH나 프록시를 이용할수도 있다. 포스팅 아래쪽 참고링크를 참고하자.

 

*  dockerd -H로 실행하면, docker ~~ 명령어를 쓸 때 -H옵션도 입력해줘야쓸 수 있다.

 

* tcp주소 0.0.0.0으로 열었을 때와, tcp주소 192.168.xxx.x(ip주소)로 열었을때는 다르다.

 

 

<클라이언트 컴퓨터>

클라이언트 컴퓨터에서 도커 명령 내리기

 

1. 도커클라이언트로 원격 도커 데몬에 명령내리는 방법

 

클라이언트에도 도커가 깔려있다면 이렇게 명령해서 사용할 수 있다.

 

tcp://[host]:[port][path] or unix://path

명령하는 예시:

$ docker -H tcp://127.0.0.1:2375 pull ubuntu

 

 

실행결과

(한 컴퓨터 내에서 실험해본 결과다)

 

 

tcp: 0.0.0.0으로 연 경우

# 터미널 1 - 도커 데몬 실행하기
 
$ service docker stop
 
$ dockerd -H tcp://0.0.0.0    # TCP 소켓 열기. 기본포트 2375
 
 
# 터미널 2 - 도커 클라이언트로 데몬에 명령 내리기 (ps)
 
$ docker ps                 # 불가
 
$ docker -H :2375 ps             # 가능
 
$ docker -H tcp://0.0.0.0:2375 ps    # 가능
 
$ docker -H localhost ps        # 가능
 
$ docker -127.0.0.1            # 가능
 
$ docker -H tcp://192.x.x.x        # 가능

 

 

tcp: 192.x.x.x(IP주소)으로 연 경우

 

# 터미널 1 - 도커 데몬 실행하기
 
$ service docker stop
 
$ dockerd -H tcp://192.x.x.x    # TCP 소켓 열기. 기본포트 2375
 
 
# 터미널 2 - 도커 클라이언트로 데몬에 명령 내리기 (ps)
 
$ docker ps                 # 불가
 
$ docker -H :2375 ps             # 불가
 
$ docker -0.0.0.0:2375 ps        # 불가
 
$ docker -H localhost ps        # 불가
 
$ docker -127.0.0.1            # 불가
 
$ docker -H tcp://192.x.x.x        # 가능

 

 

그런데 도커 클라이언트를 설치할 수 없다면? curl을 이용하자.

 

 

2. curl을 이용하는 방법

 

도커 Remote API는 RestAPI를 이용한다. Node.js에서 쓰던 그 GET/POST있던 그 API 맞다.

그냥 curl을 이용하는 방법대로 쓰면 된다.

 

container list 예시

 

$ curl -X GET /v1.24/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1

 

container create 예시

 

$ curl -X POST /v1.24/containers/create HTTP/1.1

 

 

 

 

참고

 

Remote API reference::  https://docs.docker.com/engine/api/v1.24/

 

Engine API v1.24

1. Brief introduction The daemon listens on unix:///var/run/docker.sock but you can Bind Docker to another host/port or a Unix socket. The API tends to be REST. However, for some complex...

docs.docker.com

도커 데몬 TCP 설정:: https://docs.docker.com/engine/reference/commandline/dockerd/

 

dockerd

daemon Usage: dockerd COMMAND A self-sufficient runtime for containers. Options: --add-runtime runtime Register an additional OCI compatible runtime (default []) --allow-nondistributable-artifacts list Push nondistributable artifacts to specified registrie

docs.docker.com

 

외부에서 명령 내리는 예시:: https://docs.docker.com/develop/sdk/examples/

 

Examples using the Docker Engine SDKs and Docker API

After you install Docker, you can install the Go and Python SDKs and also try out the Docker Engine API. Each of these examples show how to perform a given...

docs.docker.com

https://bakyeono.net/post/2016-05-02-rest-api-client-for-cli.html

 

커맨드라인 환경에서 REST API (HTTP) 요청 보내기 (cURL, resty, httpie, Vim REST Control) | 박연오

 

bakyeono.net

https://docs.docker.com/engine/api/v1.40/#operation/ContainerCreate

 

Docker Engine API v1.40 Reference

 

docs.docker.com

https://www.lesstif.com/pages/viewpage.action?pageId=14745703

 

curl 설치 및 사용법 - HTTP GET/POST, REST API 연계등

curl 은 command line 용 data transfer tool 이다. download/upload 모두 가능하며 HTTP/HTTPS/FTP/LDAP/SCP/TELNET/SMTP/POP3 등 주요한 프로토콜을 지원하며 Linux/Unix 계열 및 Windows 등 주요한 OS 에서 구동되므로

www.lesstif.com