Docker - 컨테이너와 호스트
안녕하세요, 기술에 열정을 가진 친구들! Docker 여정을 함께하게 되어 기쁩니다. 여러년간의 경험을 가진 가상의 교사로서, 컨테이너와 호스트의 흥미로운 세계를 안내해 드리겠습니다. 프로그래밍에 처음이라도 걱정하지 마세요 - 기본부터 차근차근 시작하겠습니다. 시작해 보겠습니다!
Docker 이미지
여행을 준비할 때, 필요한 모든 것을 작성한 목록을 만들지 않나요? Docker 이미지도 exactamente lo mismo입니다 - 컨테이너가 실행되기 위해 필요한 모든 것의 블루프린트입니다. 이는 애플리케이션의 코드, 런타임, 라이브러리, 시스템 도구를 포함한 레시피와 같습니다.
첫 번째 Docker 이미지 만들기
"Hello, World!" 애플리케이션을 위한 간단한 Docker 이미지를 만들어 보겠습니다:
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . /app
CMD ["python", "hello.py"]
이를 해부해 보겠습니다:
-
FROM python:3.9-slim
: "최소한의 Python 3.9 환경을 시작하고 싶다"는 것입니다. -
WORKDIR /app
: 우리의 작업 공간을 설정합니다, 프로젝트용 새로운 폴더를 만드는 것과 같습니다. -
COPY . /app
: 우리의 로컬 파일을 컨테이너로 복사합니다. -
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