Docker란?
- 컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있는 툴
컨테이너(Container)란?
- 하나의 호스트 컴퓨터 환경 안에서 구성되는 독립적인 컴퓨터 환경
- 각 환경에 프로그램을 별도로 설치해서 운영 가능
- 호스트 커널을 공유하여 가상 머신보다 가볍고 빠르게 시작·종료 가능
- 각각의 컨테이너는 독립된 파일 시스템, 네트워크 인터페이스, 프로세스 공간을 가짐
이미지(Image)란?
- 컨테이너를 생성하기 위한 읽기 전용 템플릿
- 애플리케이션 실행에 필요한 파일 시스템 스냅샷(코드, 라이브러리, 설정 등)을 계층(layer) 형태로 정의
- 이미지는 Dockerfile로부터 빌드되며, Docker Hub 등의 레지스트리에 저장·공유 가능
Docker를 사용하는 이유
- 환경 일관성(Consistency)
- 개발·테스트·운영 환경이 동일한 이미지 기반으로 구성되어, 실행 환경을 일치시킬 수 있음
- 이식성(Portability)
- 이미지에 애플리케이션과 모든 의존성을 묶어 배포하므로, 어디서나 동일하게 실행 가능
- 격리(Isolation)
- 컨테이너별로 프로세스, 네트워크, 파일시스템이 분리되어, 서로 간섭 없이 안전하게 여러 서비스를 동시에 실행 가능
Docker CLI(Command Line Interface)
✔️최신 버전 이미지 다운로드
$ docker pull ${이미지명} # docker pull [이미지명]:latest와 동일
✔️특정 버전 이미지 다운로드
$ docker pull [이미지명]:[태그명]
✔️이미지 조회
$ docker image ls
- ls : list
✔️이미지 삭제
특정 이미지 삭제
$ docker image rm [이미지 ID 또는 이미지명]
- rm : remove
사용 중인 이미지 강제 삭제
$ docker image rm -f [이미지 ID 또는 이미지명]
전체 이미지 삭제
$ docker image rm -f $(docker images -q)
- -f 옵션을 사용하지 않으면 컨테이너에서 사용하고 있지 않은 이미지만 삭제
✔️컨테이너 생성
$ docker create [이미지명][:태그명]
✔️컨테이너 조회
실행 중인 컨테이너 조회
$ docker ps
- ps : process status
모든 컨테이너 조회
$ docker ps -a
✔️컨테이너 실행
$ docker start [컨테이너명 or 컨테이너ID]
✔️컨테이너 중단
$ docker stop [컨테이너명 or 컨테이너ID]
✔️컨테이너 삭제
중지되어있는 특정 컨테이너 삭제
$ docker rm [컨테이너명 or 컨테이너ID]
중지되어있는 전체 컨테이너 삭제
$ docker rm $(docker ps -qa)
실행 중인 특정 컨테이너 삭제
$ docker rm -f [컨테이너명 or 컨테이너ID]
전체 컨테이너 삭제
$ docker rm -f $(docker ps -qa)
✔️컨테이너 실행
아직 실행되지 않은 컨테이너 실행
$ docker start [컨테이너명 or 컨테이너ID]
이미지 다운로드 및 컨테이너 실행
$ docker run --name [컨테이너명] -d -p [호스트 포트번호]:[컨테이너 포트번호] [이미지명]
- -d : 백그라운드 실행
- --name : 이름 지정
- [호스트 포트]:[컨테이너 포트] 리다이렉트
✔️컨테이너 강제 종료
$ docker kill [컨테이너명 or 컨테이너ID]
✔️컨테이너 로그 조회
$ docker logs [컨테이너 ID]
- --tail [출력 횟수] 옵션을 통해 최근 로그 조회 가능
- -f 옵션을 통해 실시간으로 로그 조회 가
✔️컨테이너 내부 접속
$ docker exec -it [컨테이너 ID] bash
- 컨테이너 내부에 bash로 접속
- -it 옵션을 사용하지 않으면 명령어 한 번만 입력 가능