- 작성시간 : 2020/06/22 18:56
- 퍼머링크 : mcchae.egloos.com/11361047
- 덧글수 : 0
오랫만에 글을 올립니다.
이번에는 같이 일을 하고 있는 동료가 요청한 내용인데
필요에 따라 도커 이미지를 미리 다 만들어 놓은 상태에서
컨테이너를 새롭게 더 띄우거나 하는 것을 외부에서가 아니라
내부 컨테이너에서 해야 하는 필요가 생겼습니다.
해당 내용을 리서치하고 우분투 서버 20.04에서
테스트해 보았습니다.
다음은 그 내용입니다.
우선 결론적으로 다음과 같은 docker-compose.yaml 을 만들었습니다.
version: "3.1"
services:
my-service:
image: python:3.8-buster
container_name: pydocker
environment:
- DOCKER_HOST=tcp://docker-socket-proxy:2375
command: sleep 10000
docker-socket-proxy:
image: tecnativa/docker-socket-proxy
environment:
- AUTH=1
- POST=1
- SECRETS=1
- IMAGES=1
- SERVICES=1
- TASKS=1
- NODES=1
- CONTAINERS=1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
위의 내용 중에서 docker-socket-proxy 라는 컨테이너가 외부 호스트의 중계 역할을
하는 것입니다.
tecnativa/docker-socket-proxy 에 들어가면,
보안에 따라 여러 기능으로 동작을 제어할 수 있습니다.
일반적으로 바로 이용하게 되면 내부 컨테이너 중에서 마음대로
외부 docker를 조종하여 문제가 발생할 소지가 크기 때문에
그 부분을 많이 신경써야 하지만 다 인지하고 있다고 가정합니다.
위에서 my-service는 pydocker 라는 컨테이너 이름으로 실행되고
python docker SDK 를 이용하여 호스트의 docker를 구동시켜 보려 합니다.
나중에 ubuntu 이미지가 필요한데
미리 설치해 놓습니다.
docker pull ubuntu
그 다음,
docker-compose up -d
으로 컨테이너를 돌리고,
다음의 명령으로 pydocker 컨테이너에 접속해서 테스트해 봅니다.
docker exec -it pydocker bash
와 같이 pydocker 컨테이너에 bash를 띄워,
pip install docker
로 docker SDK를 설치하고,
python
을 구동시켜,
>>> import docker
>>> client = docker.from_env()
>>> client.containers.run("ubuntu", "echo hello world")
'hello world\n'
위와 같이 테스트 해 보면 잘 되는 것을 알 수 있었습니다.
필요에 따라 pydocker를 원하는 파이썬 Backend 동작을 하도록 하고,
해당 내용으로 이미지를 만들어 이용하면 될 것 같습니다.
어느 분께는 도움이 되셨기를 ..
덧글