도커 이미지 (Docker images)
- 응용을 실행하는 데 필요한 모든 파일들과 그것을 실행하는 방법을 한데 묶어 놓은 것
- 상태를 저장하지 않는 (stateless) 방식 - 네트워크로 전송, 레지스트리에 저장, 이름 및 버전 지정 가능
- 계층화되어 있다는 특징을 갖고 있으며, 어떤 이미지로부터 다른 이미지를 만드는 것이 가능
도커 컨테이너 (Docker containers)
- 이미지의 실행 인스턴스
- 하나의 이미지로부터 여러 컨테이너 (인스턴스)를 만들어 동일한 응용을 여러 개 실행할 수 있음(각각은 독립)
- 상태를 저장하는 (stateful)방식 - 컨테이너를 사용하면서 상태를 변경할 수 있음
- 그러나 컨테이너가 소멸하면 이 상태도 잊어버림

도커 이미지를 이용해서 컨테이너를 만들어 실행할 수 있다.
1. 도커 이미지는
- 계층 구조를 가지고 있음
- 컨테이너를 만드는 데 이용되는 거푸집으로서 상태를 저장하고 있지 않음.
- 이미지 레지스트리를 통하여 네트워크를 통해 전송 가능
2. 도커 컨테이너는
- 이미지를 이용하여 만들어진, 응용 소프트웨어를 실제로 실행하는 격리된 환경
- 도커 엔진에 의해서 관리되며 마치 컴퓨터 하나가 새로 생겨서 정해진 일을 수행하는 것과 같은 모습을 보여줌
- 이미지의 실행 인스턴스
- 실행 상태를 유지함
docker images : 내가 어떤 이미지를 가지고 있는지 보여줌.
docker ps : 현재 실행 중인 컨테이너들이 뭐가 있는가를 보고 싶으면.
docker rmi [삭제할 이미지 이름, ID] : 삭제하고 싶은 이미지가 있다면 삭제하는 법, 이미지 이름 말고 id를 넣으면 id로도 삭제 가능
아마 실행을 껐어도 어디서 사용 중이라 라고 하면서 삭제가 안되는 경우가 있음.
그럴때에는 docker ps -a 를 확인해서 컨테이너 id를 확인하고 삭제 요망
만약 컨테이너 id로 삭제하고 싶으면 : docker rm [컨테이너 id]
위의 명령어로 names를 가지고 삭제할 수도 있음 : docker rm [컨테이너 names]
rmi에서 i가 있으면 images를 나타내기에 이미지를 삭제하는 것이고
rm은 컨테이너를 삭제하는 것임.
docker stop [컨테이너 이름/id] : 현재 실행 중인 컨테이너의 실행을 중단, 컨테이너가 없어지지는 않음
이미지 생성 자동화
Docker file
- 계층 구조를 이용하여 도커 이미지를 만드는 절차를 기술하는 파일(텍스트)
- FROM [--platform=]
[AS]
- RUN
- ENTRYPOINT["executable", "param1", "param2"]
- 이미지 빌드 명령어
- docker build [OPTIONS] PATH | URL |
요약 정리
- 도커의 편리함( CI/CD 관점에서 생각해보기)
- 응용을 실행하는 데 이용되는 실제 (물리적) 컴퓨터 환경과 독립적으로 통일된 실행 환경 제공 가능
- 이미지로부터 여러 개의 동일한 컨테이너 인스턴스를 만들고 실행 가능
- 필요한 소프트웨어 도구 및 설정 파일 등을 사전에 지정해두고 알려진 상태로 컨테이너 생성 가능(자동화!)
- 남아있는 일들
- 환경 변수의 이용
- 컨테이너들 사이 및 호스트와 컨테이너 사이에 TCP/IP 를 이용한 통신 가능하게 하기
- 호스트와 컨테이너 사이의 불륨 공유
- 도커 클린업
컨테이너 이름 지정하기
1. 도커 컨테이너는 이름과 ID (고유 해시 값)에 의하여 식별
- 이름을 지정하지 않으면 docker가 컨테이너를 만들 때 이름을 자동 부여
- 그러나 관리 편의 및 자동화를 위해서 이름을 지정하는 것이 필요해짐
- 명령어 : docker run --name <컨테이너 이름><이미지>
- 이미지 전체 삭제
- docker image prune -a
컨테이너 안의 파일들에 접근하는 방법
1. 실행하고 있는 컨테이너와 호스트 사이의 파일 복사
- 이미지 빌드할 때 호스트로부터 파일을 컨테이너에 추가
- dockerfile 안에 ADD 지시자를 활용
- 바인드 마운트
- docker -v 옵션으로 호스트의 특정 디렉토리를 컨테이너와 공유
- 도커 볼륨
- docker -v 옵션으로 호스트와 공유하는 것은 비슷하지만 컨테이너가 마운트하는 것은 추상화된 볼륨