반응형
본 내용은 인프런의 데브위키님의 강의 "개발자를 위한 쉬운 도커" 내용을 바탕으로 정리한 내용입니다.
도커 컴포즈란?
- 도커 환경에서 여러 개의 도커 컨테이너를 관리하기 위한 도구이다.
- 도커 데스크탑 설치 시 기본으로 설치된다.
- 한 번의 명령어로 여러개의 컨테이너를 한번에 실행하거나 종료할 수 있다.
- 로컬 개발 환경에서 활용하기 편리하다.
그림 1) 도커 컴포즈
docker-compose.yml
- 도커 컴포즈를 통해 관리할 컨테이너(서비스)를 정의하는 파일이다.
- 서비스, 네트워크 볼륨들을 정의한다.
그림 2) 도커 컴포즈 명령어
hitchecker
- hitchecker는 특정 콘텐츠 또는 웹페이지의 접속 시도 횟수를 외부 캐시 저장소인 Redis에 저장하고 분석하는 도구이다.
- hitchecker가 종료 또는 재생성 되어도 Redis에 접속 시도 횟수가 저장되어 있기에 계속해서 누적이 된다.
- docker compose를 사용해서 한 번에 hitchecker 와 Redis 서버를 구성할 수 있다.
예시 2) hitchecker 예시
소스코드 다운로드 및 초기화
# 소스코드 다운로드
git clone https://github.com/daintree-henry/build.git
# 소스코드 변경사항 초기화
git reset --hard HEAD ; git clean -fd
# 소스코드의 버전 변경
git switch 02-practice
easydocker/build/hitchecker/app/app.py
: 특정 경로에서 어떤 행동을 할지 정의한다.
from flask import Flask
from redis import Redis
app = Flask(__name__)
# 레디스 접속 정보 설정
redis = Redis(host='redis',port=6379)
@app.route('/')
def hello():
# 경로 접근시 redis의 캐시값을 증가시키고 증가된 값을 출력
redis.incr('hits')
return 'Hit Checked! 이 페이지는 %s번 방문되었습니다.' % redis.get('hits').decode('utf-8')
if__name__ =="__main__":
app.run(host="0.0.0.0",debug=True)
easydocker/build/hitchecker/app/Dockerfile
FROM python:3.7-alpine
WORKDIR /app
COPY . /app
# 애플리케이션실행에필요한라이브러리설치
RUN pip install flask redis
CMD ["python", "app.py"]
easydocker/compose/hitchecker/docker-compose.yml
: 도커 컴포즈 설정 파일
# API 버전을 정의
version: '3'
services:
# hitchecker 컨테이너의 경우 사용자가 개발한 애플리케이션이기에 실행 시 빌드 필요
hitchecker:
# 이미지 빌드 시 사용할 Dockerfile 경로
build:./
# 이미지 빌드 및 컨테이너 실행 시 사용할 이미지 태그
# redis의 경우 외부의 이미지를 다운받아서서
image:hitchecker:1.0.0
ports:
- "5000:5000"
# 컨테이너 종료 시 자동으로 재시작
restart: always
redis:
# 컨테이너실행시사용할이미지태그
image:"redis:alpine"
Docker Compose 명령어 테스트
# easydocker/compose/hitchecker에서 실행
cd build/07/hichecker
# 1. docker-compose.yml파일에서 build 옵션이 있는 서비스를 찾아서 이미지를 빌드
$ docker compose build
# 2. 빌드된 이미지 확인
$ docker image ls
# 3. 컨테이너 실행
# 기존 이미지가 존재하면 해당 이미지로 컨테이너 실행
$ docker compose up -d
# 4. 컨테이너 상태 확인
$ docker compose ps
# localhost:5000 접속 : 방문할 때마다 방문횟수가 1씩 증가한다.
# 5. 컨테이너 로그 확인
$ docker compose logs
# 6. 컨테이너 삭제 후 재실행 및 localhost:5000 접속, 값이 그대로 남아있는지 확인
$ docker rm –f {컨테이너명}
# 7. 서비스의 삭제
$ docker compose down
# 도커의 볼륨도 같이 삭제한다.
$ docker compose down -v
그림 3) 로컬에 동일한 이미지가 있으면 해당 이미지를 제거하고 새로운 이미지로 빌드한다.
예시 3) 이중화DB, 공통변수 활용
easydocker/build/multidb/docker-compose.yml
version: '3'
services:
# 첫번째 컨테이너
postgres-primary-0:
image: bitnami/postgresql-repmgr:15
volumes:
- ostgres_primary_data:/bitnami/postgresql
environment:
POSTGRESQL_POSTGRES_PASSWORD:adminpassword
POSTGRESQL_USERNAME:myuser
POSTGRESQL_PASSWORD:mypassword
POSTGRESQL_DATABASE:mydb
REPMGR_PASSWORD:repmgrpassword
REPMGR_PRIMARY_HOST:postgres-primary-0
REPMGR_PRIMARY_PORT:5432
REPMGR_PARTNER_NODES:postgres-primary-0,postgres-standby
1:5432
REPMGR_NODE_NAME:postgres-primary-0
REPMGR_NODE_NETWORK_NAME:postgres-primary-0
REPMGR_PORT_NUMBER:5432
# 두번째 컨테이너
postgres-standby-1:
image:bitnami/postgresql-repmgr:15
volumes:-postgres_standby_data:/bitnami/postgresql
environment:
POSTGRESQL_POSTGRES_PASSWORD:adminpassword
POSTGRESQL_USERNAME:myuser
POSTGRESQL_PASSWORD:mypassword
POSTGRESQL_DATABASE:mydb
REPMGR_PASSWORD:repmgrpassword
REPMGR_PRIMARY_HOST:postgres-primary-0
REPMGR_PRIMARY_PORT:5432
REPMGR_PARTNER_NODES:postgres-primary-0,postgres-standby-1:5432
REPMGR_NODE_NAME:postgres-standby-1
REPMGR_NODE_NETWORK_NAME:postgres-standby-1
REPMGR_PORT_NUMBER:5432
volumes:
postgres_primary_data:
postgres_standby_data:
easydocker/build/multidb-env/docker-compose.yml(공통변수부분 지정)
version:'3'
x-environment:&common_environment
POSTGRESQL_POSTGRES_PASSWORD:adminpassword
POSTGRESQL_USERNAME:myuser
POSTGRESQL_PASSWORD:mypassword
POSTGRESQL_DATABASE:mydb
REPMGR_PASSWORD:repmgrpassword
REPMGR_PRIMARY_HOST:postgres-primary-0
REPMGR_PRIMARY_PORT:5432
REPMGR_PORT_NUMBER:5432
services:
postgres-primary-0:
image: bitnami/postgresql-repmgr:15
volumes:
- postgres_primary_data:/bitnami/postgresql
environment:
# 공통변수부분 지정
<<:*common_environment
REPMGR_PARTNER_NODES:postgres-primary-0,postgres-standby-1:5432
REPMGR_NODE_NAME:postgres-standby-1
REPMGR_NODE_NETWORK_NAME:postgres-standby-1
volumes:
postgres_primary_data:
postgres_standby_data:
Docker Compose 적용하기
- 도커 컴포즈를 통해 Leafy 애플리케이션을 개발자 PC에 빠르게 구성할 수 있다.
- Leafy front 개발자 또는 Leafy Backend 개발자는 나머지 모듈 들을 빠르게 구성할 수 있다.
- 외부 모듈을 개발하는 개발자는 PC에 Leafy-front, Leafy-backend 소스코드가 없어도 빠르게 환경을 구동시킬 수 있다.
- 프론트 개발자의 경우 DB와 서버는 도커 컴포즈를 이용하여 이미지를 실행시키고 프론트엔드 소스를 수정하면 된다.
예시 1) 디렉터리 이동 및 소스코드 상태 변경
# 1. easydocker/leafy, 소스코드 작성을 뛰어넘으려면 git switch 07-compose 실행
git reset --hard HEAD ; git clean -fd
git switch 07-compose-init
예시 4) easydocker/leafy/docker-compose.yml
leafy-postgres 설정
- 외부 이미지를 사용하여 컨테이너를 실행한다.
- 네트워크는 컴포즈가 default로 생성한다.
leafy-backend 설정 1
- backend 이미지가 있으면 실행 없으면 이미지를 빌드한다.
leafy-backend 설정 2
- 데이터베이스 접속을 위한 환경 변수값을 지정한다.
leafy-backend 설정 3
- 특정 컨테이너( leafy-postgres) 실행전 까지 컨테이너( leafy-backend) 실행을 보류한다.
leafy-front 설정
예시 2) Docker Compose 실행테스트
# 1. 컨테이너 실행 및 서비스 접속 테스트 후 컨테이너 종료
$ docker compose up -d
$ docker compose down
예시 5) easydocker/leafy/docker-compose.yml에 설정 추가
- 볼륨 추가
- leafy-postgres에 빌드 속성 추가
- 리소스 사용량을 제한
반응형
'Docker' 카테고리의 다른 글
[Docker] 이미지 빌드 자동화 파이프라인 구성하기 (0) | 2024.07.19 |
---|---|
[Docker] DevOps와 Pipeline (0) | 2024.07.19 |
[Docker] 도커 실무(컨테이너 내부에서 개발환경 구성) (0) | 2024.07.19 |
[Docker] 도커 실무(컨테이너 애플리케이션 최적화) (0) | 2024.07.19 |
[Docker] 도커 실무(PostgreSQL 이중화 DB 구성) (0) | 2024.07.19 |