반응형
안녕하세요.
이번 글은 여러 도커를 한 묶음으로 활용하는 도커 컴포즈(docker-compose) 설정에 대해 작성하려고 합니다.
시작 명령어
docker-compose up
- 현재 디렉토리에 있는 docker-compose.yml 또는 docker-compose.yaml 파일을 찾아 내부에 정의된 명령어를 실행합니다.
도커 파일 생성
FROM hirokimatsumoto/alpine-openjdk-11
MAINTAINER PS
ADD build/libs/*.jar app.jar
#CMD ["java", "-jar", "/app.jar"]
ENTRYPOINT ["java","-jar","/app.jar"]
도커 파일 설명
키워드 |
키워드 설명 |
예제 값 설명 |
FROM |
생성할 이미지의 베이스 이미지로 |
openjdk:<version> |
MANITAINER | 이미지 작성자의 정보를 입력합니다. | |
ADD | 선택된 파일을 도커 이미지에 추가합니다. | gradle build 이후 생성되는 jar파일을 도커 이미지에 추가하였습니다. 추가할 때 app.jar로 이름이 변경됩니다. |
CMD | 이미지 실행 시 인자 값을 받아 명령어를 변경할 수 있는 명령어입니다. | java -jar /app.jar 친숙한 명령은 jar 파일을 실행하는 명령어이며 list로 표기한 것입니다. |
ENTRYPOINT | 이미지 생성 시 변동이 없는 명령어를 의미합니다. 도커 실행 때 별도 인자 값으로 명령어를 추가할 경우 CMD 인자에 추가되므로 CMD 보다 더 상수적인 실행을 의미합니다. |
java -jar /app.jar |
도커 컴포즈 (docker-compose.yml) 파일 생성
version: '3.0'
services:
web: ①
build: . ②
ports:
- 5000:8080 ③
volumes:
- .:/code
depends_on:
- mongo_user ④
mongo_user: ①
image: mongo ②
ports:
- 27017:27017 ③
Numbering 설명
- 최상위 services는 docker-compose로 묶을 서비스 단위를 의미합니다.
(위 예제에서는 2개의 컨테이너가 패키징 되었습니다.) - ① services 기준으로 one Depth인 [ web ] [ mongo_user ]
- - [web]
- spring web server 입니다.
- - [mongo_user]
- spring web server에서 활용할 몽고 DB 입니다.
- 두 명칭은 사용자 임의의 정의가 가능합니다. (구분을 위해 mongo에는 user를 붙였습니다.)
- - [web]
- ② [ build ] [ image ]
- - [build]
- 현재 위치를 나타내는 접근 연산자 [ . ] 가 있습니다.
- 현재 디렉토리 기준으로 Dockerfile 을 찾아 실행하여 이미지를 생성합니다.
- - [image]
- docker run mongo:latest 와 같이 이미지를 지정할 수 있습니다.
- docker hub에서 pull 할 수 있는 존재하는 이미지를 입력합니다.
- mongoDB 이미지인 mongo:latest를 호출하게 됩니다.
- build와 image는 당연하지만 keyword 입니다.
- - [build]
- ③ [ports]
- docker run -p 6379:6379 ... 와 같은 포트 바인딩입니다.
- - [web]
- - 5000
- 로컬 PC의 브라우저에서 요청을 보낼 때 입력할 포트입니다.
ex) localhost:5000
- 로컬 PC의 브라우저에서 요청을 보낼 때 입력할 포트입니다.
- - 8080
- 도커 컨테이너에서 연결될 포트입니다.
ex) 요청 5000 -> 응답 8080
- 도커 컨테이너에서 연결될 포트입니다.
- - 5000
- - [mongo_user]
- mongoDB에서 기본 포트는 27017로, 같은 값으로 바인딩하도록 설정하였습니다.
- 위 ports 설정이 없을 경우 로컬의 입력이 도커 컨테이너와 통신하지 못합니다.
그렇기 때문에 포트 바인딩 설정을 해주었습니다. - 사용자가 입력한 5000 :
도커 컨테이너에서 받아 줄 : 8080
// TODO 이미지 삽입 : 사용자가 요청할 때 도커 컨테이너로 바인딩시키는 이미지
- ④ [depends_on]
- 컨테이너 간 의존 관계를 의미
- [web] 컨테이너는
[mongo_user] 에 의존적이다.- 예제에서 docker-compose up을 실행하게 되면 mongo_user 가 먼저 실행됩니다.
docker-compose를 사용하며 즐거웠던 부분이 있어 글을 작성하게 되었습니다.
Dockerfile이나 docker-compose.yaml 또는 .yml 파일의 설정은 이보다 더 많이 있습니다만,
프로젝트를 내려받고 해당 명령어만 사용하면 데모를 확인해볼 수 있는 기능에 있어선 이 정도의 사용 방법으로 가능하였습니다.
gradle build
docker-compose up -d
감사합니다.
반응형
'Docker > compose' 카테고리의 다른 글
docker compose 간 network 공유 (0) | 2021.01.23 |
---|---|
docker-compose Device or resource busy (0) | 2021.01.15 |
bootJar to Dockerize(jar 이미지화) : 포트 바인딩, ARG, EXPOSE ... (0) | 2020.06.21 |