handling kolla conatainers remotely with pycharm docker tools


목표

the goal

이런 화면을 만들어 보자.
is to make an environment like this:

과정

Procedures

가상머신 쪽 설정

virtual machine side setting

기본 개념은 docker daemon과 tcp연결이다. unix socket 연결을 default로 하지만, tcp socket으로 연결 할 수도 있다.

the basic concept is using tcp connection with dockerd whose default setting is unix socket file.

reference:
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option

Windows나 Mac이라면, 다음과 같은 설정 화면도 있다.
if you are a PC or Mac user, you can expose tcp connection with setting dialog.

여기에서는 암호화 없이 사용하지만, 실제로는 보안을 위해 암호화 설정이 필요하다. 다음 레퍼런스를 참조.
though I'm using it without TLS settings, you would need TLS setting for security actually.

reference
https://success.docker.com/article/how-do-i-set-the-docker-daemon-options
https://qiita.com/matyapiro31/items/cf5f436c40a6f77227c3
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

이건 내가 실행한 명령.
this is what i did

# listen using the default unix socket, and on 2 specific IP addresses on this host.

$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://150.95.32.xxx

kolla-ansible이 설치된 virtual machine centos에서 실행한_화면.
and this is the result.

이렇게 소켓연결을 할 수 있게 설정하면, 연결이 허용된 외부 머신에서 다음과 같은 커맨드가 가능하다.

how you can use docker client from a remote machine like this:

docker -H tcp://kolla-machine:2375 ps

Pycharm 쪽 설정

pycharm side setting

jetbrains.com reference

'Docker for Windows' 설치부터 시작한다.
from installing 'Docker for Windows'

나는 dockerd는 사용하지 않을 것이기 때문에 Cancel을 선택한다.

choose 'Cancel' if you want to use docker client only.

set DOCKER_HOST=<kolla-ansible vm>:2375

horizon container의 /var/lib/kolla 를 windows 의 C:\horizon-container-var-lib\kolla 에 복사했다.

use docker cp command to copy from horizon:/var/lib/kolla to C:\horizon-container-var-lib\kolla

프로젝트를 만들고,
made a pycharm project,

프로젝트 설정에서 다음과 같은 Docker 설정이 가능하다.
set Docker connection

pycharm에서는 다음과 같이 remote interpreter설정이 가능하다.
and docker remote interpreter.

서비스는 또 horizon을 선택했다.
chose horizon service

OK를 누르면 다음과 같이 연결을 시도한다.
pressed OK and it tried connection.

그 다음 path mapping
next step, path mapping

local horizon container code path:
c:/miniconda3/envs/openstackclient/projects/horizon/horizon

docker horizon container code path:
/var/lib/kolla/venv/lib/python2.7/site-packages/horizon

remote interpreter connection success screen

docker container안에 있는 package도 읽어 온다.

docker panel이 보이고, 패키지 정보를 파싱하기 시작한다.
as docker panel is shown, and parsing packages started

파싱이 완료되면, CentOS의 Docker 서버의 내용을 이렇게 remote로 볼 수 있다.
when parsing finished, I can see docker server information remotely like this:

container의 프롬프트에 직접 연결할 수도 있다. container를 선택하고 popup 메뉴에서 Exec를 선택하면 /bin/bash를 실행할 수도 있다.

you can open container prompt by click 'Exec' of container's context menu

that's it.