네이버 인턴 기간 중 GPU를 동적으로 할당해 모델을 돌리기 위해서 NSMLC3DL이라는 플랫폼을 이용하는 중이다. 백엔드 베이스가 거의 없다시피 한 상태에서 입사 후 환경 구축을 하느라 애를 먹었지만, 좋은 멘토분들 덕에 많은 도움을 받으며 도커를 포함한 백엔드 작업을 할 수 있었다.

로컬에서 개발한 모델을 플랫폼 위에서 돌리기 위해서는 내가 필요로 하는 딥러닝 프레임워크가 맞게 서버에 올라가있어야 하는데 docker image에 대한 지식이 자연스레 늘게 되더라. 인턴기간 초중반까지도 이러한 환경 구축에 많은 노력을 기울이다보니 어느새 이미지를 만들고 배포하는 작업이 익숙해졌다. 도커의 개념, 작동방식에 대해서는 이미 수많은 블로그들에서 정리가 잘 되어있으니 본 글에서는 자주 사용하는 명령어들만 정리해본다.

Docker CheatSheet

빠른 개발을 위해 참고할 수 있는 자주 사용하는 명령어 모음을 페이지 맨 앞에 정리해놓았다. 더 많은 명령어들이 있으니 없으면 맨 아래 레퍼런스로 달아놓은 잘 정리된 블로그들 참고.

자주 사용하는 명령어 요약

$ docker build # image 생성
$ docker images [OPTIONS] # image 목록 확인
$ docker pull [OPTIONS] # image 내려받기(pull)
$ docker rmi # image 제거

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # container 실행
$ docker ps [OPTIONS] # container 목록 확인 (-a 붙여야 모든 목록 확인)
$ docker exec [OPTIONS] CONATINER # container 명령어 실행
$ docker logs [OPTIONS] CONTAINER # container 로그 확인
$ docker attach [OPTIONS] CONTAINER # container 접속
$ docker stop # container 중지
$ docker restart [OPTIONS] CONTAINER # container 재시작
$ docker rm # continaer 제거

$ docker commit A A_image # image로 container 생성(commit)
$ docker image tag IMAGE_NAME NEW_IMAGE_NAME:TAG # image tag 달기
$ docker login
$ docker push USERNAME/IMAGE:TAG # image를 올리기(push)
  • docker run options
      -d : detached mode (백그라운드에서 실행)
      -p : host와 container의 포트를 연결 (포워딩)
      -v : host와 container의 디렉토리를 연결 (마운트)
      -e : container 내에서 사용할 환경변수 설정
      --name : container 이름 설정
      --it : -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 (container 표준 입력과 local 키보드 입력을 연결)
      --rm : 프로세스 종료시 컨테이너 자동 제거
      --link : 컨테이너 연결 [컨테이너 명:별칭]
    

Dockerfile 명령어

FROM
MAINTAINER
COPY
ADD
RUN
CMD
WORKDIR
EXPOSE
VOLUME
ENV
  • docker build -f [Dockerfile.pip 경로] -t [만들 IMAGE 이름] 으로 Image 생성

Dockerfile.pip 예시

# 1. ubuntu 설치 (패키지 업데이트 + 만든사람 표시)
FROM       ubuntu:16.04
MAINTAINER youngjae.j99@gmail.com
RUN        apt-get -y update

# 2-1. Package 설치
RUN apt-get install [PackageName]

# 2-2. Python module 설치
RUN sudo apt-get update
RUN pip install [ModuleName]

# 3. 소스 복사
COPY . /usr/src/app

# 4. 패키지 설치 (실행 디렉토리 설정)
WORKDIR /usr/src/app
RUN     bundle install

# 5. 실행 
CMD  ~

Reference

Comments