1. 도커의 개념
2013년에 출시된 도커(Docker)는 컨테이너 기술을 이용해 웹 애플리케이션을 배포하고 실행하는 오픈 소스 플랫폼으로, 컨테이너의 기술의 대중화를 이끄는 핵심 기술로 자리 잡았습니다.
도커는 웹 애플리케이션을 실행한는 데 필요한 모든 환경을 패키징해 컨테이너 이미지를 만들고, 이 이미지를 이용해 컨테이너를 생성합니다.
예를 들어 자바와 스프링 부트로 개발한 웹 애플리케이션이 있다면, 이 웹 애플리케이션을 만들고 실행하는 데 필요한 요소(JDK, JAR 파일 등)을 포함해 하나의 이미지로 만든 후, 이 이미지를 활용해 컨테이너를 생성하고 해당 컨테이너에서 웹 애플리케이션을 실행합니다.
2. 도커의 장단점
2-1. 장점
- 컨테이너 간 통신을 위한 네트워크 구성 기능 제공
- 여러 컨테이너를 동시에 관리하기 위한 오케스트레이션 기능 제공
- 컨테이너 이미지를 저장하고 관리하는 기능 제공
- 가상 머신과 달리 호스트 운영체제를 공유하기 때문에 빠르고 가벼움
2-2. 단점
- 컨테이너 내부에 설치된 웹 애플리케이션이 호스트 운영체제를 공유하므로 호스트 운영체제의 제한을 받을 수 있다는 것
3. 도커의 구조
도커의 구조는 크게 클라이언트와 서버로 나뉩니다.
사용자가 도커 클라이언트를 통해 'docker'로 시작되는 도커 명령어를 입력하면 도커 호스트(도커 서버)의 도커 데몬(도커 엔진)에 명령이 전달돼 컨테이너 생성 및 실행, 컨테이너 이미지 관리 등의 작업이 수행됩니다.
도커 클라이언트와 도커 데몬은 API를 통해 요청을 주고 받습니다.
도커 클라이언트는 개발자가 API를 사용해 명령을 내릴 수 있도록 CLI(Command Line Interface) 환경을 제공합니다.
도커 데몬은 API로 들어온 명령을 수행하는데, 이 때 도커드(dockered)라는 프로세스를 통해 동작합니다.
도커드는 컨테이너와 컨테이너 이미지 관리의 주체입니다.
도커가 대중화 되면서 최근에는 도커허브(Docker Hub)와 같은 컨테이너 레지스트리(container registry, 컨테이너 이미지 저장소)도 등장했습니다. 이를 통해 다양한 웹 애플리케이션과 미들웨어, 프레임워크 등이 컨테이너 이미지로 제공돼 사용자가 웹 애플리케이션을 쉽게 배포하고 실행할 수 있게 됐습니다.
4. 컨테이너 이미지
컨테이너 이미지는 컨테이너 실행에 필요한 모든 것이 포함한 패키지로, 웹 애플리케이션 실행에 필요한 모든 소스 코드, 런타임, 라이브러리, 환경 변수 등의 구성 요소가 들어 있습니다. 컨테이너 이미지는 한 번 만들면 다른 서버 환경에서도 동일하게 사용할 수 있어 호환성이 좋습니다.
컨테이너 이미지를 만들고 이를 이용해 컨테이너를 실행하는 과정은 다음 그림과 같이 진행됩니다.
아래 그림과 같이 도커에서 만든 컨테이너 이미지를 '도커 이미지' 라고 합니다.
도커 이미지는 도커 파일(DockerFile)이라는 텍스트 파일을 이용해 만듭니다. 도커 파일에는 웹 애플리케이션의 구성과 실행 방법을 정의하는 명령어가 작성돼 있으며, 이를 빌드하면 도커 이미지가 생성되고 도커 이미지를 실행하면 컨테이너가 실행됩니다.
컨테이너 이미지를 사용하면 웹 애플리케이션 배포와 관리가 훨씬 쉬워지고, 어떤 서버 환경에서 웹 애플리케이션을 실행하더라도 일관된 결과를 얻을 수 있습니다.
5. 컨테이너의 주요 명령어
컨테이너와 관련된 주요 명령어는 도커에서 아용하므로 도커 명령어라고도 합니다.
이러한 명령어로 도커 컨테이너를 생성, 실행, 관리, 모니터링 합니다.
5-1. 이미지 관련 명령어
- docker pull <이미지 이름> : Docker 이미지를 다운로드합니다.
- docker build -t <이미지 이름> <Dockerfile 경로> : Docker 이미지를 빌드합니다.
- docker images 또는 docker image ls : 현재 시스템에 있는 Docker 이미지 목록을 표시합니다.
5-2. 컨테이너 관련 명령어
- docker run <옵션> <이미지> : Docker 이미지로 컨테이너를 실행합니다.
- docker ps 또는 docker container ls : 현재 실행 중인 Docker 컨테이너 목록을 표시합니다.
- docker ps -a 또는 docker container ls -a : 모든 Docker 컨테이너 목록을 표시합니다.
5-3. 컨테이너 제어 명령어
- docker stop <컨테이너> : 실행 중인 Docker 컨테이너를 정지합니다.
- docker start <컨테이너> : 정지된 Docker 컨테이너를 시작합니다.
- docker restart <컨테이너> : Docker 컨테이너를 재시작합니다.
- docker rm <컨테이너> : Docker 컨테이너를 삭제합니다.
5-4. 로그 및 상태 확인 명령어
- docker logs <컨테이너> : Docker 컨테이너의 로그를 확인합니다.
- docker inspect <컨테이너> : Docker 컨테이너의 자세한 정보를 표시합니다.
- docker stats <컨테이너> : Docker 컨테이너의 리소스 사용 상태를 실시간으로 확인합니다.
5-5. 컨테이너 내부 명령어 실행
- docker exec -it <컨테이너> <명령어> : 실행 중인 Docker 컨테이너 내에서 명령어를 실행합니다.
'코딩자율학습 > 아는 만큼 보이는 백엔드 개발' 카테고리의 다른 글
아는 만큼 보이는 백엔드 로드맵 - 도서 후기 (0) | 2024.03.11 |
---|---|
Chapter08 : 가상화와 컨테이너의 개요 (0) | 2024.03.10 |
Chapter04 : DBMS (0) | 2024.02.27 |