1. Docker란 ?
1-1. Docker
- 컨테이너 기반 가상화 도구 (Linux Containers - LXC 기반)
- Application을 컨테이너라는 단위로 격리하고 이를 실행 및 배포하는 기술
- 다양한 OS에서 사용 가능하며, 컨테이너화된 App을 간편하게 빌드/배포/관리할 수 있는 다양한 기능 제공
- 빠른 App 개발, 효율적 배포/관리 가능
1-2. Container
- 가상화 기술 중 하나
- Host OS 위에 여러개의 격리된 환경을 생성
- 각 컨테이너 안에서 Application을 실행함
1-3. 가상화 (Virtualization)
- 하나의 물리적 컴퓨터 자원(cpu, memory, storage 등)을 가상적으로 분할하여
여러개의 가상 컴퓨터 환경을 만들어내는 기술
- [효과 1] 물리적인 컴퓨터 자원을 더욱 효율적으로 사용 가능
- [효과 2] 서버 / Application을 운영하는데 있어서 유연성과 안정성 제공 가능
1-4. Virtual Machine vs. Container
Virtual Machine | Container |
*Hypervisor를 통해 VM과 OS 연결 | Container Engine을 통해 컨테이너와 Host OS 연결 |
Host OS 위에 각 App 전용 Guest OS를 올리는 개념 | 하나의 Host OS를 공유하는 개념 |
※ 하이퍼바이저 (Hypervisor)
- 가상 머신 (Virtual Machine)을 생성하고 구동하는 SW
- OS에 자원을 할당 및 조율하는 역할
- OS들의 요청을 번역하여 HW에 전달하는 역할
2. Docker의 내부 구조
2-1. Docker Architecture
2-2. 구성 요소 살펴보기
① 도커 데몬 (Docker Daemon = dockerd)
- 도커 엔진의 핵심 구성 요소
- 도커 호스트에서 컨테이너를 관리 및 실행하는 역할
- 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업 수행
- 컨테이너 이미지 관리
- 외부에서 이미지 다운로드, 빌드하는 작업 수행
② 도커 클라이언트 (Docker Client)
- 도커 데몬의 관리 대상
- Docker와 상호 작용
- docker 명령어를 사용하면 Docker daemon으로 보내서 실행됨
③ 도커 오브젝트 (Docker Object)
도커 이미지 (Docker Image) |
- 도커 컨테이너를 만들기 위한 읽기 전용 템플릿 |
도커 컨테이너 (Docker Container) |
- 도커 이미지 하나의 실행 가능한 인스턴스 - Application을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지 |
④ 도커 레지스트리 (Docker Registries)
- 도커 이미지를 관리하고 저장하는 곳
- ex) Docker hub - default registry, 누구나 접근 가능한 공개형 저장소
3. Docker 실습
3-1. Download an image from a registry
- 사용법
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 예제
docker pull httpd
3-2. List Images
- 사용법
docker images [OPTIONS] [REPOSITORY[:TAG]]
- 예제
docker images
3-3. Create and run a new container from an image
- 사용법
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 예제
docker run httpd
docker run --name secondContainer httpd
docker run -p 8888:80 -v /Users/jk/wanted/2308/docker-pro-2308/lecture/1st:/usr/local/apache2/htdocs httpd
3-4. Stop one or more runnig containers
- 사용법
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- 예제
docker stop 9b0f49de746c
docker stop -a
3-5. Fetch the logs of a container
- 사용법
docker logs [OPTIONS] CONTAINER
- 예제
docker logs second
docker logs second -f
3-6. Remove one or more containers
- 사용법
docker rm [OPTIONS] CONTAINER [CONTAINER...]
- 예제
docker rm 6026ab9b44cc
docker rm second -f
3-7. Remove one or more images
- 사용법
docker rmi [OPTIONS] IMAGE [IMAGE...]
- 예제
docker rmi 6026ab9b44cc
3-8. Execute a command in a running container
- 사용법
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 예제
docker exec -it awesome_elion /bin/sh
3-9. Dockerfile 활용
1) Dockerfile 예제
FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80
2) 이미지 만들기
docker build -t my-httpd .
3) Dockerfile로 생성된 이미지로 컨테이너 실행하기
docker run -d -p 8888:80 my-httpd