해당 포스팅은 시작하세요! 도커/쿠버네티스를 읽고 작성한 글입니다🐳
1. 가상 머신과 도커 컨테이너
- 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 |
---|