본문 바로가기

DevOps & Infra/Docker

[Infrastructure/Docker] 튜토리얼 살펴보기#001. 이미지와 컨테이너

튜토리얼 컨테이너 생성 및 실행

이전 포스트에서 MacOS에서 도커 데스크탑을 설치하고, 튜토리얼 컨테이너를 생성 및 실행하였습니다. 튜토리얼 컨테이너가 아직 생성되지 않았거나, 실행이 중단된 경우 터미널에서 다음 명령문을 입력합니다.

$ docker run -d -p 80:80 docker/getting-started

튜토리얼 컨테이너가 정상적으로 실행되면, http://localhost/tutorial/에서 튜토리얼에 대한 웹 페이지를 확인 할 수 있습니다.

튜토리얼에 앞서 우리가 방금 실행한 명령문부터 살펴볼까요? 우선, 명령문의 시작인 docker는 도커의 API를 호출하는 것을 의미합니다. 이어지는 옵션의 내용은 다음과 같습니다.

  • -d
    컨테이너를 데몬에서 실행합니다(Detached mode).
  • -p 80:80
    컨테이너를 실행하는 호스트의 80번 포트를 컨테이너의 80번 포트와 맵핑합니다.
  • docker/getting-started
    컨테이너에 실행되는 이미지 이름을 지정합니다.

도커 이미지와 컨테이너

도커의 이미지(Image)는 우리가 개발한 소프트웨어 실행에 필요한 모든 리소스-소스 코드, 라이브러리, 라이브러리, 의존성, 실행 파일 등을 모두 포함합니다. 이미지는 컨테이너가 실행하는 유닛이며, 하나의 이미지를 사용하여 여러 개의 컨테이너를 실행시킬 수 있습니다. 이미지는 도커 파일(Dockerfile)에 의해 생성됩니다. 일단 생성된 이미지는 더 이상 변경되지 않는 불변(Immutable) 상태입니다. 이미지는 가상 머신의 이미지에 비해 훨씬 가볍고, 이로인해 도커 허브(Docker hub)에서 이미지를 공유하고 버전 관리하는 것이 가능합니다.

로컬 머신에서 관리하는 이미지는 도커 데스크탑에서 Images 탭에서 확인 할 수 있습니다.

도커의 컨테이너는 이미지를 실행하는 유닛입니다. 도커의 컨테이너는 컨테이너가 실행되는 호스트 OS의 리소스를 공유하여 사용합니다. 컨테이너가 추가되고, 삭제되는 것은 이미지의 생성과 삭제와 별개로 동작하기 때문에 탄력적/동적으로 컨테이너를 관리하는 것이 가능합니다. 컨테이너는 호스트에서 동작하는 모든 프로세스로부터 독립된 프로세스입니다(리눅스의 커널 네임스페이스와 cgroup을 기반으로 동작합니다).

로컬 머신에서 관리하는 컨테이너는 도커 데스크탑에서 Containers/Apps 탭에서 확인 할 수 있습니다.