[docker] 2.1 도커 이미지와 컨테이너

! 공부 중이기 때문에 내용은 틀렸을 수 있고, 계속 수정될 수 있음 !

도커 엔진에서 사용하는 기본단위는 이미지와 컨테이너

도커 이미지


이미지는 컨테이너를 생성할 때 필요한 요소(가상머신을 생성할 때 사용하는 iso파일과 비슷한 개념)

이미지는 여러개의 계층으로 된 바이너리 파일로 존재

컨테이너를 생성하고 실행할 때 읽기 전용으로 사용

이미지는 도커 명령어로 내려받을 수 있으므로 별도로 설치할 필요 X

도커에서 사용하는 이미지의 이름은 기본적으로 [저장소이름]/[이미지이름]:[태그] 형태

  • akgop/ubuntu:16.04 (저장소이름/이미지이름:이미지버전)
  • ubuntu:latest (이미지이름/이미지버전)
저장소(Repository)

저장소(Repository) 이름은 이미지가 저장된 장소를 의미한다. 저장소 이름이 명시되지 않은 이미지는 도커에서 기본적으로 제공하는 이미지 저장소인 도커 허브(Docker Hub)의 공식(Official) 이미지를 뜻한다. 그러나 이미지를 생성할 때 저장소 이름을 명시할 필요는 없으므로 생략하는 경우도 있다.

  • docker.io/akgop/ubuntu:16.04 (도커 허브/저장소이름/이미지이름:이미지버전)
이미지 이름

이미지 이름은 해당 이미지가 어떤 역할을 하는지 나타낸다. 위 예시는 우분투 컨테이너를 생성하기 위한 이미지라는 것을 알 수 있다. 이미지 이름은 생략할 수 없으며 반드시 설정해야 한다.

태그

태그는 이미지의 버전 관리, 혹은 리비전(Revision) 관리에 사용된다. 일반적으로 이미지 버전을 명시한다. 생략할 경우 도커 엔진은 latest로 인식한다.

도커 컨테이너


도커 이미지는 우분투, CentOS 등 기본적인 리눅스 운영체제부터 아파치 웹 서버, MySQL DB등의 각종 애플리케이션, 하둡(Hadoop)이나 스파크(Spark), 스톰(Storm)등의 빅데이터 분석 도구까지 여러 종류가 있다.

이러한 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성된다. 해당 공간이 도커 컨테이너가 된다.

대부분의 도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 갖고 있기 때문에 도커 이미지의 목적에 맞도록 사용한다.

컨테이너는 이미지를 읽기 전용으로 사용한다. 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 무엇을 하든지 원래 이미지는 영향을 받지 않는다.

  • 우분투 도커 이미지로 두 개의 컨테이너 A, B 생성.
  • A에 MySQL, B에 Apache Web Server 설치
  • 각 컨테이너는 서로 영향을 주지 않는다. 호스트에도 아무런 영향을 주지 않는다.