인프런 초보를 위한 도커 안내서 강의 기반
소프트웨어를 격리 시켜 서버 프로그램 간의 의존성을 떨어뜨리며 서버 관리의 효율성을 높여주는 소프트웨어
가상머신은 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어라고 생각하면 된다. 소프트웨어 내에서 물리적으로 분리되어 컴퓨터의 기능을 제공하는 소프트웨어
각 개의 프로그램들을 컨테이너
라는 형태로 격리시킨다
컨테이너
는 소프트웨어 실행에 필요한 모든 환경들을 패키징하고 격리시키는 것을 의미우선 앞 서 언급했던 것처럼 서버 내 프로그램들을 효율적으로 사용하기 위한 목적으로, 서버의 상태를 정상적으로 관리하기 위한 노력을 덜고자 도커가 탄생
Oracle, WordPress, Git-Lab 등과 같은 프로그램들을 서버에 설치해 실행하는 것이 쉬운 일이 아니며 거기에 더 해 서버에서 사용하는 프로그램들은 계속해서 변화한다
뿐만 아니라 소프트웨어를 개발하는데 있어 사용되는 언어, 프레임워크 등도 마찬가지
전통적인 방식의 경우 서버 내 모든 자원과 설정 파일 등을 프로그램들이 함께 공유하며 서로 의존하고 있는 관계라 보면 된다
앞서 언급했던 것 처럼 전통적인 서버관리 방식
은 서버 내 모든 환경들이 서로 의존 관계가 존재하며 공통된 자원을 모두 공유하는 방식
초기에는 서버를 관리할 때 문서
로 기록하며 서버 환경을 관리했고 이후에 서버 상태 관리 도구
(일반적인 문서가 아닌 코드로 이루어짐)를 이용했다
이 후 하나의 서버에 여러 버전을 관리 할 목적으로 가상머신
을 이용
기술력이 아주 아주 뛰어난 회사의 경우 가상으로 프로세스, 파일, 디렉토리, CPU, MEORY, I/O 들을 분리해 자원 격리
를 시키면서 운영하지만 대부분 해당 기술을 원활하게 사용하지 못한다
우선 Docker라는 기술은 오픈 소스이기에 특정 회사나 서비스에 종속적이지 않다
보통 서비스(언어, 프레임워크 등) 별로 배포 방식이 다른데 도커의 경우는 컨테이너라는 표준이 존재하기 때문에 모든 서비스들의 배포 과정이 동일해진다
도커에서 이미지란 컨테이너를 실행하는 압축 파일을 의미한다
Dockerfile
을 이용해 이미지를 만들며 가상머신과 비교해 초기 세팅 시 크게 어려움 없다프로세스 실행되는 파일의 집합으로 실행되는데 필요한 리눅스 프로그램들의 압축이라 생각하면 된다
이미지에 이미지를 쌓으면서 커스텀하게 새로운 이미지 형태를 구축할 수 있다
docker commit
: 명령어를 한줄씩 서버 내에서 타이핑docker build
: 명령어를 특정 파일에 기록 및 실행build
명령어가 더 유용하다고 생각한다도커는 기본적으로 이미지를 생성하는데 있어 캐시를 사용
때문에 명령어가 적혀 있는 Dockerfile
내 변경 사항이 없는 경우 빌드 시간이 굉장히 짧아진다
도커 이미지를 저장하는 공간으로 이미지를 저장소에 만들고 필요에 따라 여러 서버에서 가져다 사용할 수 있다
서버 내 설정 파일 경로가 겹칠 수도 있으며 버전마다 여러 경로를 하나의 서버에서 관리하기가 어렵지만 도커를 사용하면 쉽게 가능하다
우선 도커는 하나의 프로그램을 관리하는 방식
쿠버네티스는 여러 대의 서버와 여러 개의 서비스를 관리하기 쉽게 하는 것
결국 쿠버네티스 안에 도커가 여러 개 존재하며 이를 관리하기 쉽게 해주는 것
- 스케줄링, 여유 있는 서버에 컨테이너 배포
- 서버 죽으면 다른 서버에 컨테이너 띄어줌
- 클러스터링, 여러 개의 서버를 하나의 서버처럼 사용, 모든 서버를 한 곳에서 컨트롤
- 2번의 경우에서 컨테이너가 띄워지는 위치를 정확히 파악하는 기술도 존재(컨테이너 띄워주는 서버를 실시간으로 관측 가능하다는 것
도커는 서버-클라이언트 구조로 도커를 서버에 다운 받고 명령어를 치면 명령어를 친 컴퓨터(현재 내 서버 컴퓨터)가 클라이언트이며 도커 서버로 명령어를 전송, 도커 서버는 명령어에 따른 결과를 응답
기본저긍로 컨테이너 내에서 사용하는 데이터들은 컨테이너를 삭제하는 경우 함께 사라진다
하지만
컨테이너를 가동할 때 데이터를 서버 내 특정 폴더에 별도로 저장하는 설정을 거치면 컨테이너를 삭제하고 재가동하는 경우에도 폴더 내의 저장되어 있는 데이터를 계속해서 사용할 수 있다
docker ps
: 실행 중인 컨테이너 확인
docker ps -a
: 컨테이너 실행 기록 확인
docker stop {id}
: 도커 종료
docker logs
: 실행 중인 컨테이너 로그 확인
docker pull
: 이미지 다운로드
docker run
이용 시 이미지 다운로드 및 실행docker rmi
: 이미지 삭제
docker network create
: 도커 컨테이너끼리 이름으로 통신할 수 있는 네트워크 생성
docker network connect
: 기존에 생성된 컨테이너에 네트워크 추가