728x90
- 리눅스 기반의 인기 있는 오픈 소스 컨테이너 엔진
- 컨테이너(container)는 애플리케이션이 실행하는 데 필요한 모든 것을 제공하는 논리적 패키징 메커니즘을 의미
- 도커 동작 방식을 이해하기 위해서는 도커 엔진이 전체 도커 시스템의 핵심부
Docker Engine(도커 엔진)이란?
- 도커 엔진은 클라이언트-서버 패턴 아키텍처를 따르는 애플리케이션으로 호스트 머신에 설치되며 서버, REST API, 명령줄 인터페이스(CLI)라는 세 가지 중요한 구성 요소를 포함
- 도커 클라이언트
- 도커 사용자는 클라이언트로 도커와 상호작용
- 도커 리모트 API, 도커 CLI
- 도커 명령 실행 시 도커 데몬에 명령 전송
- 도커 볼륨
- 도커가 생성하고 컨테이너가 사용한 데이터를 저장하는 데 적합한 메커니즘
- 도커 API나 CLI로 관리
- 도커 호스트/서버
- 도커 데몬
- 도커 이미지를 생성하고 관리하는 dockered라는 서버
- REST API가 데몬에 명령을 보내고 CLI 클라이언트가 도커 명령 입력
- 컨테이너
- docker run 명령이 실행되고 수행되면 도커 이미지가 컨테이너를 생성
- 애플리케이션과 주변 환경은 이 컨테이너에서 실행
- 도커 컨테이너를 시작, 삭제, 중지 하려면 도커 API 또는 CLI 사용
- 이미지
- 도커 컨테이너를 생성하는 몇 가지 명령이 포함된 읽기 전용 템플릿
- 도커 허브에서 가져올 수 있고, 그대로 사용하거나 추가 명령으로 수정 가능
- Dockerfile을 사용하여 새로운 이미지 생성 가능
- 도커 데몬
- 도커 레지스트리
- 도커 이미지가 저장
- 도커 허브, 사설 레지스트리
- 도커 허브(기본 공개 레지스트리)나 사설 레지스트리(Private Registry)에서 도커 이미지를 내려받음
- 도커 네트워크
- 컨테이너를 가능한 많은 네트워크에 연결 가능
- 네트워크를 격리된 컨테이너의 통신 수단으로 생각할 수 있고 5가지 네트워크 드라이버 타입을 가짐
- bridge, host, overlay, none, macvlan
Dockfiles
- 도커 클라이언트가 이미지를 생성하고 준비하기 위해 호출하는 데 필요한 지시어(instructions)와 명령어(commands)들이 포함된 단순 테스트 파일
- 이 파일은 이미지 생성 과정을 자동화
- Dockerfile → (build 명령) → 이미지 → (run 명령) → 도커 컨테이너
명령어 | 설명 |
FROM | 빌드 프로세스를 시작하는 기본 이미지를 정의 → 즉, 도커 런타임에 사용할 도커 이미지를 지정 |
LABEL | 도커 이미지에 메타데이터를 추가 (키, 밸류) |
ARG | 사용자가 docker build 명령을 사용하여 빌더에 전달할 수 있는 변수를 정의 |
COPY | 원본의 새 파일, 디렉터리 또는 리모트 파일 URL을 복사하고 지정된 대상 경로에 생성 중인 이미지의 파일 시스템에 추가 Ex) COPY ${JAR_FILE} app.jar |
VOLUME | 컨테이너의 마운트 지점 생성 → 동일한 이미지를 사용해서 새 컨테이너를 만들 때 이전 볼륨과 격리되는 새 볼륨 생성 |
RUN | 명령과 해당 매개변수를 받아 이미지에서 컨테이너를 실행 → 대개 소프트웨어 패키지를 설치하는 데 이 명령어를 사용 |
CMD | ENTRYPOINT에 매개변수를 제공 → docker run과 유사하지만 컨테이너가 인스턴스화된 후에만 실행 가능 |
ADD | 원천에서 파일을 복사하고 컨테이너 대상 위치에 추가 |
ENTRYPOINT | 실행 파일로 실행할 컨테이너를 구성 |
ENV | 환경 변수 설정 |
Docker compose
- 도커 컴포즈(Docker Compose)는 서비스 설계와 구축이 용이한 스크립트를 작성하여 도커를 더 쉽게 사용하게 도움
- 도커 컴포즈를 사용하면 여러 컨테이너를 하나의 서비스로 실행하거나 다른 컨테이너를 동시에 생성 가능
- 도커 컴포즈 사용 순서
- 도커 컴포즈를 설치
- 도구를 설치하려면 Install Docker Compose | Docker Documentation을 참고
- YAML 파일을 생성하여 애플리케이션 서비스를 구성
- 파일 이름을 docker-compose. yml로 지정
- docker-compose config 명령을 사용하여 파일 유효성을 확인
- docker-compose up 명령을 사용하여 서비스를 시작
- 도커 컴포즈를 설치
- docker-compose.yml 파일 예
version: <docker-compose-version>
services:
database:
image: <database-docker-image-name>
ports:
- "<databasePort>:<databasePort>"
environment:
POSTGRES_USER: <databaseUser>
POSTGRES_PASSWORD: <databasePassword>
POSTGRES_DB: <databaseName>
<service-name>:
image: <service-docker-image-name>
ports:
- "<applicationPort>:<applicationPort>"
environment:
PROFILE: <profile-name>
DATABASESERVER_PORT: "<databasePort>"
container_name: <container_name>
networks:
backend:
aliases:
- "alias"
networks:
backend:
driver: bridge
- Docker compose 지시어
지시어 | 설명 |
version | 도커 컴포즈 도구의 버전을 지정 |
service | 배포할 서비스를 지정 → 서비스 이름은 도커 인스턴스에 대한 DNS 엔트리이며, 다른 서비스에서 액세스하는 데 사용 |
image | 특정 이미지를 사용하여 컨테이너를 실행하도록 지정 |
port | 시작한 도커 컨테이너가 외부에 노출할 포트 번호를 지정 → 내부 및 외부 포트를 매핑 |
environment | 시작하는 도커 이미지에 환경 변수를 전달 |
network | 복잡한 토폴로지를 만들 수 있도록 커스텀 네트워크를 지정 → 타입(host, overlay, macvlan, none)을 지정하지 않았다면 디폴트 타입은 bridge → 브리지(bridge) 네트워크를 사용하면 동일한 네트워크 내 컨테이너 연결을 관리 가능 + 동일한 도커 데몬 호스트에서 실행되는 컨테이너에만 적용 |
alias | 네트워크 내 서비스에 대한 호스트 별명을 지정 |
- Docker compose 명령어
명령어 | 설명 |
docker-compose up -d | 애플리케이션 이미지를 빌드하고 정의된 서비스를 시작 → 이 명령은 필요한 모든 이미지를 내려받아 배포하고 컨테이너를 시작 → -d 매개변수는 백그라운드 모드에서 도커를 실행하도록 지정 |
docker-compose logs | 최신 배포에 대한 모든 정보 확인 가능 |
docker-compose logs <service_id> | 특정 서비스에 대한 로그 확인 가능 → 예를 들어 라이선싱 서비스 배포를 보려면 docker-compose logs licensingservice 명령을 사용 |
docker-compose ps | 시스템에 배포한 모든 컨테이너 목록을 출력 |
docker-compose stop | 서비스를 마치고 나서 서비스를 중지 → 컨테이너도 중지 |
docker-compose down | 모든 것을 종료하고 컨테이너도 모두 제거 |
728x90
'Docker' 카테고리의 다른 글
[Docker Compose] Spring Boot + MySQL + Redis (0) | 2024.08.21 |
---|---|
Docker compose 설정 및 각종 테스트 (0) | 2024.08.09 |
Docker 설치 및 환경 설정 (0) | 2024.08.09 |
컨테이너 vs 가상머신(VM) (0) | 2024.08.08 |