이 글은 [2024 NEW] 개발자를 위한 쉬운 도커 강의를 듣고 작성한 글입니다! 모든 강의자료 이미지 출처는 해당 강사님께 있습니다.
메타데이터
메타데이터는 데이터에 대한 데이터를 의미한다. 이미지가 실세로 압축된 데이터라면 메타데이터는 이 이미지에 대한 정보를 기술하는 데이터이다. 하나의 이미지는 실제로 압축된 파일과 파일의 정보가 저장되어 있는 메타데이터로 구성되어 있다.
Env와 Cmd
이미지의 메타데이터에서 유심히 봐야 할 부분이 Env와 Cmd 필드이다. Env는 소프트웨어가 실행 시 참조할 설정 정보이다. Env는 Key와 Value로 이루어져 있다. (ex. VERSION=1.23.2) Env에는 버전 정보, 파일 경로와 같은 값이 저장되어 있다. 이 값이 바뀌면 이미지의 실행 방법이 달라진다. Cmd는 컨테이너를 실행 시 프로세스 실행 명령어를 지정하는 것이다. 이미지를 컨테이너로 실행할 때, Cmd에 있는 명령을 통해 어떤 프로그램을 실행할 지를 메타데이터에서 결정하는 것이다.
메타데이터는 컨테이너를 실행할 때 새로운 값으로 덮어쓰기 할 수 있다.
이미지와 컨테이너의 메타데이터를 보고 메타데이터를 덮어쓰는 실습을 진행해 보겠다.
실습 명령어
docker image inspect 이미지명 : 이미지의 세부 정보 조회
docker container inspect 컨테이너명 : 컨테이너의 세부 정보 조회
docker run 이미지명 (실행명령) : 컨테이너 실행 시 메타데이터의 Cmd 덮어쓰기
docker run --env KEY=VALUE 이미지명 : 컨테이너 실행 시 메타데이터의 Env 덮어쓰기
Cmd 덮어쓰기
docker image inspect nginx 명령어를 입력해 nginx 이미지의 세부 정보를 조회한다.
Cmd 필드의 내용이 합쳐져 nginx -g daemon off 명령어가 만들어지는 것이다.
docker run -d --name defaultCmd nginx 명령어로 defaultCmd 라는 컨테이너의 이름으로 nginx 이미지를 실행시킨다. 그 후, docker ps 명령어로 실행이 잘 되었는지 확인할 수 있고, docker container inspect defaultCmd 로 defaultCmd 컨테이너의 세부 정보를 확인할 수 있다.
동일한 Env와 Cmd를 확인할 수 있다. 이미지의 메타데이터에 있는 Env 필드와 Cmd 필드를 그대로 복사해서 가져온 것이다.
cat 명령어는 리눅스에서 제공되는 기본 명령어 중 하나이다. 사용법은 cat 파일경로 이며, 파일의 내용을 출력한다.
docker run --name customCmd nginx cat usr/share/nginx/html/index.html 명령어로 Cmd를 덮어씌운 customCmd 컨테이너를 생성하고 실행한다. 그럼 해당 경로의 파일 내용이 출력되는 것을 볼 수 있다.
docker container inspect customCmd 로 customCmd 컨테이너의 메타데이터를 확인할 수 있다. Cmd 필드의 값이 바뀌어 있는 것을 확인할 수 있다.
참고로, docker ps를 입력하면 customCmd는 보이지 않는다.
cat은 일회성 명령어라서 cat 명령이 끝나는 순간 컨테이너도 함께 종료되기 때문이다.
종료된 컨테이너도 확인하기 위해 docker ps -a 명령어를 입력하면 다음과 같이 보인다.
실습한 과정은 다음과 같다.
컨테이너는 이미지의 데이터를 복사해서 만들어지기 때문에 컨테이너의 메타데이터를 변경해 실행한다고 해서 이미지의 메타데이터가 변경되는 것은 아니다. 즉, 실행 시점에 컨테이너의 메타데이터만 변경할 수 있다.
Env 덮어쓰기
실습에 사용될 envnodecolorapp 어플리케이션은 사용자에게 특정 색상의 웹 페이지를 응답해준다. 컨테이너를 실행할 때 어떤 설정을 하느냐에 따라 다른 색의 글씨를 출력한다.
docker pull devwikirepo/envnodecolorapp 으로 이미지를 다운로드 한다.
docker image inspect devwikirepo/envnodecolorapp 으로 이미지의 메타데이터를 확인해 본다.
Env에 COLOR 값이 red로 지정되어 있는 것을 볼 수 있다.
다음 명령어로 기본 이미지의 메타데이터를 사용해 컨테이너를 실행한다. 로컬의 8080 포트로 실행한다.
docker run -d -p 8080:3000 --name defaultColorApp devwikirepo/envnodecolorapp
이번에는 env의 COLOR 값을 blue로 바꾸어 이미지를 실행한다. 로컬의 8081 포트로 실행한다.
docker run -d -p 8081:3000 --name blueColorApp --env COLOR=blue devwikirepo/envnodecolorapp
docker container inspect blueColorApp 명령어로 blueColorApp 컨테이너의 env COLOR가 blue인 것을 확인할 수 있다.
localhost:8080으로 접속하면 빨간색 글씨가, localhost:8081로 접속하면 파란색으로 작성된 페이지가 보인다.
실습한 과정은 다음과 같다.
-d 에 관하여
백그라운드에서 컨테이너를 실행할 수 있게 해준다.
-d 옵션을 작성하는 경우는 지속적으로 실행되는 데몬 프로그램을 실행할 때이다.
-d 옵션을 작성하지 않는 경우는 실행 후 종료되는 프로그램일 경우, 실시간으로 로그를 확인할 경우 사용한다.