당니의 개발자 스토리

2/11 본문

LG CNS/필기노트

2/11

clainy 2025. 3. 25. 03:08

도커

도커 이미지는 "사진"처럼 생각할 수 있지만, 실제로는 조금 다른 개념이에요.
그럼 이제 도커 이미지와 도커 API 서버를 좀 더 쉽게 설명해볼게요.

도커 이미지

우리가 일반적으로 '이미지'라고 하면, 사진처럼 어떤 것을 나타내는 시각적인 정보가 떠오르죠?
하지만 도커 이미지에서는 "프로그램을 실행할 수 있도록 필요한 모든 정보와 설정이 들어 있는 파일"이라고 생각하면 더 쉽게 이해할 수 있어요.
간단히 말해서, 도커 이미지는 프로그램을 실행하기 위한 준비물이에요.

예를 들어 볼게요.
여러분이 "웹 서버"를 실행하고 싶다고 가정해 볼게요.
웹 서버를 실행하려면 필요한 소프트웨어(예: Apache나 Nginx)와 그 설정들이 있어야 해요.
그런데 그걸 매번 새로 설치하고 설정하려면 시간이 많이 걸리고 귀찮겠죠?
그때 도커 이미지를 사용하면, 이미 웹 서버 소프트웨어와 설정이 다 들어 있는 "웹 서버 도커 이미지"를 다운받아서 바로 실행할 수 있어요.
도커 이미지는 그런 식으로 "필요한 것들이 미리 다 들어 있는 템플릿"이라고 보면 됩니다.
이 이미지를 가지고 도커 컨테이너를 실행할 수 있어요.

도커 API 서버

도커 API 서버는 조금 더 복잡할 수 있지만, 쉽게 설명할게요.
도커는 주로 명령줄에서 사용하지만, 때때로 다른 프로그램이나 시스템에서도 도커를 제어해야 할 때가 있어요.
예를 들어, 도커를 사용해서 다른 소프트웨어와 통합하고 싶을 때, 도커가 제공하는 API를 사용해요.

API는 '응용 프로그램 인터페이스'라는 뜻으로, 다른 프로그램이 도커와 소통할 수 있게 해주는 일종의 "통로"예요.
쉽게 말해, 도커 API 서버는 도커와 다른 프로그램이 대화할 수 있도록 해주는 중간 다리 역할을 해요.

예를 들어, 여러분이 웹 애플리케이션을 만들고 있는데, 이 애플리케이션에서 도커를 사용해서 컨테이너를 자동으로 실행하고 싶다고 해볼게요.
그때 애플리케이션은 도커 API를 통해 도커에 명령을 보내고, 도커는 그 명령을 받아서 실제로 컨테이너를 실행하는 거예요.

즉, 도커 API 서버는 도커를 프로그램적으로 제어할 수 있게 해주는 시스템이에요.
도커 명령어를 직접 입력하지 않고, 다른 프로그램이 도커와 소통할 수 있도록 도와주는 역할을 합니다.

이제 조금 더 이해가 되셨을까요?
도커 이미지는 실행할 준비가 된 프로그램 덩어리라고 보면 되고, 도커 API 서버는 다른 시스템이 도커를 제어할 수 있게 해주는 "대화 통로"라고 이해하시면 돼요!

웹 서버와 localhost의 차이

"웹 서버"는 인터넷을 통해 웹 페이지나 서비스를 제공하는 서버를 말해요.
웹 서버는 우리가 웹 사이트에 접속할 때, 웹 브라우저를 통해 요청한 페이지를 보내주는 역할을 해요. 예를 들어, 우리가 www.google.com에 접속하면, 구글의 웹 서버가 해당 페이지를 보내주는 거죠.

그리고 localhost는 "내 컴퓨터"를 의미하는 주소예요.
웹 서버를 로컬에서 테스트할 때, "localhost"나 "127.0.0.1"을 주소로 사용해요.
즉, 웹 서버가 내 컴퓨터에서 동작하는 경우에 "localhost"를 사용할 수 있어요.
하지만 도커를 사용할 때, 도커 컨테이너 안에서 웹 서버를 실행할 수도 있고, 이때도 "localhost"와 비슷한 개념을 사용할 수 있어요.
다만, 도커 컨테이너는 서로 독립적으로 실행되기 때문에, 컨테이너 안에서만 접근할 수 있는 "로컬" 주소가 따로 있을 수 있어요. 그래서 컨테이너를 외부에서 접근할 수 있게 해주려면 포트 매핑을 설정해야 할 수 있습니다.

