도커가 깔려 있지 않은 컴퓨터에서도 도커를 이용할 수 있다.
어떻게? 외부에서 접속해서!
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 -H 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 -H 0.0.0.0:2375 ps # 불가 $ docker -H localhost ps # 불가 $ docker -H 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/
도커 데몬 TCP 설정:: https://docs.docker.com/engine/reference/commandline/dockerd/
외부에서 명령 내리는 예시:: https://docs.docker.com/develop/sdk/examples/
https://bakyeono.net/post/2016-05-02-rest-api-client-for-cli.html
https://docs.docker.com/engine/api/v1.40/#operation/ContainerCreate
https://www.lesstif.com/pages/viewpage.action?pageId=14745703
'Study > linux' 카테고리의 다른 글
디렉토리에서 가장 최근 파일의 이름 바꾸기 (0) | 2019.10.13 |
---|---|
jmeter cli로 실행 시 각종 파라미터 넘기기(ip, thread, port 등) (0) | 2019.10.09 |
[Error] 도커에서 mpirun실행시 errno=1 에러 (0) | 2019.10.04 |
하이퍼쓰레드 켜고 끄기 (0) | 2019.10.04 |
LiveCD를 이용해서 루트 디렉토리 fsck 실행하기 (0) | 2019.10.03 |