프로그래밍/study log

[docker] docker 개념 및 이미지 생성

good programmer 2021. 4. 29. 00:50

docker란?

리눅스 컨테이너를 만들고 사용할 수 있는 컨테이너화 기술. (리눅스 컨테이너 = 운영체제 수준에서 가상화를 실시하여, os커널을 공유. 가상 머신에 비해 훨씬 가볍다는 장점을 가진다)

컨테이너의 대략적인 구조

도커의 장점

 

1. 모듈성

2. 계층 및 이미지 버전 제어

3. 롤백

4. 배포 용이

 

도커 이미지 생성 방법

 

컨테이너화 하려는 디렉토리 안에 Dockerfile 파일을 작성한다.  

github.com/yoshino0705/Driver_Behavior_Recognition

 

yoshino0705/Driver_Behavior_Recognition

Contribute to yoshino0705/Driver_Behavior_Recognition development by creating an account on GitHub.

github.com

아래 코드는 위 레포지토리를 도커 이미지로 만드는데 사용된 Dockerfile이다.

FROM python:3.7
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
EXPOSE 80
CMD ["python","evaluation.py"]

FROM : 이미지 생성시에 사용할 기반 이미지. 해당 예제에서는 python 3.7버전을 사용하였다.

WORKDIR : 작업 디렉토리 지정. 해당 디렉토리를 기준으로 뒤에 나오는 명령어들이 작동한다.

ADD : 파일을 이미지에 추가. 위 예제에서 현재 디렉토리에 있는 모든 파일들을 WORKDIR로 지정해둔 디렉토리에 추가하는 작업을 실행.

RUN : 이미지 생성시에 실행하는 코드. python package 관리에 사용되는 requirements.txt를 사용해 필요한 package들을 설치하도록 작성

EXPOSE : 해당 도커 이미지를 어떤 포트를 통해 외부에 공개할 것인지 명시. 

CMD : dockerfile에서 단 한번만 사용가능한 명령. 위 예시처럼 CMD [실행파일,"매개변수1","매개변수2",,,]와 같이 작성하면 셸 스크립트 문법과 관련된 문자를 그대로 실행 파일에 넘겨줄 수 있다.

위와 같이 Dockerfile을 작성한 뒤 

$sudo docker build --tag docker_image_name .

위 명령어를 작성해주면 docker image가 생성됨을 확인 할 수있다.