"컨테이너를 자동으로 실행한다는 것"의 의미

여기서 "컨테이너를 자동으로 실행한다"는 말은, 말 그대로 도커 컨테이너를 자동으로 만들고 실행한다는 뜻이에요.
웹 애플리케이션을 개발할 때, 애플리케이션이 도커를 사용해서 컨테이너를 자동으로 실행하도록 설정할 수 있어요.
예를 들어, 애플리케이션이 시작될 때마다 특정 웹 서버를 실행하려면, 도커 컨테이너 안에서 웹 서버를 실행하는 작업이 자동으로 이루어져야 해요.

애플리케이션은 도커 API를 통해 도커에게 "웹 서버를 실행해"라는 명령을 보낼 수 있어요.
이 명령을 받은 도커는 해당 웹 서버가 실행되는 도커 컨테이너를 만들고, 그 안에서 웹 서버를 실행하게 됩니다.

도커 명령어와 도커 API 서버

"도커 명령어를 직접 입력할 수 없다"는 부분은 사실 조금 다른 개념이에요.
도커는 기본적으로 명령어를 통해 작업을 실행하는 방식이죠. 예를 들어, docker run 명령어로 컨테이너를 실행할 수 있어요.
하지만 우리가 "도커 API 서버"를 사용하는 이유는, 자동화된 시스템이나 다른 애플리케이션이 도커를 제어해야 할 때 도커 명령어를 직접 입력하는 대신, API를 통해 제어할 수 있기 때문이에요.

즉, 도커 명령어를 직접 입력하는 대신, 다른 프로그램(예: 웹 애플리케이션)이 도커 API 서버와 통신하면서 명령을 보내고 도커가 그 명령을 처리해요.
따라서, 도커 명령어를 "직접" 입력하는 방식 대신, 애플리케이션이 도커 API를 통해 명령을 보내는 방식으로 자동화가 이루어지는 거죠.

결국, 도커 API 서버를 사용하면 애플리케이션이 도커를 자동으로 제어할 수 있고,
사용자는 명령어를 직접 입력하지 않아도 된다는 점이 특징이에요.

그래서 결론적으로는 도커 명령어를 직접 입력하는 것이 아니라, 애플리케이션이 도커 API를 통해 명령을 보내고 도커가 이를 처리하는 방식이죠.

이해가 좀 더 쉬워졌나요? 추가적인 질문이 있으면 언제든지 물어보세요!

127.0.0.1은 내 컴퓨터의 IP 주소인가?

네, 맞아요!
127.0.0.1은 로컬호스트(localhost)라고 불리는 주소로, 자신의 컴퓨터를 가리킵니다.
즉, 127.0.0.1로 접속하면 자기 자신에게 접속하는 거예요.
이 주소는 외부 네트워크와 상관없이, 내 컴퓨터에서만 유효합니다.
웹 서버나 애플리케이션을 로컬에서 테스트할 때 흔히 사용돼요.

도커 컨테이너는 웹 서버를 실행하는 애야?

도커 컨테이너는 실행 환경이에요.
도커 컨테이너 자체는 '웹 서버'가 아니고, 웹 서버를 실행하는 환경을 제공하는 것이죠.
즉, 도커 컨테이너 안에서 웹 서버를 실행할 수 있는 프로그램을 넣고 실행시키는 거예요.

예를 들어, 도커 이미지에 웹 서버를 실행할 수 있도록 미리 준비된 소프트웨어들이 들어 있다고 가정해볼게요.
이 이미지를 기반으로 도커 컨테이너를 만들면, 그 컨테이너 안에서 웹 서버가 동작하게 됩니다.
컨테이너는 독립적인 환경이라, 웹 서버가 다른 프로그램이나 설정과 충돌 없이 격리된 상태에서 실행돼요.
따라서, 도커 컨테이너는 웹 서버 같은 애플리케이션을 실행하는 환경을 제공하는 역할을 합니다.

