DOCKER - 애플리케이션을 AWS ELASTIC BEANSTALK에 배포해 보기 (2)

Sungjin·2021년 8월 28일
1

Docker

목록 보기
6/6
post-thumbnail

🎯 Dockerfile을 작성 해 봅시다!

개발 환경과 운영 환경을 나눠서 도커 파일을 작성하는 것이 좋습니다!

나누는 이유
개발에서 사용하는 서버는 소스를 변경하면 전체 앱을 다시 빌드 해서 변경 소스를 반영해주는 것과 같이
개발 환경에 특화된 기능들이 있습니다.
분명 좋은 기능이지만 운영환경을 살펴 보자면 쓸모 없는 리소스를 사용하게 된다는 말이 될수도 있다는 거죠
그렇기에 개발환경에서는 개발환경에 특화된 서버를 운영환경에서는 조금 더 빠르고 가벼운 Nginx를 많이 사용한다고 합니다.

🚀 개발환경 도커 파일 작성

📌 Backend

Dokcerfile.dev

📌 Frontend

Dockerfile.dev

📌 MySql

  • Mysql은 개발환경과 운영환경을 나누지 않아도 됩니다. 그냥 하나의 컨테이너로서 백엔드 컨테이너와 통신만 하면 되기 때문이죠
  • 운영 환경에서는 AWS RDS를 사용

인코딩 문제로 인하여 한글이 깨질 수도 있습니다. 따라서 따로 설정이 필요합니다.

my.cnf

Dockerfile

📌 Nginx

defaul.conf

Dockerfile

위와 같은 설정이 필요한 이유는 지금 Nginx는 프록시 역할을 하고 있습니다.
따라서 3000번 포트에서는 프론트엔드가, 5000번 포트에서는 백엔드가 돌아가고 있다는 것을 명시 해 주는 것입니다.
Nginx는 80번 포트에서 돌아가며
/api로 오는 요청은 백엔드로 요청이 흘러가고 그 이외에는 모두 프론트엔드로 흘러가도록 설정을 해 줍니다.

📌 Docker-compose.yml

컨테이너들 간 통신을 위한 Docker-compose.yml을 작성 해 줍니다.

📌 실행결과 확인

해당 디렉토리로 간다음 터미널 창에 입력하시면 됩니다.
docker-compose up --build

이렇게 실행이 완료 되었고 한번 localhost:3000에 접속 해 봅시다.

sungjin을 입력 한 다음 mysql 서버로 가서 한번 값이 들어 왔나 확인 해 봅시다

  • mysql 컨테이너에 접근하는 방법
    1. docker ps로 실행 중인 컨테이너 목록확인.
    2. docker exec -it <컨테이너 ID> sh
    3. mysql -u root -p
    4. use myapp;
    5. select * from lists;

sungjin hello라고 잘 들어오는 것을 확인 했습니다.

지금까지 개발 환경 구성은 마치었고 이제 운영환경을 위한 Dockerfile을작성 해 봅시다.

🚀 운영 환경 도커 파일 작성

📌 Backend

  • 운영환경과 개발환경의 차이를 둘 수 있지만 저는 간단한 어플리케이션을 도커를 활용해 배포하는 것을 학습하는 것이 우선이라 따로 차이를 두진 않았습니다.
    그래도 Dockerfile.dev와 Dockefile이렇게 나뉘어지는 것을 학습하기 위해 둘 다 똑같은 내용을 썼지만 나누어 보았습니다.

Dockerfile

📌 Frontend

1편에서의 운영환경 설계를 봅시다!

운영환경 설계를 보시면 리액트는 Nginx서버를 활용해 정적 파일을 제공하도록 하였습니다.
따라서 리액트에서 활용할 Nginx서버를 위한 설정이 또 필요하게 됩니다.

default.conf

Dockerfile

  • root /usr/share/nginx/html; : html파일이 위치할 루트를 설정한다고 보면 됩니다. 어플리케이션이 빌드 되면 이곳에 복사를 해줘야 합니다. 이렇게 설정하는 이유는 nginx가 웹브라우저의 요청이 올때 마다 알맞은 파일을 전해주기 위해서 필요하기 때문 입니다.
  • index index.html index.htm; : index페이지로 설정할 것
  • try_files $uri $uri/ /index.html; : react는 싱글 페이지 어플리케이션 입니다. 그러기에 index.html 하나의 정적 파일만 가지고 있어서 요청이 오더라도 일단 index.html 파일에 접근을 해서 라우팅을 시켜야 하는데 nginx는 자동적으로 이러한 부분들을 알 수 없으니 url에 매핑된 되는 것이 없을 때에 index.html으로 접근 시켜주도록 설정을 해 줍니다.

이렇게 운영환경을 위한 Dockerfile을 다 작성 하였습니다. 이제 운영환경을 github에 push하고 ,travis ci와 연결을 하고, AWS에 배포 해 주는 일이 남았습니다!!

😍 이상으로 포스팅을 마치겠습니다. 감사합니다 :)

profile
WEB STUDY & etc.. HELLO!

0개의 댓글