격리된 공간에서 또 하나의 가상 서버를 실행하는 기술이다.
VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느리다.
Host Operating System = 물리 서버, Guest OS = 가상 서버
Host와 Guest를 연결 시켜주는 Hypervisor(서버 가상화 기술)는 Host 서버에 설치되고 Host와 Guest를 나누는 역할을 한다. 각각의 Guest들은 Hypervisor에 의해 관리되고 시스템 자원을 할당 받는다. Guest OS로는 다양한 OS 선택이 가능하며 Guest OS에서 실행되는 애플리케이션이 Host 자원을 사용하기 위해서는 반드시 Guest OS를 거쳐야만 한다. 그렇기 때문에 속도가 느릴 수 있다.
추가적인 OS를 설치하여 가상화하는 방법은 성능 문제가 있고 이를 개선하기 위해 등장 한 프로세스를 격리하는 방식이다.
다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
애플리케이션은 도커 엔진을 통해 Host 자원을 사용할 수 있고 구조적으로 Guest OS가 없어서 용량이 매우 가볍다.
도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념이다. 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.
이미지는 컨테이너를 실행하기 위한 모오오오오든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다. 이제 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다. 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없다.
다중 컨테이너를 정의하고 실행하기 위한 도구
mysql, 웹서버, 카프카 등 여러개의 프로세스를 하나의 파일로 정의해서 동시에 실행하기 위한 도구이다.
YAML 파일을 사용해서 구성한다.
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
depends_on:
- redis
redis:
image: redis
volumes:
logvolume01: {}
홈페이지에 접속해서 OS에 맞는 Docker Desktop을 설치한다.
https://www.docker.com/products/docker-desktop/
cmd에 도커가 설치가 제대로 됐는지 확인해본다.
docker -v
도커 허브(도커 이미지 저장소) https://hub.docker.com/
mysql을 검색하고 도커에서 공식적으로 지원하는 mysql 이미지를 pull 받는 명령어를 쳐준다. 버전을 입력하지 않으면 latest(최신버전)가 디폴트이다.
docker pull mysql:{version}
docker run --name mysql-sample-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mysql:{version}
docker ps -a
docker exec -it {도커 컨테이너 이름} bash
mysql -u root -p
mysql> 로 들어와지면 MySQL 접속 성공!