2017년 8월 3일 목요일

How Should I Get Application Configuration into my Docker Containers?

어떻게 다양한 환경에 배포할 수 있을까?


서버를 다 만들고 배포할 때 지금까지는 동일한 환경에서 배포가 가능했다.
그런데 다른 환경에 배포를 하게 되면서 일부 설정이 틀려져야만 하는 상황이 발생한 것이다.
이 글은 인터넷에서 찾은 블로그 게시물을 간단하게 요약한 것임을 밝힙니다.

원문은 How Should I Get Application Configuration into my Docker Containers? 링크를 통해 확인 가능합니다.


1. 지금까지 해왔던 방법.


   이미지를 만들 때 설정 파일을 같이 포함한다.
   그럼 설정이 달라야 하는 서버에 배포하는 경우엔 어떻게 할까?
   우선 컨테이너를 실행한 뒤, 설정 파일을 변경한 후 컨테이너를 재시작.

   장점:
      ■ 설정 파일을 임의로 변경하지 않는 한 모든 컨테이너는 동일하다.

   단점:
      ■ 설정 변경을 위해 docker image를 새로 빌드하거나 우리의 경우처럼 컨테이너를
         직접 수정해야 한다.


2 - 1. 환경 변수로 전달.


   일반적으로 많이 사용되는 방법.

  
1
docker run -e SETTING1=foo -e SETTING2=bar ... <image name>
cs


   장점:
      ■ 1번 방법에 비해 좀 더 동적인 설정이 가능해진다.

   단점:
      ■ 개발 / 서비스 버전의 컨테이너가 변수에 의해 다른 행동을 할 수 있다.
      ■ nginx/apache의 virtual host configuration과 같이 key/value로 정의하기 어려운
         설정이 존재한다.


2 - 2. 환경 변수로 전달.


   2 - 1 방법과 비슷하지만 컨테이너가 시작될 때 직접 전달하는 방법이 아니라
   Consul 또는 etcd처럼 네트웍을 통해서 KV store설정을 사용하는 방법.
   KV store의 경우 계층적 구조를 가질 수도 있기 때문에 key/value 형태의 단순 환경 변수
   전달에 비해 훨씬 더 많은 것들이 가능해진다.
   심지어 confd 같은 경우 KV store가 변경되면 응용 프로그램을 자동으로 재시작 해준다.

   장점:
      ■ 지금까지 이야기했던 방법 중 제일 동적이고 많은 것들을 할 수 있다.

   단점:
      ■ KV store같은 외부 의존성이 생긴다.


3. Docker Volume을 통해 host 파일을 사용.


   이 방법도 기존에 사용하고 있던 방법.

  
1
docker run -/home/ships/my_statsd_config.conf:/etc/statsd.conf hopsoft/graphite-statsd
cs


   장점:
      ■ 임의의 설정 문제로 컨테이너를 변경할 필요가 없습니다.

   단점:
      ■ 배포시 Docker와 별개로 Host OS에 설정 파일을 배포해야 하고 그런 경우
         Ansible, Chef, 또는 Puppet 같은 관리 도구가 별도로 필요할 수 있습니다.

4. 결론.



   경우에 맞게 설정이 얼마나 복잡하고 동적이어야 하는지에 따라 결정.
   배포는 언제나 문제고 어렵다

댓글 없음:

댓글 쓰기