Docker 이미지와 컨테이너의 차이, 실행 상태까지 구분하기

페이지 정보

profile_image
작성자 관리자
댓글 0건 조회 84회 작성일 26-09-12 17:17

본문

Docker를 처음 접하면 이미지를 받았다는 말과 컨테이너를 실행했다는 말을 혼동하기 쉽습니다. 이미지는 애플리케이션 실행에 필요한 파일과 설정을 배포할 수 있게 묶은 기반입니다.

컨테이너는 이미지를 바탕으로 만들어 관리하는 실행 단위로 이해할 수 있습니다. 이미지를 보유하고 있다고 애플리케이션이 이미 실행 중인 것은 아닙니다.

무엇을 내려받았고 무엇을 실행했는지 구분하는 것이 출발점입니다.

Docker 이미지와 컨테이너의 차이, 실행 상태까지 구분하기 주제를 설명하는 삽화

AI 생성 삽화 · Docker 이미지와 컨테이너의 차이, 실행 상태까지 구분하기 관련 설명용 이미지입니다.

핵심 정리
이미지는 실행에 필요한 파일과 설정을 묶은 기반이고, 컨테이너는 그 기반으로 만든 실행 단위입니다.


1. 이미지는 실행 환경의 재료를 담습니다

이미지에는 프로그램, 라이브러리, 실행에 필요한 파일과 설정 정보가 포함될 수 있습니다. Docker 문서는 이미지를 변경 불가능한 구성물로 설명하며, 변경이 필요하면 새 이미지를 만들거나 그 위에 변경을 더하는 방식으로 다룹니다.

여러 레이어로 구성된다는 점도 중요한 특징입니다. 팀에서 같은 이미지를 사용하면 실행 환경을 맞추는 데 도움이 되지만 외부 설정이나 연결 서비스까지 자동으로 동일해지는 것은 아닙니다.

개념을 메모할 때는 이미지 칸에는 배포할 파일의 묶음을, 컨테이너 칸에는 그 묶음으로 만든 개별 실행 환경을 적어봅니다. 같은 실습 이미지를 두 번 사용해도 생성한 컨테이너의 이름이나 실행 설정은 다를 수 있습니다.

따라서 팀원이 같은 이미지를 받았다고 말하면 이미지 확인은 끝났지만 실행 설정 확인은 남았다고 이해할 수 있습니다. 프로그램 버전만 맞추고 접속할 데이터베이스 주소를 다르게 넣은 상황을 떠올리면 구분이 쉬워집니다.

이 예시는 재현 조건을 정리하는 방법이며 같은 이미지가 모든 환경 차이를 없앤다는 뜻은 아닙니다.


2. 컨테이너에는 상태가 생깁니다

컨테이너를 만들고 시작하면 지정된 프로그램이 실행됩니다. 실행 중, 정지됨 같은 상태를 확인할 수 있으며 같은 이미지로 여러 컨테이너를 만들 수도 있습니다.

하나를 중지했다고 이미지 자체가 사라지는 것은 아닙니다. 이미지 목록과 컨테이너 목록을 따로 보는 이유가 여기에 있습니다.

문제를 설명할 때도 이미지 이름뿐 아니라 어떤 컨테이너에서 어떤 동작을 했는지 함께 적어야 상황을 구분하기 쉽습니다.

정지와 삭제를 다른 동작으로 기록하는 습관도 필요합니다. 컨테이너가 정지됐다는 것은 그 안의 주된 실행이 멈춘 상태이며, 객체 자체가 제거됐다는 뜻과는 다릅니다.

Docker 문서의 기본 안내에서는 실행 중인 목록과 정지된 것을 포함한 목록을 구분해 보여줍니다. 목록 화면이 비어 있을 때도 어떤 조건으로 목록을 보고 있는지 먼저 확인해야 합니다.

실습 기록에는 생성, 시작, 정지, 제거 중 무엇을 했는지 남기고, 다른 사람이 같은 이름의 컨테이너를 다시 만들었을 가능성도 확인합니다.


3. 가상머신과 완전히 같은 개념은 아닙니다

가상머신은 별도의 운영체제와 커널을 포함하는 방식으로 설명할 수 있습니다. 컨테이너는 격리된 프로세스와 필요한 파일을 다루며 같은 커널을 공유하는 구성이 기본 개념입니다.

다만 실제 제품 환경에서는 가상머신 위에 컨테이너가 실행되기도 합니다. 따라서 화면에 컨테이너가 보인다는 이유로 가상화 계층이 전혀 없다고 단정하지 않습니다.

개념상의 구분과 사용 중인 환경의 구성을 함께 봐야 합니다.

가상머신과 비교할 때는 그림을 두 단계로 그려보면 좋습니다. 먼저 프로세스가 사용하는 커널과 격리 경계를 표시하고, 그다음 실제 실행 중인 호스트 환경을 적습니다.

개념 설명에서 커널을 공유한다고 배웠더라도 사용 중인 데스크톱 환경에 별도의 가상화 계층이 있을 수 있습니다. 발표 자료에 컨테이너와 가상머신을 무조건 양자택일처럼 표현하면 실제 구성을 설명하기 어렵습니다.

무엇을 격리하려는지와 운영 환경을 어느 계층에서 제공하는지를 나누어 말하는 연습이 도움이 됩니다.


4. 실행과 외부 접속도 구분합니다

