본문 바로가기
Cloud | CICD/Basic

[Wanted 프리온보딩] 컨테이너 기술, Docker의 개념과 사용법

by seoyamin 2023. 8. 1.

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

가상 머신 vs. 컨테이너

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