본문 바로가기
Back-end

2023.08.01 TIL

by 신재권 2023. 8. 1.

Docker

Docker 란?

Docker는 컨테이너 기반 가상화 플랫폼으로서 개발자들이 소프트웨어를 쉽게 구축, 배포, 실행할 수 있도록 도와주는 오픈 소스 프로젝트이다.

도커는 컨테이너라고 하는 가벼운 가상 환경을 사용하여 애플리케이션과 그 종속성들을 격리된 환경에서 실행할 수 있게 해준다.

전통적인 가상화 기술과 달리, Docker는 OS 레벨에서 리소스를 공유하면서 애플리케이션과 필요한 라이브러리, 패키지 등을 컨테이너로 묶어 실행한다.

 

이러한 컨테이너는 휴대성과 확장성을 제공하며, 동일한 환경에서 어디서든 실행될 수 있으므로 개발, 테스트, 배포 과정에서 일관성을 유지하는데 도움이 된다.

 

도커를 사용하면 개발과 운영 프로세스를 효율적으로 관리할 수 있으며, 환경 간의 일관성을 유지하고 배포 시간을 단축 시킬 수 있다.

개발한 애플리케이션을 독립적인 환경에서 실행시킬 수 있어서, 시스템 간 충돌을 최소화하고 서버 자원을 효율적으로 사용할 수 있다.

 

주요 특징

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

Docekr Engine

도커를 실행하는 런타임 환경으로서, 컨테이너를 만들고 실행하는 역할을 한다.

Docker Image

컨테이너 실행에 필요한 파일 시스템과 애플리케이션 설정 등을 포함하는 템플릿

이미지는 컨테이너를 생성하는데 사용된다.

Docker Container

Docker 이미지의 인스턴스로서, 격리된 프로세스들이 실행되는 가상 공간

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

Docker Hub

Docker 이미지를 저장하고 공유하는 온라인 레지스트리

여러 사용자들이 Docker Hub에서 공개 이미지를 찾아 사용할 수 있다.

가상화 기술이란?

하나의 물리적인 컴퓨터 자원(CPU, 메모리, 저장장치 등)을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어내는 기술

이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용 가능

서버나 애플리케이션 등을 운영하는데 있어 유연성과 안정성 제공

가상 머신

가상 머신과 Docker는 모두 애플리케이션을 격리된 환경에서 실행할 수 있도록 도와주는 가상화 기술이다.

가상 머신은 하이퍼바이저(가상화 소프트웨어)를 사용하여 호스트 시스템(물리적 서버) 위에서 게스트 OS(가상 머신)를 실행하는 기술

각 가상 머신은 독립된 운영 체제를 실행하고 필요한 모든 라이브러리, 패키지를 가지고 있다.

가상 머신은 무겁고 느리며, 시작 시간이 오래 걸리고 자원 사용량이 상당하다.

가상 머신은 여러 애플리케이션을 실행하기 위해 여러 개의 가상 머신을 만들어야 하므로 오버헤드가 발생할 수도 있다.

하이퍼바이저란?

하이퍼바이저는 가상화 기술을 지원하여 하나의 물리적 호스트 시스템에 여러 개의 가상 머신을 실행하고 관리하는 소프트웨어 이다.

  • 가상머신을 생성하고 구동하는 소프트웨어
  • OS에 자원을 할당 및 조율
  • OS들의 요청을 번역하여 하드웨어에 전달

Docker 구조

출처 : 원티드 수업 자료

Docker 아키텍쳐

  • 도커 데몬
    • 도커 엔진의 핵심 구성 요소
    • 도커 호스트에서 컨테이너를 관리하고 실행하는 역할
    • 컨테이너를 생성, 시작, 중지 ,삭제 하는 등의 작업을 수행
    • 컨테이너 이미지를 관리하고 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행
  • 도커 클라이언트
    • 사용자가 도커 명령어를 실행하는 인터페이스
    • Docker와 상호 작용
    • docker 명령어를 사용하면 Docker daemon으로 보내어 실행
    • 도커 클라이언트는 도커 데몬과 restful api를 통해 통신
  • 도커 오브젝트
    • 도커 이미지
      • 도커 컨테이너를 만들기 위한 읽기 전용 템플릿
    • 도커 컨테이너
      • 한 도커 이미지의 실행 가능한 인스턴스
      • 애플리케이션을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지
  • 도커 레지스트리
    • 도커 이미지를 관리하고 저장하는 곳
      • 도커 허브 : 디폴트 레지스트리, 누구나 접근 가능한 공개형 저장소

컨테이너 라이프 사이클

  1. 이미지 빌드
  2. 이미지 생성
  3. 컨테이너 생성
  4. 컨테이너 실행
  5. 컨테이너 사용
  6. 컨테이너 중지
  7. 컨테이너 삭제
  8. 이미지 관리 : 도커는 이미지 재사용 가능, 필요한 경우 이미지를 업데이트하거나 삭제 할 수 있음

