Docker란?

이상우·2021년 10월 15일
0

Docker(도커)

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 로컬 저장소, 클라우드 서버(Azure, AWS)에서도 실행이 가능하다.

컨테이너(Container)

대부분의 소프트웨어는 실행을 위해 OS(운영체제)와 소프트웨어가 사용하는 동적 라이브러리에 대하여 의존성을 가진다. 즉 소프트웨어를 실행하기 위해선 OS와 라이브러리가 필요로 하는 파일로 구성된 실행환경이 필요한데, 하나의 시스템 위에서 둘 이상의 소프트웨어를 동시에 실행하려고 하면 문제가 발생할 수 있다. 1)A,B가 동일한 라이브러리를 사용하지만, 다른버전을 필요로 하는 경우. 2)두 소프트웨어의 운영체제가 다른 경우 등. 이런 문제들을 해결하기 위해선 각 실행환경을 독립성을 확보해주면 되는데, 그것이 컨테이너이다. 컨테이너는 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술이다. 컨테이너를 가상머신(VM)과 비슷한 역할을 한다. 하지만 VM은 하드웨어 스택을 가상화하며, 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시한다. 그러므로 컨테이너가 1)훨씬 가볍고, 2)운영체제 커널을 공유하며, 3)시작이 훨씬 빠르며, 4)운영체제 전체 부팅보다 메모리를 훨씬 적게 차지한다.

이미지(image)

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것이다. 즉 컨테이너는 이미지를 실행한 상태라고 볼 수 있다. 같은 이미지에 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않고 그대로 남아있다. 도커는 이미지를 만들기 위해 Dockerfile이라는 파일 자체언어를 이용하여 이미지 생성 과정을 적는다. 아래 예시를 보자.
Dockerfile 예시)

Dockerfile 기본 명령어
1.FROM
베이스 이미지를 지정한다. 반드시 지정해야 하며 어떤 이미지도 베이스 이미지가 될 수 있다. 위에 사진은 python:3-8-alpine 리눅스를 사용한다는 것
2.COPY
파일이나 디렉토리를 이미지로 복사한다. 일반적으로 소스를 복사하는 데 사용하는데, target디렉토리가 없다면 자동으로 생성. 위에 . /app 두 부분으로 되어있는데 .은 현재 디렉토리 /app은 컨테이너의 디렉토리이다.
3.WORKERDIR
컨테이너에서 명령어가 실행되는 디렉토리이다. 앞에서 /app에 소스코드를 COPY했기 때문에 /app에서 명령어를 실행한다.
4.RUN
컨테이너를 구성할 파일을 만들 떄 사용한다. 위에서는 flask라이브러리를 설치하고 app.py의 권한을 바꿔주는 명령이 실행되었다.
5.CMD
도커 컨테이너가 실행된 후 실행되는 명령어. 빌드 할 때는 실행되지 않으며 여러 개의 CMD가 존재할 경우 가장 마지막 CMD만 실행된다. 위에서는 app.py를 실행하여 flask app을 실행한다.

출처

https://aws.amazon.com/ko/docker/ - AWS/Docker란 무엇입니까?
https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker%EC%A0%95%EB%A6%AC/ - [Docker 개념정리 및 사용방법]

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글