[Docker] 도커.. 넌 누구니?

junghan·2023년 8월 1일
0

Docker

목록 보기
1/6
post-thumbnail

Docker 란 무엇일까?

Docker는 애플리케이션 개발, 배송 및 실행을 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드를 신속하게 배송, 테스트 및 배포하기 위한 Docker의 방법론을 활용하면 코드를 작성하고 프로덕션에서 실행하는 사이의 지연 시간을 크게 줄일 수 있습니다.

  • open platform 이다.
  • 어플리케이션을 인프라에서 분리해준다.
  • 신속하다.
  • 인프라를 어플리케이션을 관리하는 것 처럼 관리 할 수 있다.
  • 코드를 배포에 용의하다.

특징

  • 컨테이너 기반 가상화 도구
  • 리눅스 컨테이너 기술인 LXC(Linux Containers) 기반
  • 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술
  • 다양한 운영체제에서 사용할 수 있으며, 
 컨테이너화된 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있는 다양한 기능을 제공
  • 위 기능들을 통해 애플리케이션을 빠르게 개발하고, 효율적으로 배포, 관리할 수 있음

Container 란?

• 컨테이너는 가상화 기술 중 하나
• 호스트 운영체제 위에 여러 개의 격리된 환경을 생성
• 각각의 컨테이너 안에서 애플리케이션을 실행

가상화 (Virtualization) 기술이란 무엇일까?


https://www.datanet.co.kr/news/articleView.html?idxno=131759

하나의 물리적인 컴퓨터 자원(CPU, 메모리, 저장장치 등)을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술
이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있으며, 서버나 애플리케이션 등을 운영하는데 있어 유연성과 안정성을 제공합니다.

VM VS CONTAINER

기존의 가상화 방식은 주로 OS를 가상화하였습니다.

우리에게 익숙한 VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었습니다.

이러한 상황을 개선하기 위해 CPU의 가상화 기술(HVM)을 이용한 KVMKernel-based Virtual Machine과 반가상화 Paravirtualization방식의 Xen이 등장합니다. 이러한 방식은 게스트 OS가 필요하긴 하지만 전체OS를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었습니다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었습니다.

전가상화든 반가상화든 추가적인 OS를 설치하여 가상화하는 방법은 어쨋든 성능문제가 있었고 이를 개선하기 위해 프로세스를 격리 하는 방식이 등장합니다.

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없습니다.

도커의 기본 네트워크 모드는 Bridge모드로 약간의 성능 손실이 있습니다. 네트워크 성능이 중요한 프로그램의 경우 --net=host 옵션을 고려해야 합니다.

하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VMVirtual Machine을 사용하는 느낌을 줍니다. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get이나 yum으로 패키지를 설치할 수 있으며 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있습니다. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있습니다.

새로운 컨터이너를 만드는데 걸리는 시간은 겨우 1-2초(체감 0.001초)로 가상머신과 비교도 할 수 없이 빠릅니다.


도커 아키텍쳐

도커 데몬(Docker daemon = dockerd)

• 도커 엔진의 핵심 구성 요소
• 도커 호스트에서 컨테이너를 관리하고 실행하는 역할
• 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행
• 컨테이너 이미지를 관리하고
• 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행

도커 클라이언트 (Docker Client)

• Docker와 상호 작용
• docker 명령어를 사용하면 Docker daemon으로 보내어 실행

도커 오브젝트 (Docker Object)

  • 도커 이미지 (Docker Image)

    도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념입니다.
    이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable).
    컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.

  • 도커 컨테이너 (Docker Container)


컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가상화 기술의 하나지만 기존방식과는 차이가 있습니다.
• 한 도커 이미지의 실행 가능한 인스턴스
• 애플리케이션을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지

도커 레지스트리 (Docker Registries)

• 도커 이미지 (Docker Image) 를 관리하고 저장하는 곳
• Docker hub: 디폴트 레지스트리, 누구나 접근 가능한 공개형 저장소

도커 구동 순서

https://youtu.be/EbTJtanJUfE?t=98


도커 실습

컨테이너 라이프사이클

도커 컨테이너 실습

1. 레지스트리에서 이미지 다운로드

  • 사용법
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]

  • 예제
    docker pull httpd

2. 이미지 목록

  • 사용법
    docker images [OPTIONS] [REPOSITORY[:TAG]]

  • 예제
    docker images

3. 이미지에서 새 컨테이너 생성 및 실행

  • 사용법
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • 예제

docker run httpd
docker run --name secondContainer httpd
docker run -p 8888:80 -v /Users/junghan/Desktop/programming/docker_class/class1/htdocs:/usr/local/apache2/htdocs httpd
  • -p: 퍼블리싱 포트 매핑
  • -v: 볼륨 마운트
  • 로컬의 htdocs위치에 index.html 파일 생성

4. 하나 이상의 실행 중인 컨테이너 중지

  • 사용법
    docker stop [OPTIONS] CONTAINER [CONTAINER...]

  • 예제

 docker stop 9b0f49de746c
 docker stop -a

5. 컨테이너의 로그 가져오기

  • 사용법
    docker logs [OPTIONS] CONTAINER

  • 예제

docker logs second
docker logs second -f

6. 하나 이상의 컨테이너 제거

  • 사용법
    docker rm [OPTIONS] CONTAINER [CONTAINER...]

  • 예제

docker rm 6026ab9b44cc
docker rm second -f

7. 하나 이상의 이미지 제거

  • 사용법
    docker rmi [OPTIONS] IMAGE [IMAGE...]

  • 예제
    docker rmi 6026ab9b44cc

8. 실행 중인 컨테이너에서 명령 실행

  • 사용법

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

  • 예제

docker exec -it awesome_elion /bin/sh

도커 파일 실습

  1. Dockerfile 예제
FROM httpd:latest
COPY  index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80
  1. 이미지 만들기

docker build -t my-httpd .

  1. 도커파일로 생성된 이미지로 컨테이너 실행하기

docker run -d -p 8888:80 my-httpd

유용한 명령어

1. 컨테이너 관리하기

  • 사용법
    docker container COMMAND

2. 중지된 모든 컨테이너 제거

  • 사용법
    docker container prune [OPTIONS]

  • 예제
    docker container prune

3. 컨테이너 리소스 사용 통계의 라이브 스트림 표시

  • 사용법

docker container stats [OPTIONS] [CONTAINER...]

  • 예제
    docker container stats

4. 이미지 관리하기

  • 사용법

docker image COMMAND

5. 사용하지 않는 이미지 제거

  • 사용법

docker image prune [OPTIONS]

  • 예제
    docker image prune

6. 하나 이상의 이미지에 대한 자세한 정보 표시

  • 사용법
    docker image inspect [OPTIONS]

  • 예제
    docker image inspect httpd

출처:

profile
42seoul, blockchain, web 3.0

0개의 댓글