1) 프론트 프로젝트로 이동해 Dockerfile을 작성
FROM node:alpine
WORKDIR /FRONT
COPY package.json ./
RUN npm install
COPY ./ ./
CMD ["npm", "run", "start"]
2) 이미지 생성
docker build -t front .
3) 이미지를 컨테이너로 실행
docker run --name hajwoing-front -d -p 3000:3000 hajwoing-front
1) Dockerfile 작성
FROM adoptopenjdk/openjdk11
CMD ["./mvnw", "clean", "package"]
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Dspring.profiles.active=prod", "-jar", "app.jar"]
2) 이미지 생성
docker build -t hajwoing-back .
ERROR [2/2] COPY target/*.jar app.jar
=> 에러 발생 => build파일이 없었기 때문!!
./gradlew build
3) 이미지를 컨테이너로 실행
docker run -t hajwoing-back .
1) Dockerfile작성
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=hajwoing
2) 이미지 생성
docker build -t hajwoing-db -f DockerfileMySQL .
3) 이미지를 컨테이너로 실행
docker run -t hajwoing-db
=> 앞서 이미지를 생성, 빌드 과정을 일일이 하게된다면 프로젝트가 복잡해지면서 귀찮은 일이 될것이다.
=> Docker Compose를 활용해 과정을 통합
version: "3"
services:
haejwoing-back: # 컨테이너 이름
container_name: hajwoing-back # 실행 컨테이너 이름
build:
context: .
dockerfile: ./back/Dockerfile
environment:
SPRING_DATASOURCE_URL: "jdbc:mysql://localhost:3306/haejwoing?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul"
SPRING_DATASOURCE_USERNAME: "root"
SPRING_DATASOURCE_PASSWORD: "root"
SERVER_PORT: "8080"
ports:
- 8080:8080
depends_on: # 이게 실행되어야 backend가 실행됨
- haejwoing-mysql
networks:
- haejwoing_network
restart: always
command: "java -jar /app.jar"
haejwoing-mysql:
image: mysql:8.0.28
cap_add:
- SYS_NICE #mbind: Operation not permitted 오류가 발생하지 않게 된다.
environment:
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: "hajwoing"
MYSQL_USER: "root"
MYSQL_PASSWORD: "root"
command:
[
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci"
]
ports: # 내부의 3306포트가 외부의 3307포트로 연결됨. 외부에서 mysql에 요청하는건 없어서 신경 쓸 필요 없음. 포트 충돌떄문에 함
- 3307:3306
restart: always
networks:
- haejwoing_network
haejwoing-front:
container_name: haejwoing-front
build:
context: .
dockerfile: ./front/DockerfileFront
volumes:
- '.:/app'
- '/app/node_modules'
ports:
- 3001:3000
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
networks:
haejwoing_network:
driver: bridge
=> 이미지 생성되고 스프링 부트, 리액트, MySQL이 정상 실행된다.