출처 :
http://blog.naver.com/ktw5724/220899692550
====================
출처 : https://www.facebook.com/groups/korea.docker.user.group/
@김태우 님
공유해주신 글 잘 읽었습니다.
제가 도커로 레일즈환경 구축할때 고민했던 내용이랑 비슷해서 뭔가 기뻤습니다 : )
저도 부족하지만 조금 다른 구성을 했기때문에 내용을 공유합니다.
다른점.
1. aws ecs를 이용한 오토스켈링
문제가 있으셨던거 같은데
저희는 ecs로 오토스켈링 잘쓰고 있습니다..(tokyo region입니다.)
2. 빌드&배포
단점 사례중 빌드속도 문제와 관련있는데
저희는 development환경에서 소스쪽 변경에 의한 빌드 횟수가 많아
소스 빌드와 인프라 빌드를 나눠버렸습니다.
Django는 어떨지 모르겠는데 rails에서 도커 빌드시 매번 bundle install 실행 하는건 어마어마 하게 시간이 걸려서..
그래서 레일즈 소스만 바뀌었을때는 capistrano로 소스만 바꿔치기하는 디플로이 형태를 취했습니다.
플로우는 이하와 같습니다.
capistrano로 소스 갱신 -> bundle install(cache) -> precompile(s3) ->db migrate(매번) -> unicornherder로 SIGNAL보내서 재기동
3. 환경변수 관리
환경변수를 소스에 두는것이 세큐리티상 안좋아서 aws s3에 통합관리하고 도커 기동시 이하와 같은 순으로 실행해서 환경변수를 적용했습니다.
s3에
env_unicorn_development
env_unicorn_staging
env_unicorn_production
환경별 환경변수 일람을 업로드
↓
ecs task definition에서 RAILS_SUB_ENV라는 환경변수에다 개발환경을 정의
↓
컨테너 실행시 aws s3 cp s3://xx/env_unicorn_$RAILS_SUB_ENV /etc/profiled.d/xx -> bash -lc "supervisord unicorn기동”
단점 사례 몇가지 피드백
1. 빌드 속도 느린문제 -> 도커다이어트를 한다. 배포서버 성능을 올린다. or 소스빌드/인프라 빌드를 나눈다.
2. 배포서버 용량문제 -> 배포서버 역할을 circleCI가 하고 있기때문에 용량이슈는 아직 없음.
3. 로그관리
PaperTrail은 안써봐서 잘모르겠습니다만
저희는 오토스켈링 환경에서 로그관리는 대수로 과금되는 형식보단 용량 과금 형식이 나을거 같아서 Logentries라는놈을 써서 로그통합 관리하고 있습니다.(로그내용을 호스트인스턴스랑 볼륨시켜놓고 호스트인스턴스에 에이전트 설치해서 로그수집)
그 외에도 logDriver를 이용해서 로그관리를 해주는법이 있습니다.
Dockerfile에서 수집할 로그를 이하와같이 /dev/stdout으로 날림
RUN ln -sf /dev/stdout /var/log/xx.log
task definition에서 logdriver를 지정해줘서
awslogs나td-agent드라이버가 있었습니다.
단점은 표준출력으로 나오는 로그를 전부 줍기때문에 쓸데없는 로그가 끼는것과
CloudWatchLogs로 로그수집하는거 굉장히 비싸네요..용량이 많으실때는 잘 고려해서 선택할 필요가 있을거 같습니다.
지금 다시 구축한다면 td-agent로 로그 수집 -> s3에보관 ->athena분석 환경으로 갈거 같습니다. : )
'Docker' 카테고리의 다른 글
Docker Network 구조 (0) | 2018.04.22 |
---|---|
[번역]시작하는 이들을 위한 컨테이너, VM, 그리고 도커에 대한 이야기 (0) | 2018.04.22 |
Announcement: Amazon EC2 Container Service is Now Generally Available (0) | 2015.04.16 |
EC2 Container Service – Long-Running Applications, Load Balancing, and More (0) | 2015.04.13 |
[News] 넷플릭스 오픈소스 기술 쓸 땐 컨테이너로 (0) | 2014.11.23 |