도커 정의
데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어. 주로 서버에서 사용한다.
🤔격리가 필요한 이유?🤔
프로그램들끼리 다른 프로그램, 디렉터리, 라이브러리 등을 공유하다 보면 버전 등의 문제로 예상치 못한 오류가 발생하는 경우가 많다. 이를 방지하기 위해 도커 컨테이너를 사용하는 것이다. 한 대의 서버 혹은 컴퓨터라도 컨테이너는 완전히 독립된 환경이기 때문에 같은 프로그램을 여러개 실행할 수 있게 된다.
용어 정리
📌 컨테이너
- 조립형 창고
- 컨테이너를 다루는 기능을 제공하는 SW가 도커
- 하나의 도커에 여러 개의 컨테이너를 만들 수 있음
📌 도커 엔진
- 도커를 사용하기 위해 필요한, 도커 SW의 본체
- 도커 엔진을 사용해 컨테이너를 생성 및 구동
📌 이미지
- 컨테이너의 빵틀과 같은 역할
- 도커 엔진과 이미지가 있어야 컨테이너 생성 가능
- 담고 있는 SW의 종류에 따라 다양한 이미지 사용
📌 도커 허브 (https://hub.docker.com/)
- 공식적으로 운영되는 도커 레지스트리(도커 이미지를 배포하는 서비스)
- 공개된 컨테이너 이미지가 모여 있는 곳
도커 동작 원리
☝️ 도커는 리눅스 컴퓨터에서 사용한다!!
- 도커 엔진도 리눅스 운영체제에서 구동되고,
- 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램이다.
☝️ 컨테이너 속 리눅스의 주변 부분
- 컨테이너가 완전히 분리되어 있기 때문에 리눅스 운영체제의 주변 부분이 컨테이너 속 프로그램의 명령을 전달받을 수 없다.
- 컨테이너 속에 운영체제의 주변 부분이 들어 있어 프로그램의 명령을 전달받고 이를 밑바탕이 되는 커널에 전달하는 구조로 되어 있음.
- 리눅스 운영체제 전체가 아닌 주변 부분만 컨테이너에 넣음으로써 ‘가벼움’을 얻을 수 있다!
☝️ 컨테이너 속 리눅스의 주변 부분
- 도커 컨테이너는 ‘쓰고 버리는’ 일회용품
- 컨테이너는 쉽게 만들 수 있기 때문에 컨테이너 하나를 업데이트하면서 계속 사용하기보다는 업데이트된 소프트웨어가 들어있는 새로운 컨테이너를 사용하는 것이 좋다!
- 만들고 → 실행하고 → 종료하고 → 폐기 // 다시 새로운 컨테이너 만들고 → 실행하고 → …
☝️ 컨테이너 내부의 데이터
- 컨테이너를 폐기할 때 컨테이너 내부의 데이터도 함께 삭제되기 때문에, 데이터 손실 방지를 위해 도커가 설치된 물리적 서버(호스트)의 디스크를 마운트해 이 디스크에 데이터를 저장한다.
- 컨테이너 외부에 저장해 둠으로써 컨테이너가 폐기되거나 도커 엔진 자체에 무슨 일이 생기더라도 데이터는 그대로 보존 가능!
- 다른 컨테이너와 데이터를 공유할 수도 있음
⚠️ 프로그램 개발 시 다른 저장소에 저장하지 않는 경우도 있기 때문에 컨테이너 폐기 전에 중요한 데이터가 포함되어 있는지 확인하기!!
🤔운영체제란..🤔
- 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할 수행
- 커널 + 그 외의 주변 부분으로 구성
- 주변 부분은 프로그램에서 명령을 전달받거나 커널이 실행한 결과를 프로그램에 다시 전달하는 역할 수행
도커의 장단점
장점 | 단점 |
한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다. | 리눅스용 소프트웨어밖에 지원하지 않는다. |
서버 관리가 용이하다. | 호스트 서버에 문제가 생기면 모든 컨테이너에 영향이 미친다. ⚠️ 물리 서버의 이상에 대해 확실히 대책을 세워야 함! |
서버 고수가 아니어도 다루기 쉽다. | 컨테이너 하나를 장기간에 걸쳐 사용할 때는 그리 큰 장점을 느끼기 어렵다. |
도커 명령어
docker [커맨드 (상위 커맨드 / 하위 커맨드)] (옵션) [대상] (인자)
예를 들어..
docker container (상위 커맨드) run (하위 커맨드) penguin(대상)
커맨드 (상위 커맨드 / 하위 커맨드)
- ‘무엇을’(=상위 커맨드), ‘어떻게’(=하위 커맨드) 할 것인지 지정하는 부분
- 관례적으로 상위 커맨드인 container를 생략 가능
- e.g. docker container run = docker run
옵션
- 커맨드에 세세한 설정을 지정하는 용도
- -, -- 로 시작하지만 앞에 기호를 붙이지 않는 경우도 있음
- - 를 하나만 사용하는 옵션은 한꺼번에 모아 쓸 수 있음
대상
- 구체적인 이름 지정
인자
- 대상에 전달할 값 지정 (문자 코드, 포트 번호 등)
- 인자를 지정하는 경우는 그리 많지 않음
자세한 명령어들을 여기 참고하기!!
Reference documentation
This section includes the reference documentation for the Docker platform’s various APIs, CLIs, and file formats.
docs.docker.com
참고 자료
📓 그림과 실습으로 배우는 도커 & 쿠버네티스
그림과 실습으로 배우는 도커 & 쿠버네티스: 개념과 작동 원리가 쏙쏙 이해되는 완벽 입문서
컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서! 이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서입니다. 자
wikibook.co.kr