Spring & Spring Boot/Docker & Monitoring

[5] Docker - compose, commit

carrotweb 2026. 9. 15. 22:07
728x90
반응형

Docker Compose는 여러 개의 컨테이너를 하나로 묶어 정의하고 실행할 수 있도록 돕는 도구입니다.

하나의 명령어(docker compose up)로 여러 컨테이너를 켜고 끌 수 있게 해줍니다.

 

docker-compose.yml파일은 각각의 컨테이너들을 실행할 때 필요한 옵션들을 적어둔 문서입니다.

 

1. Redis 폴더를 생성합니다.

C:\workspaces\docker\redis

 

2. C:\workspaces\docker\redis에 docker-compose.yml파일을 생성합니다.

# compose 파일 버전
version: "3.9"

# 컨테이너 내의 서비스들 정의
services:
  # 서비스명(이름을 설정해도 docker-compose.yml 파일이 있는 폴더명(프로젝트명)으로 생성됨)
  redis:
    # 가져올 이미지:버전
    image: redis:8.2.1
    # 컨테이너명 (설정하지 않으면 서비스명-번호 형식으로 자동 생성됨 redis-1)
    container_name: dev-redis
    # 실행 명령어
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    # 연결된 포트 (컨테이너 외부:컨테이너 내부)
    ports:
      - "6379:6379"
    # 볼륨 (컨테이너 외부 경로:컨테이너 내부 경로)
    volumes:
      # 데이터 유지
      - C:\workspaces\docker\redis\redis-data:/data
      # 레디스 설정 정보
      - C:\workspaces\docker\redis\redis.conf:/usr/local/etc/redis/redis.conf
    # 컨테이너 재시작 - 컨테이너 자동 재시작
    restart: unless-stopped

 

3. C:\workspaces\docker\redis에 redis.conf파일을 생성합니다.

redis.conf파일은 Redis의 동작을 제어하는 설정 파일입니다.

내부 개발만 사용하기 때문에 간단하게 설정하였습니다.

# 허용된 IP
bind 0.0.0.0

# 허용된 PORT
port 6379

# 패스워드로 레디스에 접근
protected-mode yes

# 패스워드
requirepass kiki@2000

# 데이터 저장 경로
dir /data

 

4. docker-compose up 명령어로 실행합니다.

 

docker-compose up 명령어

설정 파일(docker-compose.yml)에 정의된 여러 컨테이너, 네트워크, 볼륨 등의 리소스를 한 번에 생성하고 실행합니다.

컨테이너가 없으면 새로 생성합니다.

설정 파일이 있는 경로에서 명령어를 실행해야 합니다.

docker compose up [OPTIONS] [SERVICE...]

 

-d : 컨테이너가 백그라운드로 실행됩니다.

docker-compose up -d

 

5. 실행 중인 redis 컨테이너에 redis-cli를 접속하여 명령어를 실행합니다.

docker exec -it dev-redis redis-cli -h 127.0.0.1 -p 6379 -a kiki@2000
<-- docker exec -it <CONTINER NAMES> redis-cli -h <HOST> -p <PORT> -a <PASSWORD>

경고: 명령줄 인터페이스에서 '-a' 또는 '-u' 옵션과 함께 비밀번호를 사용하는 것은 안전하지 않을 수 있습니다.

 

상태 백업: Redis에 데이터를 입력하거나 redis.conf 설정을 변경한 후, 그 상태 그대로를 이미지로 얼려두고 싶을 때 사용합니다.디버깅 및 공유: 특정 에러나 데이터가 존재하는 상태를 그대로 이미지로 만들어 동료에게 전달할 수 있습니다.

 

start 명령어

정지 상태인 컨테이너를 다시 실행합니다.

설정 파일이 있는 경로에서 명령어를 실행해야 합니다.

docker-compose start <-- docker-compose.yml에 정의된 모든 서비스를 시작합니다.
docker-compose start [서비스명] <-- 서비스만 실행합니다.

 

stop 명령어

실행중인 컨테이너를 중지합니다.

설정 파일이 있는 경로에서 명령어를 실행해야 합니다.

docker-compose stop <-- docker-compose.yml에 정의된 모든 서비스를 중지합니다.
docker-compose stop [서비스명] <-- 서비스만 중지합니다.

 

rm 명령어

컨테이너를 삭제합니다.

설정 파일이 있는 경로에서 명령어를 실행해야 합니다.

docker-compose rm

 

ps 명령어

컨테이너를 리스트로 보여줍니다.

설정 파일이 있는 경로에서 명령어를 실행해야 합니다.

docker-compose ps -a

 

 

알아두기

Docker Compose 대신 다운로드 받은 image를 컨테이너를 생성할 경우 Ports나 Volumes, Enviroment variables를 추가할 수 있으나 command는 Desktop UI에서는 추가할 수 없습니다.

 

그래서 docker run으로 컨테이너를 생성해야 합니다.

docker run -d `
	--name dev-redis `
	-p 6379:6379 `
	-v C:\workspaces\docker\redis\redis-data:/data `
	-v C:\workspaces\docker\redis\redis.conf:/usr/local/etc/redis/redis.conf `
	acb90ced0bd7 `
	redis-server /usr/local/etc/redis/redis.conf

 

그래야 정상적으로 작동합니다.

 

 

commit 명령어

지정된 컨테이너를 새로운 이미지로 저장합니다.

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

 

commit은 백업이나 특정 상황을 유지하고 공동 작업을 하고 싶을 때 사용됩니다.

백업 : 현재 데이터를 유지하기 위해서 이미지로 백업

공유 : 공동 작업을 위해 현재 상태를 그대로 이미지로 만들어 공유

스냅샷 : 장애 분석을 위해 에러가 발생한 상태를 그대로 유지하기 위해서 이미지로 백업

 

실행 중인 dev-redis 컨테이너의 현재 상태를 그대로 새로운 이미지(이미지 명 : dev-redis)로 저장합니다.

-a : 이미지의 작성자를 설정합니다.

-m : 커밋 메시지를 설정합니다.

docker commit -a carrotweb -m "first commit" dev-redis dev-redis:1.0.0
<-- docker commit [OPTIONS] <컨테이너 이름> <새롭게 생성할 이미지 이름:<태그>>

 

[images]에 새롭게 생성된 이미지가 나타납니다.

 

728x90
반응형