본문 바로가기
Engineering/Docker & k8s

[Docker] 도커란?

by whybe 2024. 1. 3.

해당 포스팅은 시작하세요! 도커/쿠버네티스를 읽고 작성한 글입니다🐳

1. 가상 머신과 도커 컨테이너

https://www.docker.com/resources/what-container/

  • Virtual Machine
    • 하이퍼바이저(Hypervisor)를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성하여 사용함.
    • 각 운영체제는 가상 머신을 단위로 구별되며, 하이퍼바이저에 의해 생성되고 관리되는 운영체제를 Guest OS라고 함.
    • Geust OS는 하이퍼바이저를 거쳐 독립된 공간과 시스템 자원을 할당받아 사용하기 때문에 성능의 손실이 발생함.
  • Docker container
    • 컨테이너에 필요한 커널은 호스트의 커널을 공유하여 사용함.
    • 컨테이너 안에는 애플리케이션 구동을 위한 라이브러리 및 실행파일만 존재하므로 컨테이너를 이미지화했을 때 이미지 용량이 가상 머신에 비해 줄어듦.

2. 도커 이미지와 컨테이너

  • Docker Image
    • 컨테이너를 생성할 때 필요한 요소이며, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용됨.
    • 컨테이너는 이미지 목적에 맞는 파일이 포함된 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간임
  • Docker Container
    • docker run 명령어로 컨테이너를 생성할 수 있음. (-it 옵션을 통해 컨테이너와 상호 입출력 가능)
    • 로컬 도커 엔진에 이미지가 존재하지 않을 경우 자동으로 도커 허브에서 이미지를 내려받음.
    • 컨테이너에서 무엇을 하든지 원래 이미지는 영향을 받지 않음.
docker --version # 도커 엔진의 버전 확인
docker run -it ubuntu:20.04 # ubuntu:20.04 이미지를 사용하는 컨테이너 생성

docker ps -a                   # 생성된 컨테이너를 확인
docker rm {CONTAINER ID}       # 컨테이너 삭제
docker ps -a                   # 잘 정지됐는지 확인

docker images                  # 로컬에 저장된 이미지 확인
docker image rm {IMAGE ID}     # 이미지 삭제
docker images                  # 삭제가 잘 이루어졌는지 확인

3.  컨테이너를 외부에 노출

  • 컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당 받음.
  • ubuntu:14.04 이미지를 사용하여 networt_test 라는 이름을 가진 컨테이너를 생성한 후 컨테이너 내에서 ifconfig 명령어를 통해 컨테이너의 네트워크 인터페이스를 확인할 수 있음.
docker run -it --name network_test ubuntu:14.04

  • eth0와 lo라는 인터페이스가 존재하며, eth0은 도커 컨테이너의 NAT IP인 172.17.0.2를 할당받았음을 확인 가능함.
  • 아무런 설정을 하지 않았다면 외부에서 컨테이너로 접근할 수 없으며, 도커가 설치된 호스트에서만 접근 가능함.
  • -p 옵션을 추가하고 컨테이너의 포트를 호스트의 포트와 바인딩하여 연결 가능함. (포트포워딩)
    • docker run -it -p {HOST IP}:[HOST PORT]:[CONTAINER PORT]
    • 로컬 호스트의 IP 주소인 HOST IP는 생략해도 되나 생략 시에는 자동으로 로컬 호스트 IP가 자동으로 설정됨.
docker run -it --name mywebserver -p 80:80 ubuntu:14.04

# 컨테이너 내부에서 실행
apt-get update
apt-get install apache2 -y
service apache2 start

 

  • 명령어를 모두 실행하고 주소창에 localhost:80을 입력하면 웹 서버가 잘 실행되는 것을 확인할 수 있음.

'Engineering > Docker & k8s' 카테고리의 다른 글

[Docker] 도커 컨테이너 다루기  (2) 2024.01.07