[Docker] 4. 도커 파일 (2)

김주희's avatar
Jul 31, 2025
[Docker] 4. 도커 파일 (2)
 
선생님이 공부하실 당시 정리한 Docker run 옵션
선생님이 공부하실 당시 정리한 Docker run 옵션
 

1. Spring 서버를 실행해보자 - EntryPoint 설정

CI (깃허브에 코드를 통합) → 배포 직전에 배포환경과 동일하게 세팅해서 테스트(깃헙 액션) → 테스트 성공하면 jar 파일 구워서 던짐
 
도커파일에서 배포환경과 동일하게 ~해서
 
jar가 아닌 jar를 들고있는 컨테이너를 이미지로 구워서 버전 관리
.class 패키지들이 모여있는 실행파일 = jar
 
프로덕트환경에서는 리눅스와 도커만 설치되어있으면됨
 

WORKDIR

/var/app/currnent = workdir
컨테이너 내부 환경의 어느 폴더 안에 실행(시작)할건지 지정
리눅스 환경에 접속했을때 작업폴더를 설정
 

COPY

복사할 때 이름을 변경해서 넣을 수 있다.
 
 
도커파일의 목적은 이미지 굽는거지만 실행은 되어야 함 실행은 되고 다 설정 된 뒤에 굽는거 (굽기만 하는건 commit)
 
run, cmd나 엔트리포인트 등 실행명령어는
RUN : 도커 빌드할 때 실행됨 (도커 빌드 목적 = 이미지 굽는거) = 이미지 구울 때 실행됨
CMD : 이미지 다 굽고 나서 내가 직접 이 이미지를 run할 때
ENTRYPOINT : 덮어쓰기 못하도록 하고 싶은 cmd는 여기에 cmd는 오버라이드 되니까
 
ENTRYPOINT에는 띄어쓰기 못쓰니까 콤마로 구분해서 쓴다.
 
EXPOSE는 힌트 안적어도 무방하나 (8081로 적는다고 8081로 돌도록 설정되는 것 X)
 
 
notion image
 
이미지 잘 구워짐
notion image
 
docker run -d -p 80:8081 awsv3
notion image
 
notion image
 

실습 : 서버 죽이고 prod 모드로 실행해보기

 
notion image
 
notion image
 
notion image
 
만약에 아래와 같이 포트포워딩 하면 들어가지지 않는다. prod 모드에서는 포트번호를 5000번이라고 해뒀기 때문!
docker run -d -p 80:8081 awsv3
notion image

COPY ./hello.zip . => COPY는 뒤에 .을 정확하게 적지 않으면 압축이 자동으로 풀린다. zip으로 쓰면 해제X RUN 명령어로 풀면 되긴 함
 

2. mysql을 실행해보자 - 환경변수 설정

 

mysql

notion image
 
notion image
 
3306은 이미 윈도우에서 사용중이므로 충돌날 수 있기 때문에 3307로 설정한다.
docker run -d -p 3307:3306 mydb
notion image
 
 
docker exec -it 7a35 bash
 
우분투에 접속된 것이지 mysql에 접속된게 아니므로 mysql에 접속한다.
mysql -u root -p
notion image
 
notion image
 
notion image
 
컨테이너 종료시 상태 잃으니까 볼륨(명명된 ~)을 사용해서
 
 

3.

data.sql → DML
schema.sql → DDL
두 파일로 나누는게 좋다.
 
notion image
notion image
 
 
 
 
docker build -t mydb .
 
notion image
 
 
docker run \ -d \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=cos1234! \ -v mydb-data:/var/lib/mysql \ mydb
 
 
notion image
 
 
notion image
 
notion image
 
 
볼륨 작성은 컨테이너가 실행될때 할 거임
 
이미지 굽기
현재 패스워드 설정 안 한 상태
docker build -t mydb2 .
notion image
 
내려쓰기 가능 → \ 사용
 
docker run \ -d \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=cos1234! \ -v mydb2-data:/var/lib/mysql \ mydb2
  • -v 이름 : 이름을 가진 볼륨 만들어짐
    • 윈도우에서 관리하는 파일 시스템이 아닌 도커 엔진이 관리하는 파일시스템에 볼륨을 만들고 윈도우에서는 접근 못하고 도커 엔진이 접근 가능
    • 실제 내부에서 mysql이 select 등을 하는 폴더 위치는 /var/lib/mysql → 여기에 db 데이터가 들어감
    • 호스트 시스템이 아닌 명명된 볼륨이 마운트 됨
 
notion image
 
notion image
 
db 백업하고 싶으면 볼륨으로 관리?
 
 

RabbitMQ 띄우기

RabbitMQ란?
push 서버로 구독하는 애들한테 메세지 전송해준다. fcm처럼 쓰는 서버
 
RabbitMQ가 뭔지 대략적으로는 알지만 뭐를 어떻게 설정해야할지 모르겠어서 설정 파일 등은 gpt의 힘을 빌렸다.
 

디렉토리 및 파일 구조

notion image
  • definitions.json : RabbitMQ 서버가 처음 실행될 때 자동으로 사용자, 큐, 익스체인지, 바인딩 등 메시징 설정을 미리 등록하도록 도와주는 초기 상태 정의 파일
{ "users": [ { "name": "admin", "password": "admin123", "tags": "administrator" } ], "vhosts": [ { "name": "/metavhost" } ], "permissions": [ { "user": "admin", "vhost": "/metavhost", "configure": ".*", "write": ".*", "read": ".*" } ], "queues": [ { "name": "meta.queue", "vhost": "/metavhost", "durable": true } ], "exchanges": [ { "name": "meta.exchange", "vhost": "/metavhost", "type": "topic", "durable": true } ], "bindings": [ { "source": "meta.exchange", "destination": "meta.queue", "destination_type": "queue", "routing_key": "meta.key", "vhost": "/metavhost" } ] }
  • rabbitmq.conf : RabbitMQ의 서버 자체 설정을 담는 구성 파일
# 기본 포트 설정 listeners.tcp.default = 5672 management.listener.port = 15672 # 관리 콘솔용 플러그인 management.load_definitions = /etc/rabbitmq/definitions.json # guest 계정 외부 접속 허용 loopback_users.guest = true
 
  • Dockerfile
FROM rabbitmq:3.13.7-management-alpine # 설정 파일 복사 COPY ./rabbitmq/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf # 초기 큐, 사용자 설정 복사 COPY ./rabbitmq/definitions.json /etc/rabbitmq/definitions.json
 

빌드

docker build -t myrabbitmq .
notion image
 

실행

docker run -d \ -p 5672:5672 \ -p 15672:15672 \ -v rabbitmq_data:/var/lib/rabbitmq \ myrabbitmq
notion image
 

실행 결과

localhost:15672로 접근
  • admin이라는 유저로 로그인
  • meta.exchange라는 exchange 생성
  • meta.queue라는 queue 생성
  • meta.exchange에 meta.queue 바인딩
  • 등등
notion image
 
Share article

jay0628