앱을 도커 컨테이너로 만드는 순서를 하나씩 해보겠습니다. Dockerfile을 만들어보고 도커파일에 어떤 내용이 들어가는지 알아봅시다. 그리고 컨테이너화 하는 명령어도 익혀보도록 합시다.
1. 앱 준비하기
첫 번째로 컨테이너화 할 앱을 준비해야 합니다. 컨테이너에 집어넣을 프로그램은 어떠한 애플리케이션이든 상관없습니다. 컨테이너 만들기 연습에 집중하고 싶다면 github에 올라와있는 공개돼있는 소스를 가져오셔도 됩니다.
이번 연습에서 사용할 앱은 express로 웹 프로젝트를 만든 상태입니다. 파일구성은 프로그램의 엔트리파일인 app.js와 패키지 파일인 package.json, package-lock.json 이렇게 3개의 파일로 이루어져 있습니다.
app.js의 내용은 아래와 같습니다. 단순히 express 서버를 포트3000번으로 실행하게 되고, 리퀘스트가 왔을 시 텍스트 한 줄을 보내게 됩니다.
서버를 실행해서 브라우저에서 보면 아래와 같은 화면입니다.
앱 준비가 끝났습니다.
2. Dockerfile 만들기
다음 순서는 도커 파일 만들기 입니다. 우선 Dockerfile 이란 파일명으로 파일을 만듭니다. Dockerfile은 txt와 같은 확장자가 없는 파일입니다.
Dockerfile에 기술하는 내용은 기본적으로 일련의 빌드 지침입니다. 즉 Docker가 앱과 앱의 종속성을 컨테이너 이미지로 빌드하기 위해 따라야 하는 단계입니다. Dockerfile에 있는 지침에 따라서 모든 컨테이너 이미지는 앱 코드와 종속성이 깔끔하게 패키징 되어 공유하고 실행할 수 있게 됩니다. 아래와 같이 기술해 주었습니다.
* Dockerfile 파일 내용 알아보기
FROM node:current-alpine
> 이 앱은 Linux 기반의 node.js 앱이므로 current-alpine 이미지를 가져와 빌드를 시작한다고 설정하였습니다. 이것은 실제로 node가 사전에 설치된 특수 컨테이너 이미지를 가져온다는 것을 의미합니다. 우리는 이 미미지를 기초 또는 맨 아래 레이어로 사용하여 그 위에 다른 모든 것을 구축할 것입니다. 참고로 커널을 포함한 모든 것을 갖춘 완전한 Linux 배포판은 아닙니다. 폴더 및 장치 파일 등과 같은 파일 시스템 구성 집합에 가깝습니다. 왜냐하면 모든 컨터이너가 실행 중일 때 실행 중인 호스트의 커널을 사용하므로 컨터이너 자체가 자체 커널과 함께 패키지로 제공할 필요가 없기 때문입니다.
RUN mkdir -p /usr/src/app
> 이 줄은 이미지에서 usr/src/app 이라는 새 디렉터리를 만든다는 뜻입니다.
COPY . /usr/src/app
> 만들어진 폴더에 앱 코드를 복사하고 있습니다. 마침표(.)는 빌드 명령을 실행할 때마다 모든 파일과 하위 디렉토리를 의미합니다.
WORK /usr/src/app
> 앱을 설치한 위치로 작업 디렉토리를 설정하고 있습니다.
RUN npm install
> 이 줄은 package.json에 나열된 앱 종속성을 설치하라고 지시하고 있습니다.
ENTRYPOINT ["node", "app.js"]
> 이미지에서 컨테이너가 시작될 때마다 실행되는 명령입니다. 예제에서는 기본 앱 파일의 이름으로 node를 호출하고 있습니다.
3. 이미지 빌드하기
이미지를 빌드하는 명령은 docker image 혹은 docker build입니다.
docker build -t docker-test .
-t 옵션으로 태그명을 줄 수 있고 이 태그명으로 사람이 이미지를 쉽게 구별할 수 있게 해 줍니다. 마침표(.)는 Docker가 현재 디렉터리에서 실행되어야 한다는 걸 알려줍니다.
정상적으로 빌드가 되었습니다. 콘솔에 출력된 내용을 보면 Doker가 Dockerfile의 지침에 따라 명령을 수행한 걸 확인해 볼 수 있습니다.
4. 이미지 확인하기
docker image ls 명령어로 이미지의 리스트를 확인해 볼 수 있습니다.
이번에 다룰 내용은 이미지 빌드까지 입니다.
docker run -dp 3000:3000 docker-test 명령어로 컨테이너를 시작할 수 있지만 더 자세한 내용은 다음 포스트에서 다루도록 하겠습니다.
여기까지 읽어주셔서 감사합니다.
'Container > Docker' 카테고리의 다른 글
[Docker] 컨테이너 조회, 시작, 정지, 삭제, 컨테이너 터미널 연결 하기 (0) | 2022.03.31 |
---|---|
[Docker] 이미지와 컨테이너 차이, 컨테이너 기동 하기 (0) | 2022.03.30 |
[Docker] docker hub 컨테이너 등록하기 (0) | 2022.03.29 |
[Docker] 로컬 pc에 Docker Desktop 설치 하기(feat 리눅스 커널 업데이트) (0) | 2022.03.27 |
[Docker] 컨테이너 란? vm과 차이점 (0) | 2022.03.25 |
최근댓글