코드의 지속적인 통합으로 자동화된 **빌드**와 자동화된 **테스트**를 제공
**배포**를 자동화하여 배포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공
Docker를 통해 서버를 표준화하고 같은 환경에서 테스트 및 배포 테스트를 진행하고 이 과정을 자동화한다. 즉, CI/CD가 진행된다.

도커를 사용하는 이유는 여러 애플리케이션과의 독립성과 확장성이 높은 점 등 가상화에서 사실상 표준의 위치이다.
Windows로 도커를 이용하기 위해서는 WSL2, Ubuntu 22.04, Docker Dosktop의 설치가 필요하다.
WSL2 설치
wsl --install
#배포 이미지 서비스 및 관리도구 기능 사용하도록 설정
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --update
Ubuntu 22.04 에 최신 버전의 docker 설치
# docker engine gpg 키 등록
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg //권한변경
# apt source 에 docker 관련 추가 (5줄이 한개짜리임)
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# docker engine 설치
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin docker-compose
# docker 그룹에 현재 계정을 등록하여 sudo 없이 docker 명령을 사용하게 함
sudo usermod -aG docker user
sudo service docker restart
#exit 입력후 터미널을 닫고 새로운 터미널을 열고 확인
docker version
docker-compose --version #도커 컴포즈 버전도 확인
도커 컨테이너 서비스를 위한 도커 이미지는 Container 런타임에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고, 변형되는 상태값을 보유하지 않고(stateless), 불변성(immutable)의 값이며 이미지는 계층구조이다. 필요한 파일만 포함하고 있기 때문에 용량이 작으며, 이미지를 변경할 필요가 있을 때는 새로운 이미지의 생성이 필요하다.

docker hub에 있는 이미지를 다운로드하여 container에서 실행한다.
DockerFile을 통해 이미지를 만든다. 빌드 후 이 이미지를 도커 hub(registry)에 업로드할 수도 있으며 혹은 푸시하지 않고 자신의 머신에서 실행 가능하다.
Container는 Image를 실행한 상태로, 1개의 Image로 부터 N개의 Container를 생성할 수 있는 1:N의 관계이며, 도커 컨테이너는 하나의 프로세스로 볼 수 있다. (ps -ef | grep 으로 확인 가능)

도커 컨테이너 관련 명령어
docker pull ubuntu:22.04
docker images
# docker 컨테이너 생성
docker create -ti --name ubuntu2204test ubuntu:22.04
docker ps –a
docker start ubuntu2204test
docker attach ubuntu2204test
# docker run 은 create/start/attach 를 순차적으로 한 번에 실행하는 것과 같음
docker run -ti --name=ubuntu2204test2 ubuntu:22.04 /bin/bash
# 컨테이너에서 실행 중인 프로세스 조회
docker top node-test
# 컨테이너에 매핑된 포트 조회
docker port node-test
# 실행중인 앱의 로그확인. 뒤에 -a 추가시 모든 앱의 로그 확인
docker logs node-test
# 컨테이너 내부 확인
docker inspect node-test
# 터미널1, 도커 상태 확인
docker stats
# 터미널2, 도커 프로세스 이벤트 확인
docker events
# 터미널3, docker start
docker stop node-test
docker start node-test
# 일시증지 / 일시증지 취소
docker pause node-test
docker unpause node-test
# 종료된 컨테이너를 삭제
docker container prune