가상화
디스크 이미지가 hypervisor에 의존
가상화가 등장한 이유
하드웨어 자원에 대한 이용률을 높이기 위해 등장
하나의 image로 여러 컨테이너를 생성 가능(사진에서의 nginx)
docker inspect container id 로 ip 확인
원본이 수정되는 것이 아닌 원본을 복사 후 수정(cow, copy on write)
readonly image, readwrite image 여러 개의 이미지를 하나의 디렉토리로 마운트하여(union mount, union filesystem) 읽기 전용 이미지와 읽기/쓰기가 가능한 이미지를 동시에 사용
container가 삭제될 때 해당 컨테이너의 레이어와 관련된 모든 데이터도 함께 삭제
-d
1. background에서 동작
2. daemon형으로 동작
3. detach 옵션
-it 컨테이너 접속과 동시에 작업, interactive 작업 목적
--rm stop과 동시에 종료
-v 영구적인 volume을 추가해서 쓸 수 있음(컨테이너가 제거되더라도 volume은 남아있음, 동일한 위치에 path를 지정하면 그 데이터를 그대로 쓸 수 있음)

-it옵션을 줘야 터미널이 부여되고 접속과 동시에 대화 형식으로 실행 가능, 주지 않으면 지정된 작업을 한 뒤에 바로 종료

q옵션 container id를 반환, 변수로 사용해 실행 중인 컨테이너를 포함한 모든 컨테이너를 강제로(-f) stop 후 종료
docker run -it --name hello-world ubuntu /bin/bash
이름이 hello-world인 ubuntu 이미지를 pid 1번을 /bin/bash로 하여 interactive하게 실행

ps -ef -forest 리눅스에서 프로세스 상태를 트리 구조로 보여주는 명령어, 프로세스 간의 부모-자식 관계를 쉽게 파악할 수 있음
-e : 모든 프로세스를 보여줌
기본적으로 현재 터미널에서 실행 중인 프로세스만 출력되는데, 이 옵션을 사용하면 시스템의 모든 프로세스가 출력
-f : 전체 형식(full format)으로 출력
UID, PID, PPID, C, STIME, TTY, TIME, CMD 등의 정보를 포함
--forest : 프로세스 간의 부모-자식 관계를 트리 형태로 보여줌
트리 구조로 프로세스의 계층 관계를 시각화
컨테이너들은 host의 커널을 공유
commit을 사용하면 휘발성 데이터를 이미지로 백업
백업한 이미지를 가지고 다시 컨테이너를 run할 수 있음(수정한 fileset을 그대로 쓸 수 있음)
커스텀 방식
1. 베이스 이미지를 그대로 올려 수정한 다음 커밋
2. 수정한 작업에 대해 script로 작성된 원본 명세서를 가지고 있을 때(dockerfile) 이미지 빌드를 자동화 가능, push를 사용하여 이미지 저장소에 업로드 가능
foreground로 동작

docker가 시작될 때 실행됨, cmd구문이 여러번 올 수는 없지만 entrypoint 구문과 각각 한번씩 사용 가능
시작하는 옵션을 바꾸는 용도로 사용
cmd vs entry
cmd 뒤의 string이 명령을 대체 가능
entry 뒤의 string이 entry문의 전체 argument로 넘어감