Docker - 컨테이너와 호스트

안녕하세요, 기술에 열정을 가진 친구들! Docker 여정을 함께하게 되어 기쁩니다. 여러년간의 경험을 가진 가상의 교사로서, 컨테이너와 호스트의 흥미로운 세계를 안내해 드리겠습니다. 프로그래밍에 처음이라도 걱정하지 마세요 - 기본부터 차근차근 시작하겠습니다. 시작해 보겠습니다!

Docker - Container & Hosts

Docker 이미지

여행을 준비할 때, 필요한 모든 것을 작성한 목록을 만들지 않나요? Docker 이미지도 exactamente lo mismo입니다 - 컨테이너가 실행되기 위해 필요한 모든 것의 블루프린트입니다. 이는 애플리케이션의 코드, 런타임, 라이브러리, 시스템 도구를 포함한 레시피와 같습니다.

첫 번째 Docker 이미지 만들기

"Hello, World!" 애플리케이션을 위한 간단한 Docker 이미지를 만들어 보겠습니다:

# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . /app
CMD ["python", "hello.py"]

이를 해부해 보겠습니다:

  1. FROM python:3.9-slim: "최소한의 Python 3.9 환경을 시작하고 싶다"는 것입니다.
  2. WORKDIR /app: 우리의 작업 공간을 설정합니다, 프로젝트용 새로운 폴더를 만드는 것과 같습니다.
  3. COPY . /app: 우리의 로컬 파일을 컨테이너로 복사합니다.
  4. CMD ["python", "hello.py"]: 컨테이너를 시작할 때 실행할 명령어입니다.

이 이미지를 빌드하려면 다음과 같이 실행합니다:

docker build -t my-hello-world .

컨테이너 실행

이제 우리의 이미지가 준비되었으니, 그것을 생명을 불어넣읍시다! 컨테이너를 실행하는 것은 애플리케이션이 미리 로드된 가상 컴퓨터를 시작하는 것과 같습니다.

기본 컨테이너 실행

docker run my-hello-world

이 명령어는 my-hello-world 이미지를 기반으로 컨테이너를 시작하고 hello.py 스크립트를 실행합니다.

인터랙티브 모드

occasionally, 당신은 컨테이너와 상호작용하고 싶을 수 있습니다. 컨테이너 내에서 터미널을 직접 엽니다:

docker run -it my-hello-world /bin/bash

-it 플래그는 컨테이너를 인터랙티브로 만들고, /bin/bash는 bash 셸을 시작합니다.

모든 컨테이너 목록

Docker를 사용하면서 여러 개의 컨테이너를 생성할 것입니다. 그들을 관리하는 것은 중요합니다. 이는 컴퓨터에서 현재 실행 중인 애플리케이션을 확인하는 것과 같습니다.

docker ps

이 명령어는 실행 중인 모든 컨테이너를 보여줍니다. 중지된 컨테이너 포함하여 모든 컨테이너를 보려면:

docker ps -a

docker ps 옵션의 표입니다:

옵션 설명
-a, --all 모든 컨테이너 보이기 (기본적으로 실행 중인 것만 보임)
-q, --quiet 컨테이너 ID만 표시
-s, --size 총 파일 크기 표시
--format Go 템플릿을 사용하여 컨테이너를 예쁘게 출력

컨테이너 중지

컨테이너를 사용完毕하면, 컴퓨터에서 애플리케이션을 닫는 것과 같이 중지할 수 있습니다.

부드러운 중지

docker stop <container_id>

이 명령어는 SIGTERM 신호를 보내어 컨테이너가 부드럽게 중지될 수 있게 합니다.

강제 중지

docker kill <container_id>

이는 애플리케이션을 강제로 종료하는 것과 같습니다. docker stop이 작동하지 않을 때 사용합니다.

컨테이너 제거

컨테이너를 중지한 후, 완전히 제거하고 싶을 수 있습니다:

docker rm <container_id>

Pro tip: 중지하고 제거를 한 명령어으로 결합할 수 있습니다:

docker rm -f <container_id>

결론

축하합니다! Docker 컨테이너와 호스트의 세계로 첫 걸음을 냈습니다. Docker를 사용하는 것은 작은 전문 컴퓨터 무리를 관리하는 것과 같습니다. 각 컨테이너는 자체적인 환경으로, 어느 시스템에서도 일관성 있게 애플리케이션을 실행할 준비가 되어 있습니다.

마무리하며, 재미있는 비유를 하나 드리겠습니다: Docker 컨테이너는 음식 트럭과 같습니다. 각 트럭(컨테이너)은 자신의 특제(애플리케이션)를 만들고 서빙하기 위해 필요한 모든 것을 갖추고 있습니다. 이 트럭들을 쉽게 이동시키거나 시작하고, 필요에 따라 접근할 수 있습니다.

다음 강의에서는 Docker 네트워킹과 데이터 지속성에 대해 더 깊이 탐구하겠습니다. 그때까지, 즐겁게 컨테이너화하세요!

Credits: Image by storyset