study/TIL🐥

원티드 프리온보딩 - 백엔드 챌린지 (Docker)

서나쓰 2023. 4. 6. 10:48
728x90

Git만큼 사랑받는 개발 툴이 된 Docker

  • stackoverflow 2022 개발자 설문조사에서 앞으로 배우고 싶은 언어에 npm 다음으로 Docker가 올랐다

Docker란 무엇일까?

Docker overview

 

Docker overview

 

docs.docker.com

  • Open platform이다
  • 어플리케이션을 인프라에서 분리한다
  • 신속하다
  • 인프라를 어플리케이션을 관리하는 것처럼 관리할 수 있다
  • 코드 배포에 용이하다
  • 컨테이너 기반 가상화 도구
  • 애플리케이션을 컨테이너 라는 단위로 격리하여 실행하고 배포하는 기술

Container란 무엇일까?

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

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

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

  • 가상화 서버 없이 서버 올리기

  • 하이퍼바이저를 통한 가상화 서버

  • 컨테이너 엔진을 통한 가상화 서버

👌 하이퍼 바이저란?
- 가상머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어
- OS에 자원을 할당 및 조율
- OS들의 요청을 번역하여 하드웨어에 전달
- 대표적으로 VMware가 있다

 

Virtual Machine VS Container

컨테이너 기반 특징

  • 리눅스 커널의 기능을 사용하여 만들어짐
    • chroot : 파일 시스템을 격리
    • namespace : 프로세서 격리
    • cgroup : 하드웨어 자원 격리
  • 프로세스 단위의 격리 환경

Docker란 무엇일까?

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

Docker Architecture

도커 데몬(Docker daemon = dockerd)

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

 

도커 클라이언트(Docker Client)

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

 

도커 오브젝트(Docker Object)

  • 도커 이미지(Docker Image)
    • 도커 컨테이너를 만들기 위한 읽기 전용 템플릿
  • 도커 컨테이너(Docker Container)
    • 한 도커 이미지의 실행 가능한 인스턴스
    • 애플리케이션을 싱행하기 위한 모든 파일과 설정 정보를 포함하는 패키지

 

도커 레지스트리(Docker Registries)

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

 

도커 라이프 사이클

 

도커 파일

 

실습 순서

- 레지스트리에서 이미지 다운 받기

docker pull httpd

- 이미지 리스트

docker images

- 이미지를 사용해 새로운 컨테이너 만들기

 docker run httpd
 docker run --name secondContainer httpd
 docker run -p 8888:80 -v ~/Desktop/git/httpdtest:/usr/local/apache2/htdocs httpd

> httpd 이미지 실행

> httpd 이미지를 실행할 때 이름 옵션 설정

> httpd 이미지를 실행할 때 80 포트를 8888로 매핑, httpd에 있는 파일 위치에 내가 매핑하고 싶은 파일 위치를 설정

- 도커 실행 중지

docker stop 9b0f49de746c
docker stop -a

> 특정 이미지만 중지, 혹은 모든 도커 중지

- 도커 컨테이너 삭제

docker rm 6026ab9b44cc

 

도커 파일을 활용한 실습

- 도커 파일 작성 

FROM httpd:latest
COPY  index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80

- 이미지 만들기

docker build -t my-httpd

> -t는 내가 원하는 태그 이름을 달 수 있는 옵션

- 이미지 실행

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