Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속
적인 통합과 지속적인 제공을 의미
어플리케이션을 컨테이너로 격리하여 어디에서든 일관된 환경에서 실행할 수 있도록 해주는 PaaS 서비스이다.

위 그림과 같이 도커는 클라이언트 - 서버 형식의 아키텍처로 구성되어 있다.
Client:
Docker Host:
Docker Registry
이미지를 기반으로 만들어진 실행 가능한 인스턴스이다.
컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지이다.
컨테이너를 활용하여 운영체제를 가상화하여 소프트웨어를 어떠한 환경에서도 실행할 수 있다.

이미지는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변 파일이다.
즉, 어플리케이션 실행 환경을 만드는 것
이미지는 템플릿일 뿐이기 때문에 읽기 전용으로, 실행하거나 쓰기 작업이 불가하다.
이미지의 초기 상태를 변경하고 기존 상태를 저장할 때마다 추가 레이어가 있는 새 템플릿을 만드는 방식으로 하나의 베이스 이미지에서 이미지를 무제한으로 생성할 수 있다.

Image는 내가 만들고 싶은 붕어빵의 정보를 갖고 있는 틀이라면, Container는 구워낸 붕어빵
애플리케이션 개발과 배포가 편해진다.
여러 애플리케이션의 독립성과 확장성이 높아져요.
Docker가 가상화에서 사실상 표준의 위치이다.
유튜버 코딩 애플의 말을 빌려서 사용하면 Image는 밀키트라고 생각하면 편하다.

위 이미지와 같이 우리가 배포하려는 웹 서버의 환경, 소스코드, 라이브러리, DB, OS 등을 미리 image에 세팅해두고 AWS EC2같은 서버에 이미지만 보내면 된다.
또한 협업시에도 유용한게 이 이미지를 생성해두고 팀원들과 공유하게 되면 완전히 동일한 환경에서 개발을 할 수 있다.
컨테이너는 Image 밀키트로 조리한 요리.
즉 Image에 설정된 환경으로 실행되는 가상 컴퓨터라고 생각하면 편하다.
예를 들어서 아래와 같은 항목을 포함하는 Image를 빌드했다고 가정해보자.
docker run {imageName}:{tag}
```shell
# docker [image] pull [options] name:[tag]
# 최초에는 docker.io가 default registry로 설정됨.
docker pull debian[:latest]
docker pull library/debian:10
docker pull docker.io/library/debian:10
docker pull index/docker.io/library/debian:10
docker pull nginx:latest
docker pull postgres:latest
# private registry 나 클라우드 저장소의 이미지를 받는 경우
docker pull 192.168.0.101:5000/debian:10 # 현재는 실제로 동작하지 않음
docker pull gcr.io/google-samples/hello-app:1.0
docker pull ubuntu:22.04
docker images
# docker create 은 실제 실행하지 않고 컨테이너 생성만
docker create –ti --name ubuntu2204test ubuntu:22.04
docker ps –a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ccc1b2a1144 ubuntu:22.04 "/bin/bash" 4 seconds ago Created ubuntu2204test
docker start ubuntu2204test
Ubuntu2204test
docker attach ubuntu2204test
# docker run 은 create/start/attach 를 순차적으로 한 번에 실행하는 것과 같음
docker run -ti --name=ubuntu2204test2 ubuntu:22.04 /bin/bash
root@57a1a1c759b6:/#
docker run -ti --name=ubuntu2204test3 ubuntu:22.04 /bin/bash
root@1cd125b32870:/#
# 터미널을 한 개 더 열고
ps -ef | grep ubuntu2204test3
user 9710 7637 0 17:17 pts/4 00:00:00 docker run -ti --name=ubuntu2204test3 ubuntu:22.04 /bin/bash
user 9921 9377 0 17:17 pts/5 00:00:00 grep --color=auto ubuntu2204test3