도커 이미지와 컨테이너
도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이다.
도커 이미지?
이미지는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념.
이미지는 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.
이미지는 도커 명령어로 받을 수 있다.
도커에서 사용하는 이미지의 이름은 기본적으로 [저장소 이름] / [이미지 이름] : [태그] 형태로 구성된다.
도커 컨테이너?
리눅스 OS부터 아파치 웹서버, MySQL DB, 하둡, 스파크, 스톰 등 다양한 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성된다. 이 독립된 공간이 바로 컨테이너!
일반적으로 도커 컨테이너는 생성될 때 사용된 고커 이미지의 종류에 따른 설정과 파일을 가지므로 도커 이미지에 맞는 목적에 따라 사용한다.
컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 무엇을 하든지 원래 이미지는 영향을 받지 않는다! 또한 생성된 각 컨테이너는 각기 독립된 파일시스템을 제공받으며 호스트와 분리돼 있어서 특정 컨테이너에서 어떤 어플리케이션을 설치하거나 삭제한다해도 다른 컨테이너나 호스트에 영향을 주지 않는다.
컨테이너 생성하기
- 우선 도커 엔진의 버전을 확인
$ docker -v
Docker version 20.10.11, build dea9396
- 첫 번째 컨테이너 생성
docker run 커맨드는 컨테이너를 생성하고 실행하는 역할을 한다. ubuntu:14.04는 컨테이너를 생성하기 위한 이미지의 이름이다.
-i -t 옵션은 컨테이너와 상호 입출력을 가능하게 한다. ( -i 상호입출력, -t tty를 활성화해서 bash 셸 사용 )
$ docker run -i -t ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
// 이미지가 로컬 도커 엔진에 존재하지 않으면 도커 중앙 이미지 저장소인 도커 허브에서 자동으로 내려받음
...... 생략 ........
root@728039103a32:/#
- 컨테이너에서 기본 사용자는 root이고 호스트 이름은 무작위 16진수 해시값이다. 무작위 16진수 해시값은 컨테이너의 고유한 ID의 앞 일부분이다.
root@728039103a32:/# ls
bin boot dev etc home lib lib64 media mnt
opt proc root run sbin srv sys tmp usr var
// 아직 아무것도 설치되지 않은 상태.. (파일 시스템이 독립적이므로)
- 컨테이너를 빠져나오려면 exit를 입력하면된다. 또는 Ctrl + D를 입력한다.
⇒ 빠져나오면서 동시에 컨테이너를 정지시킨다.
⇒ Ctrl +P, Q를 입력하면 컨테이너만 빠져나옴 ( 배시 쉘 종료 X )
root@728039103a32:/# exit
exit
- 호스트에서 컨테이너 생성시 도커 공식 저장소에서 이미지를 내려받기
$ docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
- 이미지를 정상적으로 받았는지 확인하기 도커 엔진에 존재하는 이미지의 목록을 출력
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 4 months ago 204MB
ubuntu 14.04 13b66b487594 9 months ago 197MB