호돌찌의 AI 연구소
article thumbnail

이번 시간에는 docker image란 무엇인지, dockerfile를 사용해서 docker image를 만들어 보는 시간 가지겠습니다. 

docker image는 어떤 application에 대해 단순히 코드뿐만 아니라, 그 application과 dependent한 모든 것을 함께 패키징한 데이터라고 생각하시는 것이 좋습니다. 예를 들면 sklearn에서 svm classification fit 함수를 돌린 코드 만을 뜻하는 것이 아니라 사용한 파이썬 버전, sklearn, pandas, numpy 버전까지 명시된 모든 것을 생각하시면 됩니다. 

 

이러한 docker image를 쉽게 공유하기 위해서는 dockerfile이라는 것이 있습니다. 쉽게 사용자가 docker image를 쉽게 만들 수 있도록 제공하는 템플릿이라고 생각하면 됩니다. 

 

1. Dockerfile

1) Dockerfile 만들기

$ cd $HOME
$ mkdir docker-practice 
$ cd docker-practice
$ touch Dockerfile 

 

2) 기본 명령어

모든 사용법을 자세히 알아야할 필요는 없지만, 필요한 경우에 구글링할 수 있을 정도면 충분합니다. 

(아래에 예시로 작성되는 것은 shell이 아닌 docker임을 유의해주세요!)

 

- FROM  : dockerfile이 base image로 어떠한 이미지를 사용할 것인지를 명시하는 명령어 입니다. 즉 처음부터 low level부터 만드는 것이 아니라고 생각하시면 됩니다. (FROM <image>[:<tag>] [AS <name>])

FROM ubuntu:18.04

 

- COPY : <src>의 파일 혹은 디렉토리를 <dest> 경로(destination)에 복사하는 명령어 입니다. (COPY <src>... <dest>)

COPY a.txt /some-directory/b.txt
COPY my-directory /some-directory-2

 

- RUN : 명시한 커맨드를 도커 컨테이너에서 실행하는 것을 명시하는 명령어 입니다. (RUN <command>)

RUN pip install torch
RUN pip install -r requirements.txt

 

- CMD : 명시한 커맨드를 도커 컨테이너가 시작함과 동시에 실행하는 것을 명시하는 명령어 입니다. (CMD <command>)

    - 비슷한 역할을 하는 명령어로 ENTRYPOINT 가 있지만 생략하겠습니다. (구글링 해보기)

- 하나의 Docker Image에서는 하나의 CMD 만 실행할 수 있다는 점에서 RUN 명령어와 다릅니다. 

CMD python main.py
CMD

 

- WORKDIR : 이후 작성될 명령어를 컨테이너 내의 어떤 디렉토리에서 수행될 것인지 명시하는 명령어 입니다. 해당 디렉토리가 없다면 생성합니다. (WORKDIR /path/to/workdir)

WORKDIR /home/demo

 

- ENV : 컨테이너 내부에서 지속적으로 사용될 environment variable의 값을 설정하는 명령어입니다. 타임존이나 인코딩, 패스워드, port 넘버 등을 설정하는데 주로 사용합니다. (ENV <key> <value>)

RUN locale-gen ko_KR.UTF-8
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8

 

- EXPOSE : 컨테이너에서 뚫어줄 port/protocol을 지정할 수 있습니다. protocol을 지정하지 않는다면 TCP가 default로 설정됩니다. (EXPOSE <port> 또는 EXPOSE <port>/<protocol>)

EXPOSE 8080

 

 

 

 

 

 

3) Dockerfile 작성해보기 

vi dockerfile 혹은 vscode, pycharm 등 본인이 사용하는 편집기로 dockerfile을 열어 다음과 같이 작성해줍니다. (저는 vi 를 이용하였습니다.) 

 

 

FROM ubuntu:18.04 

RUN apt-get update

# DOCKER CONTAINER 가 시작될 때, "Hello Hoyoung" 를 출력합니다.
CMD ["echo", "Hello Hoyoung"]

 

 

2. Docker build from Dockerfile

docker build 명령어로 Dockerfile로부터 Docker Image를 만들어봅니다. 방금 빌드한 my-image:v1.0.0 이미지로 docker 컨테이너를 run 해보겠습니다. 아래 명령어는 마지막의 "." 부분은 현재 경로에 있는 dockerfile로 부터 "my-image"라는 이름과 v1.0.0 이라는 태그로 이미지를 빌드하겠다는 뜻 입니다. 

 

$ docker build -t my-image:v1.0.0 .

방금 빌드한 my-image:v1.0.0 이미지로 docker 컨테이너를 run을 아래와 같이하면 "Hello Hoyoung"이 출력이 되는 것을 확인할 수 있습니다. 

 

 

 

살짝 겉핡기 식으로 docker를 빠르게 훓어보았긴 했습니다만 기초적인 부분은 어느정도 다루었다 볼 수 있겠습니다. 다음 글은 Kubernetes 관련 글로 찾아뵙겠습니다. 감사합니다. 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


 

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!