Code States/TIL

[0413] (페어) Docker - 애플리케이션 컨테이너화: 풀스택 앱 컨테이너화와 Docker Compose를 이용한 실행

ki1111m2 2023. 4. 13. 17:26

Bare minimum requirement

  • frontend 디렉토리에 있는 파일이 이미지로 빌드되어야 합니다.
    • Apache HTTP Server (httpd:2.4)를 base image로 삼아야 합니다.
    • 컨테이너 내 80포트로 접속시, frontend/index.html이 표시되어야 합니다.
    • frontend/Dockerfile을 채워넣으세요.
  • backend 디렉토리에 있는 파일이 이미지로 빌드되어야 합니다.
    • Node.js 이미지 (node:16-alpine) 를 base image로 삼아야 합니다.
    • 컨테이너 내 80포트로 접속시, hello from server가 응답으로 표시되어야 합니다.
    • backend/Dockerfile을 채워넣으세요.
  • docker-compose.yml 파일을 통해 두 이미지가 동시에 실행되어야 합니다.
    • 두 이미지는 아키텍처에 표시되어 있는 포트 번호로 서로 통신할 수 있어야 합니다.
    • frontend는 backend에 의존성을 가집니다.
    • docker-compose.yml을 채워넣으세요.

백엔드 도커파일 작성

프론트엔드 도커파일 작성

야멜 파일 작성

프론트엔드 동작 확인

백엔드 동작 확인


트러블슈팅

 

처음에 파일을 모두 작성했는데 실행이 안되는 상황이 발생했다

과제를 이미 제출한 다른 분들의 코드와 비교해보았는데, 오타도 전혀 없고, 내용을 아예 복사해서 실행시켜도 오류가 발생

 

깃허브의 리드미 파일을 다시 보니, 변경 사항이 있으면 빌드 후 실행하라고 되어있었음

빌드 없이 실행해서 오류가 발생한건가 싶어서 빌드를 진행

그러나 여전히 같은 오류가 발생했다 .. 

 

팀원분 중 한분이 프론트엔드와 백엔드 폴더에 각각 들어가서 빌드를 하면 실행이 된다고 하셨다

((근데.. 그걸 한번에 하려고 컴포즈를 사용하는건데 그럼 의미가 없지 않나요?

그러게요.. 그래도 일단 실행은 되니..))

일단 팀원분이 알려주신 방법으로 빌드를 했는데 -t 옵션이 안먹는 것이다.. ;;;

--tag 옵션도 안먹고.. 어제 실습할땐 됐는데 ??

 

혹시 맥에서는 옵션이 다른가 싶어서 구글링을 해보다가 아래 글을 발견했다

https://darrengwon.tistory.com/793

 

글을 읽는데.. build는 build 부분에 정의된 대로 빌드한다는 것이 아닌가?

내 파일에 build 부분이 어디있는데??

 

기존 파일은 아래와 같다

version: "3.0"

services:
  frontend:
    image: frontend
    restart: 'always'
    ports:
      - "80:80"
    container_name: frontend

  backend:
    image: backend
    restart: 'always'
    ports:
      - "3333:80"
    container_name: backend

 

과제 제출한 다른 분들도 다.. 이렇게 되어있었고, 어제 실습한 내용도 이와 비슷했기에 build 부분이 필요하다는 것은 물론이고 그런 부분이 있다는 것도 몰랐다

 

그렇게 수정한 코드는 아래와 같다

version: "3.0"

services:
  frontend:
    build: 
      dockerfile: ./frontend/Dockerfile
    image: frontend
    restart: 'always'
    ports:
      - "80:80"
    container_name: frontend

  backend:
    build: 
      dockerfile: ./backend/Dockerfile
    image: backend
    restart: 'always'
    ports:
      - "3333:80"
    container_name: backend

드디어 빌드가 된다..!!!

그러나 이번엔.. 브라우저에서 접속시 다른 화면이 뜬다.. ㅋㅋㅋ...

뭐가 문제인지 몰라서 고민하다가 밥을 먹고왔는데, 팀원분이 해결했다면서 방법을 공유해주셨다

 

version: "3.0"

services:
  frontend:
    build: 
      context: ./frontend
      dockerfile: Dockerfile
    image: frontend
    restart: 'always'
    ports:
      - "80:80"
    container_name: frontend

  backend:
    build: 
      context: ./backend
      dockerfile: Dockerfile
    image: backend
    restart: 'always'
    ports:
      - "3333:80"
    container_name: backend

경로와 파일명을 따로 써줘야하는 것이었다

context는 경로, dockerfile은 도커파일을 명시하는 것 같았다

 

그래도.. 이번에도 시간 내에 해결을 했고, 우리의 힘으로 해결할 수 있어서 다행이다

처음 해보는 도커라서 너무.. 재밌다..!!