도커 명령어를 입력할 때 API 서버를 거쳐야 하는지?

사용자가 직접 도커 명령어를 입력하면 도커 API 서버를 거쳐야 하느냐?에 대한 질문인데요.

결론적으로는 직접 도커 명령어를 입력할 때는 도커 CLI가 도커 API를 사용합니다.
도커 명령어를 입력하면, 그 명령은 도커 CLI를 통해 도커 API로 전달되고, 도커 API가 이를 처리해서 실제로 작업을 실행하게 돼요.

즉, 도커 CLI는 사용자와 도커 데몬 사이에서 다리 역할을 하며, 실제로 명령을 보내고 처리하는 건 도커 API입니다.
하지만 우리가 도커 CLI를 사용할 때는 API 서버를 신경 쓸 필요가 없습니다.
우리는 그냥 도커 명령어를 입력하면 되는데, 그 명령어는 내부적으로 API를 통해 처리되는 거죠.

다시 말하면

  • 도커 CLI는 우리가 사용하는 명령줄 인터페이스입니다. 여기서 명령을 입력하면,
  • 도커 API 서버가 실제로 그 명령을 받아서 도커 데몬(백엔드)에게 전달하고, 도커 데몬이 작업을 실행해요.

그래서 도커 명령어를 입력할 때 직접 API 서버를 거친다고 느끼지 못해도, 사실은 도커 CLI가 도커 API를 사용해서 명령을 처리하는 구조입니다.

조금 더 쉽게 말하자면, 우리가 도커 명령어를 직접 CLI에 입력해도, 그 뒤에서는 자동으로 도커 API가 연관되어 작업을 처리하는 시스템이에요.

 

 

도커 이미지를 실행하면 도커 컨테이너가 나옴

 

도커 컨테이너에서 생성된 데이터들을 도커 볼륨이라고 한다.

 

도커 네트워크는 컨테이너들이 여러개 떴을 때 컨테이너들끼리 서로 통신 하기 위해서 제공하는 네트워크

 

이런것들을 도커 데몬이 만들고 관리할 수있게 해줌.

 

도커 데몬은 도커의 핵심 역할을 해요. 컴퓨터에서 도커 컨테이너를 만들고 관리하는 일을 맡고 있어요.
마치 도커를 사용해서 여러 작업을 수행할 수 있도록 돕는 관리자 같다고 생각하면 돼요.
도커 데몬은 백그라운드에서 계속 실행되며, 사용자가 요청하는 작업을 처리합니다.

 

도커 이미지 저장소를 registry 라고 한다.

도커 이미지를 통해서 컨테이너를 생성할 수 있는데, 다른 서버에서 동일한 컨테이너를 생성하려면 도커 이미지를 받아야 할거다.

 

그런데 배포할 서비들이 많아지게 되면, 더이상 1:1로 전달하는 것은 무리다.

그래서 이렇게 중간에다가 이미지를 등록할 수 있는 registry를 통해서 이미지들을 끌고와서 다른 서버에서도 동일한 컨테이너를 실행할 수 있는 것이다.

 

왼쪽에서 이미지를 만드는 과정을 build

이 build된 이미지를 registry를 거쳐서 운영할 서버에 배포하는 것을 ship 한다고 한다.

그리고 해당 운영 서버에서 실행하는 것을 run 한다고 한다.

이게 도커 이미지의 라이프 사이클이다.

 

이 registy는 깃허브하고 똑같다. 

 

 

 

도커 이미지를 만드는 방법은 3가지가 있다.

1번을 가장 권장한다.

 

위의 명령어들을 docker help로 확인할 수 있다.

 

내가 여기서 container와 관련된 명령어를 알고싶다고 하면,

이렇게 하면 된다.

여기서 참고해라.

 

 

docker buildx build를 가장 권장함(최신버전)

-> 이걸 쓰면 다양한 아키텍처 별 이미지를 쉽게 만들 수 있다.

 

'LG CNS > 필기노트' 카테고리의 다른 글

1/24  (0) 2025.03.06
프로젝트  (0) 2025.02.27
문제  (0) 2025.02.19
1/9  (0) 2025.01.09
리액트 컴포넌트 만들기 실습  (0) 2025.01.09