레이블이 Docker인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Docker인 게시물을 표시합니다. 모든 게시물 표시

20150417

Docker 1.5 실전 배포 시작

Docker 1.5가 나온지 좀 됐고, IPv6 지원이랑 stats 명령 생긴게 눈에 띔. 이번 사내 배치 작업 하나 Docker로 넘겨봄. 기록.

앱은 파이썬 스크립트 하나 + 관련 패키지. Dockerfile 대충:

FROM python:2.7-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "worker.py"]

빌드 → private registry push → 서버에서 pull 해서 docker run -d. 기존 방식 대비 배포 절차가 간결해진거는 좋음.

근데 실사용하면서 걸린 것들.

1. 로그. docker logs 로 stdout 볼 수 있지만 파일로 남기려면 별도 수집 필요. 우리는 --log-driver=syslog 로 syslog에 쏨. rsyslog에서 파일로 저장하는 구조.

2. 네트워크. 호스트 모드 --net=host 쓰면 편한데 포트 충돌나면 빡침. bridge 모드 + -p 로 명시. link는 deprecated 느낌이라 피함.

3. 볼륨. -v /host/path:/container/path. 로그, 데이터 디렉토리는 반드시 호스트에 마운트. 컨테이너 날리면 같이 날아가니까.

4. 이미지 빌드 캐시. requirements.txt 먼저 복사하고 pip install, 그 다음에 소스 복사. 이렇게 해야 코드만 바뀐 경우 pip install 단계가 캐시 히트함. 알려진 팁이지만 매번 까먹음.

5. cleanup. 오래된 이미지랑 stopped 컨테이너가 계속 쌓임. cron으로 docker rm $(docker ps -aq -f status=exited)docker rmi $(docker images -f dangling=true -q) 돌림.

서비스 서버 이관은 아직. 배치만 일단. 서비스는 여러 컨테이너 orchestration 필요한데 fig(→compose) 찍먹만 해봄. 다음에 정리.