728x90
Docker Compose란
Docker Compose
여러 컨테이너를 모아 관리하는 툴
- docker-compose.yml 파일에 컨테이너의 구성 정보를 정의하여 동일 호스트상의 여러 컨테이너를 일괄적으로 관리할 수 있음
- compose 정의 파일은 웹 애플리케이션의 의존 관계를 모아서 설정할 수 있음
- 정의 파일을 기반으로 docker-compose 명령을 실행하면 여러 개의 컨테이너를 모아서 시작하거나 정지할 수 있음
- 컨테이너 구성 정보를 YAML 형식의 파일로 관리할 수 있음
- CI/CD 프로세스에서 자동 테스트를 할 때 환경 구축에 그대로 이용할 수 있음
Compose 구성 파일 작성
Docker Compose는 구성 정보를 정의 파일에서 설정함
- Compose 정의 파일 확인
- 'webserver'와 'redis'라는 이름의 서비스 2개 정의
- webserver 서비스는 커런트 디렉토리에 있는 Dockerfile에 정의한 구성의 이미지를 빌드( build: . )하고, 외부에 대해 80번 포트를 공개( port: )하여 컨테이너 시작
- 컨테이너는 redis 서비스에 의존( depends_on: )함
- redis 서비스는 Docker Hub에 공개되어 있는 Redis의 공식 이미지인 'redis'의 버전 4.0을 베이스 이미지( image: )로 하여 컨테이너 시작
[root@localhost compose]# cat docker-compose.yml
version: '3.3'
services:
# WebServer config
webserver:
build: .
ports:
- "80:80"
depends_on:
- redis
# Redis config
redis:
image: redis
Docker Compose 명령
주요 서브 명령
- docker-compose 명령은 docker-compose.yml을 저장한 디렉토리에서 실행됨
명령 | 설명 |
up | 여러 Docker 컨테이너 생성/시작 |
stop | 여러 Docker 컨테이너 정지 |
down | 리소스 삭제 |
ps | 컨테이너 목록 표시 |
logs | 컨테이너 로그 출력 |
run | 컨테이너 실행 |
start | 컨테이너 시작 |
restart | 컨테이너 재시작 |
pause | 컨테이너 일시 정지 |
unpause | 컨테이너 재개 |
port | 공개 포트 번호 표시 |
config | 구성 확인 |
kill | 실행 중인 컨테이너 강제 정지 |
rm | 컨테이너 삭제 |
docker-compose.yml 작성
image: 이미지 지정
- Docker 컨테이너의 베이스 이미지 지정
- 이미지 이름 또는 이미지 ID 지정
- 로컬 환경에 없는 경우 Docker Hub로부터 자동 다운로드
- 태그를 지정하지 않는 경우 최신 버전 다운로드
services:
webserver:
image: khj/imagetest:1.0 # 태그 지정 또는
image: ubuntu # 태그를 지정하지 않음
build: 이미지 빌드
- 이미지의 작성을 Dockerfile에 기술하고 자동 빌드하여 베이스 이미지로 지정할 때 사용
- Dockerfile의 파일 경로 지정
- docker-compose.yml 파일이 있는 디렉토리를 커런트 디렉토리로 했을 때 Dockerfile의 위치를 지정함
- build 지정
sevices:
webserver:
build: .
- Dockerfile 작성
FROM ubuntu
- 컨테이너 생성
docker-compose up --build
- Dockerfile과 컨텍스트 지정
- /compose에 저장되어 있는 Dockerfile-com이라는 이름의 Dockerfile을 빌드함
- 파일 경로는 상대/절대 모두 지정 가능
services:
webserver:
build:
context: /compose
dockerfile: Dockerfile-com
command/entrypoint: 컨테이너 안에서 작동하는 명령 지정
- 컨테이너 안에서 작동하는 명령 지정
command: /bin/bash
- entrypoint 지정
entrypoint:
- php
- -d
- memory_limit=-1
ports/expose: 컨테이너 간 통신
- 공개 포트 지정
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
- 컨테이너 내부에만 공개하는 포트 지정
expose:
- "3000"
- "8000"
depends_on: 서비스의 의존 관계 정의
- 주의: 컨테이너의 시작 순서만 제어할 뿐 컨테이너상의 애플리케이션이 이용 가능해질 때까지는 제어하지 않음
volumes/volumes_from: 컨테이너 데이터 관리
- 컨테이너에 볼륨을 마운트할 때 사용
- 볼륨 지정
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- 읽기 전용 볼륨 지정 (ro)
volumes:
- ~/configs:/etc/configs/:ro
- 볼륨 마운트 지정
- 다른 컨테이너로부터 모든 볼륨을 마운트할 경우 사용
- log라는 이름의 컨테이너로 마운트
volumes_from:
- log
728x90
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220620_1_k8s_쿠버네티스란 (0) | 2022.06.20 |
---|---|
220620_2_k8s_vagrant를 이용한 vm 준비 (0) | 2022.06.20 |
220617_3_도커_프라이빗 레지스트리 구축 (0) | 2022.06.17 |
220617_2_도커_Dockerfile 명령 ADD / COPY / VOLUME (0) | 2022.06.17 |
220617_1_도커_Dockerfile 명령 ENV / WORKDIR / USER / EXPOSE / ARG / SHELL (0) | 2022.06.17 |