규턴의 개발블로그

기존 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
profile

규턴의 개발블로그

@규턴이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!