가상화(Virtualization)와 컨테이너
가상화란 컴퓨터 자원을 가상 환경으로 분리하여 프로그램들이 상호 충돌없이 실행 가능하도록 하는 아키텍처 기술이다.
가상화의 종류
OS 수준 가상화 - (docker)
- 하나의 OS 커널을 여러 개의 공간으로 격리하여 각각의 컨테이너가 마치 독립된 것처럼 사용하는 가상화이다. 따라서 OS를 새로 설치하지 않고 host OS의 커널을 공유한다. 이러한 방식으로 실행 속도가 빠르고 성능 상의 손실이 적다. 사용자에게는 가상머신처럼 보인다.
개발 환경 가상화
- anaconda, venv 등 특정 폴더를 가상환경으로 만들어서 라이브러리나 소스코드를 관리하는 방식이다.
머신 가상화
- 다수의 OS를 동시에 실행하는 플랫폼을 말한다. 하이퍼바이저에 OS를 설치하여 운영하는 구조이며, 여러 가지 종류의 하이퍼바이저가 존재한다. 대표적으로 virtualbox, wsl 등이 있다.
Docker
1. 도커는 컨테이너 기반의 가상화 도구이며, Linux 컨테이너를 여러 개 구축하여 마치 Linux OS를 여러 개 띄워놓고 사용하는 것처럼 환경을 설정할 수 있다.
2. 도커는 클라이언트-서버 구조의 프로그램이다.
docker version 명령어로 도커 설치를 확인할 수 있다. 다음 자료를 보면 해당 명령어를 실행했을 때 Client와 Server로 버전 정보가 따로 나온다. 이를 통해 도커는 하나의 실행파일이지만 클라이언트와 서버 각각의 역할을 수행하고 설정되어 있는 것을 알 수 있다.
- 도커를 사용하기 위해서는 먼저 도커 데몬 프로세스(dockerd)가 실행 중이어야 한다.
- 도커 데몬 프로세스는 root 권한으로 실행되어야 한다.
# 현재 접속 중인 사용자에게 root 권한 주기 - sudo 없이 사용할 수 있다. 다만 로그인 중이라면 재부팅이 필요하다.
sudo usermod -aG docker $USER
# 아래 명령으로 서비스 실행
sudo service docker start
# 아래 명령으로 백그라운드 서비스로 실행
nohup sudo dockerd &
# 실행 확인
ps -ef|grep dockerd
3. 도커는 Linux socket 통신으로 설정되어 있는데, 도커는 Linux Container이므로 실제로는 가상머신에 설치가 되는 것이다.
가상머신의 포트를 연결하기 위해서는 도커 컨테이너의 특정 포트를 가상머신에 연결하고, 다시 mac이나 windows 등 시스템OS의 포트와 연결해야 한다.
4. 도커 버전확인 및 실행 명령어
도커를 실행하기 위한 Kernel의 버전은 3.10.x 이상, ubuntu 14.04 이상을 사용해야 한다. 만약 kernel 버전이 이보다 낮으면 문제 발생 소지가 다분하므로, 업데이트를 해주는 게 좋다. 또한 ubuntu나 centos가 아닌 다른 환경을 사용하는 경우에는 다른 방법이 필요하다.
# 도커 버전 확인
sudo docker --version
docker version
# 컨테이너 실행
docker run hello-world
# 컨테이너 프로세스 보기
docker ps
Docker Image
- 컨테이너 실행을 위한 일종의 읽기 전용 파일으로 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는 데 필요한 기타 파일 등을 말한다.
- 도커 이미지 파일은 변경이 불가능하다. 즉, 읽기 전용 파일이며 스냅샷이라고도 한다.
- 특정 시점의 애플리케이션과 가상환경을 포함한다.
- 하나의 이미지 파일을 가지고 여러 개의 컨테이너 실행 가능하다.
# 로컬에 저장된 도커 컨테이너 이미지 확인 방법
docker images
# 실행 중인 컨테이너 확인
docker ps
# 실행이 종료된 컨테이너 포함 확인
docker ps -a
Docker hub
도커 허브는 도커 이미지를 만들고 관리 및 배포할 수 있는 호스팅 서비스이다.
필요한 도커 이미지를 검색해서 pull할 수 있다.
도커 컨테이너 이미지 사용(pull/run)
ubuntu 검색 후 pull하는 과정
Tags에서 내가 사용하고자 하는 버전을 가져와서 쓰면 된다. 도커 이미지를 내 PC로 다운로드하는 방법은 다움과 같다.
# 도커 이미지 풀
docker pull ubuntu:22.04
# 실행
docker run -itd ubuntu:22.04 bash
# pull == run 같이 쓰면 됨
docker run ubuntu:22.04
- -itd : -i, -t, -d가 같이 쓰인 것이다. -it는 컨테이너를 종료하지 않은 채로 터미널의 입력을 계속해서 컨테이너로 전달하기 위해 사용한다.
- -d: 컨테이너가 detached 모드에서 실행되며, 이는 백그라운드에서 실행한다는 뜻이다.
이렇게 컨테이너를 생성하면 컨테이너는 프로세스이므로 실행 중인 프로세스가 없으면 바로 종료된다.
➡️ /bin/bash 명령어를 사용하여 컨테이너를 실행
docker run --rm -it ubuntu:22.04 /bin/bash
가상환경 실행 없이 uname -a하면 내 로컬 os에 대한 정보가 나오는데, /bin/bash로 하면 해당 가상환경에 대한 os 정보가 나옴.
⇒ 가상환경 생성 성공
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker Container OS와 VM | Docker Image Layer (1) | 2023.11.09 |
---|---|
[Docker] Docker와 Docker Hub로 CI/CD 구축하기 (1) | 2023.10.23 |
[Docker] MariaDB 도커 이미지와 PyMySQL로 쿼리 작성하기 (0) | 2023.06.08 |