Dockerfile

도커 파일은 도커 이미지를 빌드하는데 사용되는 텍스트 파일이다.

도커 파일은 컨테이너를 생성하는데 필요한 모든 명령어와 설정을 정의하는 스크립트 이다.

이 파일을 사용해 도커 이미지를 자동화하고 반복 가능하게 만들 수 있다.

  1. 이미지 선택
  2. 애플리케이션 코드 및 파일 복사 : 이미지 내부로 복사
  3. 명령어 실행
  4. 환경 변수 설정

주요 명령어

Image 레지스트리로부터 다운

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull <이미지명>
docker pull httpd

Image 리스트

docker images [OPTIONS] [REPOSITORY[:TAG]]
docker images

이미지로부터 컨테이너 생성 및 실행

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run httpd
docker run -it ubuntu
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
  • -it 옵션은 인터랙티브 모드를 활성화 하여 컨테이너에 터미널로 접속하도록 한다.

실행중인 컨테이너 정지

docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop 9b0f49de746c
 docker stop -a

컨테이너 로그

docker logs [OPTIONS] CONTAINER
docker logs second
docker logs second -f

컨테이너 삭제

docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm <컨테이너ID 또는 이름>
docker rm 6026ab9b44cc
docker rm second -f
  • -f : 강제 삭제 옵션

이미지 삭제

docker rmi [OPTIONS] IMAGE [IMAGE...]
docker rmi <이미지명>
docker rmi 6026ab9b44cc

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

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it awesome_elion /bin/sh

쉘 실행

Docker FIle 활용

  1. DockerFile 작성
FROM httpd:latest
COPY  index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80
  • FROM : httpd 이미지 기반으로 새로운 이미지 생성
  • COPY : 현재 디렉토리에 있는 index.html을 위 경로로 복사
  • EXPOSE : 컨테이너가 외부와 통신할 수 있도록 80번 포트 공개, 외부에서 컨테이너의 웹 서버 접근 가능
  1. docker file 기반으로 이미지 빌드
docker build -t my-httpd .

-t : 빌드된 이미지의 이름 설정(태그)

. : 현재 디렉토리를 Docker 빌드 컨텍스트로 사용, 이 디렉토리에 있는 dockerfile과 관련 파일들을 사용하여 이미지 빌드

  1. 도커 파일로 생성된 이미지로 컨테이너 실행
docker run -d -p 8888:80 my-httpd

-d : Detached 모드로 컨테이너 실행, 백그라운드로 실행

-p 8888:80 : 호스트의 8888 번 포트를 컨테이너 내부의 80번 포트와 연결

 


Network

PC, 스마트폰도 서버도 TPC/IP 사용

PC와 스마트폰 등이 통신하는 규칙을 프로토콜이라 한다.

복수의 프로토콜을 조합한 것이 네트워크 아키텍처이다.

TCP/IP는 TCP와 IP를 중심으로 하는 프로토콜의 집합으로, 네트워크의 공통 언어이다.

PC, 스마트폰 등의 OS에도 TCP/IP가 내장되어 있으므로 통신이 가능하다.

각종 네트워크 기기 전반을 호스트라고 한다.

TCP/IP 계층 구조

TCP/IP 계층구조는 다음과 같다.

  • 애플리케이션 계층 : HTTP, SMTP, POP3, IMAP4, DHCP, DNS 등
  • 전송 계층 : TCP/UDP
  • 인터넷 계층 : IP, ICMP, ARP, RARP 등
  • 네트워크액세스 계층 : 이더넷, 무선 LAN, PPP 등

각 층의 프로토콜이 모두 정상적으로 제기능을 해야 통신이 이뤄진다.

한 계층이 기능을 발휘하려면, 그 하위 계층은 정상 동작한다는 것을 전제로 한다.

 

애플리케이션 계층은 애플리케이션에서 다룰 데이터 형식과 절차를 결정한다.

전송 계층은 애플리케이션에 데이터를 할당한다.

인터넷 계층은 엔드투엔드 통신을 한다.

네트워크액세스 계층은 프로토콜은 자류롭게 선택할 수 있고, 통신 상대와 같은 것이 아니여도 된다.

 

각 계층에 포함된 프로토콜을 조합해 애플리케이션이 통신된다.

'Back-end' 카테고리의 다른 글

2023.08.04 TIL  (0) 2023.08.04
2023.08.02 TIL  (0) 2023.08.02
2023.07.31 TIL  (0) 2023.07.31
2023.07.30 TIL  (0) 2023.07.30
2023.07.29 TIL  (0) 2023.07.30