웹 서버 컨테이너가 실행 중이어도 호스트에서 바로 접속할 수 있는지는 네트워크 설정을 확인해야 합니다. Docker의 포트 게시 기능은 호스트의 포트와 컨테이너의 포트를 연결하는 데 사용됩니다.

애플리케이션이 사용하는 포트와 사용자가 브라우저에서 접근하는 포트가 다를 수 있습니다. 포트 공개는 접근 범위와 관련되므로 예시 명령을 그대로 적용하기보다 필요한 인터페이스와 접근 조건을 확인하는 편이 좋습니다.

접속 주소를 적을 때는 호스트 쪽 주소와 포트, 컨테이너 안의 애플리케이션 포트를 따로 적습니다. 예를 들어 호스트의 8080 포트를 내부 80 포트에 연결한 구성이라면 브라우저가 접근하는 쪽과 프로그램이 기다리는 쪽이 다릅니다.

이 숫자는 포트 대응을 설명하는 예시일 뿐 모든 애플리케이션의 기본값은 아닙니다. Dockerfile의 EXPOSE 표시는 포트 사용 정보를 나타내며 그것만으로 호스트 포트가 게시되는 것은 아닙니다.

실제 실행 시의 포트 설정과 애플리케이션 상태를 함께 확인해야 접속 조건을 설명할 수 있습니다.


5. 한 서비스의 문제를 단계로 나눠 봅니다

예를 들어 이미지 내려받기는 끝났지만 웹 화면이 보이지 않는 상황을 생각해 볼 수 있습니다. 먼저 컨테이너가 만들어졌는지, 실행 상태인지, 프로그램이 오류로 종료됐는지 확인합니다.

다음으로 로그와 포트 설정을 살핍니다. 이미지가 있다는 사실만 반복 확인하면 실행 단계의 문제를 놓칠 수 있습니다.

이 예시는 진단 순서를 설명하기 위한 것이며 특정 제품의 장애 원인을 단정하는 절차는 아닙니다.

장애 메모를 작성하는 연습에서는 성공한 단계와 아직 확인하지 못한 단계를 분리합니다. '이미지 받기 성공, 컨테이너 생성 확인, 실행 직후 종료, 로그 확인 전'처럼 적으면 다음에 무엇을 확인할지 보입니다.

실행 상태가 유지되는데 웹 화면이 안 보이는 경우라면 같은 문장을 복사하지 말고 관찰 결과에 맞춰 바꿉니다. 로그를 공유할 때에는 실행 시점과 컨테이너 식별자를 포함하되 비밀값은 제외합니다.

확인한 사실과 추정한 원인을 나누어 적으면 근거 없이 이미지를 다시 받는 행동을 반복하는 일을 줄일 수 있습니다.


6. 데이터와 설정의 위치를 따로 기록합니다

컨테이너를 다시 만들 계획이라면 애플리케이션 데이터와 설정이 어디에 저장되는지 확인해야 합니다. 이미지 안의 파일과 실행 중 생긴 파일, 외부에 연결한 저장 공간을 같은 것으로 취급하지 않습니다.

실습에서는 중요하지 않았던 차이가 실제 서비스에서는 데이터 보존 문제로 이어질 수 있습니다. 삭제나 재생성을 시도하기 전에 현재 데이터의 저장 방식과 백업 여부를 확인하는 습관이 필요합니다.


7. 설명할 때 네 가지를 함께 적습니다

실행 문제를 질문할 때는 사용한 이미지, 컨테이너 상태, 실행 설정, 관찰한 결과를 구분해 적습니다. 기대한 화면과 실제 오류가 무엇인지도 기록합니다.

이미지와 컨테이너의 차이를 이해하면 설치 문제, 실행 문제, 접속 문제를 나누어 볼 수 있습니다. 단순히 “Docker가 안 됩니다”라고 설명하는 대신 어느 단계까지 성공했는지 말할 수 있게 되는 것이 이 개념을 배우는 실용적인 이유입니다.


8. 자주 묻는 질문

Q1. 이미지를 받으면 프로그램이 바로 실행된 것인가요?

이미지를 확보한 것과 컨테이너가 실행 중인 것은 별개입니다. 컨테이너가 생성됐는지와 현재 상태를 확인하고, 실행 직후 종료됐다면 해당 컨테이너의 로그와 실행 설정을 살펴봅니다.

Q2. 컨테이너를 지워도 데이터는 모두 남나요?

저장 위치에 따라 다릅니다. 컨테이너의 쓰기 가능한 레이어에만 있던 데이터와 외부 볼륨 등에 저장한 데이터는 수명이 다르므로, 제거 전에 마운트 구성과 보존할 데이터의 위치를 확인합니다.

Q3. 이미지가 같은데 팀원과 결과가 다를 수 있나요?

환경 변수, 연결 서비스, 저장 공간과 네트워크 설정 등이 다르면 결과가 달라질 수 있습니다. 이미지 외에 실행 설정과 실제 관찰 결과를 함께 비교해야 재현에 필요한 조건을 찾기 쉽습니다.

Q4. 컨테이너가 실행 중이면 웹 접속도 정상인가요?

실행 상태만으로 웹 요청의 성공을 보장하지는 않습니다. 애플리케이션의 상태와 사용하는 포트, 호스트 쪽 게시 설정을 구분해 확인하고 어느 단계가 성공했는지 기록합니다.


참고 자료

댓글목록

등록된 댓글이 없습니다.