기존 DockerFile
FROM openjdk:11-jre
EXPOSE 9100
WORKDIR /usr/app
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "-Xms2048M", "-Xmx2048M", "/app.jar"]
FROM: openjdk:11-jre
docker-hub에서 "openjdk:11-jre"이미지를 가져온다
(기존에 로컬에 있는경우는 해당 이미지를 pull하지 않고(dockerhub 들리지않고) 바로 가져옴)
EXPOSE 9100
해당 EXPOSE는 실제 docker가 외부에 9100포트로 공개할것이다. 딱 여기서 끝임
이것만으로 "docker run"했을때 -p 옵션 주지 않으면 9100 포트로 외부 공개 안함
WORKDIR /usr/app
-> 내 작업 directory는 여기라고 선정
cd 명령어와 비슷
추후 실행되는 CMD, ENRTYPOINT, COPY 등 다 WORKDIR에서 실행됨
ARG JAR_FILE=build/libs/*.jar
ARG는 docker build시에 사용되는 변수임
*ENV는 docker build가 아니라 SpringBoot 내에서 환경변수로 들어감(container 실행시)
COPY ${JAR_FILE} app.jar
ARG 에서 저장한 변수를 app.jar로 복사(생성)
* (참고)VOLUME
볼룸 경로 지정
ENTTYPOINT
추후 해당 이미지가 컨테이너화 되었을때 실행되는 명렁어 (항상 실행되어야함)
DockerFile를 이용한 Dockercompose
docker-compose.yml
#https://docs.docker.com/compose/compose-file/compose-file-v3/ 에서 버전 확인 가능
version: '3'
services:
database:
image: mysql:5.7
ports:
- "3306:3306"
restart: always
volumes: ./mydata:/var/lib/mysql
environment:
- MYSQL_ROOTPASSWD=1234!!
- MYSQL_DATABASE=testDB
- MYSQL_USER=test
- MYSQL_PASSWORD=1234
backend:
build:
context: ./
dockerfile: Dockerfile
image: test-image:1.0
volumes:
- ./backend:/usr/src/app
ports:
- "9100:8080"
environment:
- HIBERNATE_DDL_AUTO: create
container_name: test-container
해당 docker-compose파일은 두개의 container를 관리함
1. database(mysql)
2. backend app
1. database(mysql 이미지 사용)컨테이너
- image: mysql:5.7
docker-hub에서 이미지를 가져와서 사용한다.
ports:
- "3306:3306"
3306포트(mysql)를 3306포트로 외부에 노출
restart: always
container를 항상 재시작한다.
ex) docker demon이 종료되었다 다시 시작되면 자동으로 재시작
volumes: ./mydata:/var/lib/mysql
로컬의 현재경로의 mydata를 docker container의 /var/lib/mysql폴더에 바인드마운트
environment:
- MYSQL_ROOTPASSWD=1234!!
- MYSQL_DATABASE=testDB
- MYSQL_USER=test
- MYSQL_PASSWORD=1234
다음과 같은 환경변수를 설정
2. backend app컨테이너
build:
context: ./
dockerfile: Dockerfile
현재경로에 있는 Dockerfile을 이용하여 이미지 빌드한다.
image: test-image:1.0
이미지 이름은 "test-image:1.0"으로 설정한다
volumes:
- ./backend:/usr/src/app
볼륨은 현재경로의 backend(local)를 /usr/src/app으로 바인드마운트한다.
ports:
- "9100:8080"
container내에서 실행되는 app의 내부 포트는 9100
해당 포트(9100)을 8080으로 외부에 노출시킴
environment:
- HIBERNATE_DDL_AUTO: create
환경변수는 다음과 같이 설정
container_name: test-container
컨테이너 네임은 "test-container"로 설정
'devops > docker' 카테고리의 다른 글
[Docker] Docker 자주쓰는 명령어 정리 (0) | 2022.10.05 |
---|---|
[Docker]Docker volume?? (0) | 2022.09.16 |
[Docker] Docker란?? (0) | 2022.09.05 |